commit 26cad2e

hovercats  ·  2024-10-26 17:52:13 +0000 UTC
parent 10bf07a
yt-dlp: import from oasis
10 files changed,  +1343, -0
+2, -0
 1@@ -73,6 +73,7 @@ subgen 'opus'
 2 subgen 'pcre'
 3 subgen 'pigz'
 4 subgen 'pixman'
 5+subgen 'python'
 6 subgen 'qbe'
 7 subgen 'quark'
 8 subgen 'rc'
 9@@ -107,5 +108,6 @@ subgen 'wld'
10 subgen 'wpa_supplicant'
11 subgen 'xkeyboard-config'
12 subgen 'xz'
13+subgen 'yt-dlp'
14 subgen 'zlib'
15 subgen 'zstd'
+2, -0
1@@ -0,0 +1,2 @@
2+/src
3+/yt-dlp.tar.gz
+7, -0
1@@ -0,0 +1,7 @@
2+file('bin/yt-dlp', '755', '$dir/yt-dlp')
3+for f in iterlines('pylibs.txt') do
4+	file('lib/python3.10/'..f, '644', '$srcdir/'..f)
5+end
6+man{'yt-dlp.1'}
7+
8+fetch 'curl'
+248, -0
  1@@ -0,0 +1,248 @@
  2+From 85781c9dc7a882b8638dcfdd60da14261178f437 Mon Sep 17 00:00:00 2001
  3+From: Michael Forney <mforney@mforney.org>
  4+Date: Mon, 4 Jul 2016 16:14:18 -0700
  5+Subject: [PATCH] Disable use of ctypes and dynamic loading
  6+
  7+---
  8+ yt_dlp/cookies.py      | 100 -----------------------------------------
  9+ yt_dlp/utils/_utils.py |  85 +----------------------------------
 10+ 2 files changed, 2 insertions(+), 183 deletions(-)
 11+
 12+diff --git a/yt_dlp/cookies.py b/yt_dlp/cookies.py
 13+index 070d2fcb9..e527fdec4 100644
 14+--- a/yt_dlp/cookies.py
 15++++ b/yt_dlp/cookies.py
 16+@@ -400,8 +400,6 @@ def decrypt(self, encrypted_value):
 17+ def get_cookie_decryptor(browser_root, browser_keyring_name, logger, *, keyring=None):
 18+     if sys.platform == 'darwin':
 19+         return MacChromeCookieDecryptor(browser_keyring_name, logger)
 20+-    elif sys.platform in ('win32', 'cygwin'):
 21+-        return WindowsChromeCookieDecryptor(browser_root, logger)
 22+     return LinuxChromeCookieDecryptor(browser_keyring_name, logger, keyring=keyring)
 23+ 
 24+ 
 25+@@ -488,43 +486,6 @@ def decrypt(self, encrypted_value):
 26+             return encrypted_value
 27+ 
 28+ 
 29+-class WindowsChromeCookieDecryptor(ChromeCookieDecryptor):
 30+-    def __init__(self, browser_root, logger):
 31+-        self._logger = logger
 32+-        self._v10_key = _get_windows_v10_key(browser_root, logger)
 33+-        self._cookie_counts = {'v10': 0, 'other': 0}
 34+-
 35+-    def decrypt(self, encrypted_value):
 36+-        version = encrypted_value[:3]
 37+-        ciphertext = encrypted_value[3:]
 38+-
 39+-        if version == b'v10':
 40+-            self._cookie_counts['v10'] += 1
 41+-            if self._v10_key is None:
 42+-                self._logger.warning('cannot decrypt v10 cookies: no key found', only_once=True)
 43+-                return None
 44+-
 45+-            # https://chromium.googlesource.com/chromium/src/+/refs/heads/main/components/os_crypt/sync/os_crypt_win.cc
 46+-            #   kNonceLength
 47+-            nonce_length = 96 // 8
 48+-            # boringssl
 49+-            #   EVP_AEAD_AES_GCM_TAG_LEN
 50+-            authentication_tag_length = 16
 51+-
 52+-            raw_ciphertext = ciphertext
 53+-            nonce = raw_ciphertext[:nonce_length]
 54+-            ciphertext = raw_ciphertext[nonce_length:-authentication_tag_length]
 55+-            authentication_tag = raw_ciphertext[-authentication_tag_length:]
 56+-
 57+-            return _decrypt_aes_gcm(ciphertext, self._v10_key, nonce, authentication_tag, self._logger)
 58+-
 59+-        else:
 60+-            self._cookie_counts['other'] += 1
 61+-            # any other prefix means the data is DPAPI encrypted
 62+-            # https://chromium.googlesource.com/chromium/src/+/refs/heads/main/components/os_crypt/sync/os_crypt_win.cc
 63+-            return _decrypt_windows_dpapi(encrypted_value, self._logger).decode()
 64+-
 65+-
 66+ def _extract_safari_cookies(profile, logger):
 67+     if sys.platform != 'darwin':
 68+         raise ValueError(f'unsupported platform: {sys.platform}')
 69+@@ -971,33 +932,6 @@ def _get_mac_keyring_password(browser_keyring_name, logger):
 70+         return None
 71+ 
 72+ 
 73+-def _get_windows_v10_key(browser_root, logger):
 74+-    """
 75+-    References:
 76+-        - [1] https://chromium.googlesource.com/chromium/src/+/refs/heads/main/components/os_crypt/sync/os_crypt_win.cc
 77+-    """
 78+-    path = _newest(_find_files(browser_root, 'Local State', logger))
 79+-    if path is None:
 80+-        logger.error('could not find local state file')
 81+-        return None
 82+-    logger.debug(f'Found local state file at "{path}"')
 83+-    with open(path, encoding='utf8') as f:
 84+-        data = json.load(f)
 85+-    try:
 86+-        # kOsCryptEncryptedKeyPrefName in [1]
 87+-        base64_key = data['os_crypt']['encrypted_key']
 88+-    except KeyError:
 89+-        logger.error('no encrypted key in Local State')
 90+-        return None
 91+-    encrypted_key = base64.b64decode(base64_key)
 92+-    # kDPAPIKeyPrefix in [1]
 93+-    prefix = b'DPAPI'
 94+-    if not encrypted_key.startswith(prefix):
 95+-        logger.error('invalid key')
 96+-        return None
 97+-    return _decrypt_windows_dpapi(encrypted_key[len(prefix):], logger)
 98+-
 99+-
100+ def pbkdf2_sha1(password, salt, iterations, key_length):
101+     return hashlib.pbkdf2_hmac('sha1', password, salt, iterations, key_length)
102+ 
103+@@ -1027,40 +961,6 @@ def _decrypt_aes_gcm(ciphertext, key, nonce, authentication_tag, logger):
104+         return None
105+ 
106+ 
107+-def _decrypt_windows_dpapi(ciphertext, logger):
108+-    """
109+-    References:
110+-        - https://docs.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptunprotectdata
111+-    """
112+-
113+-    import ctypes
114+-    import ctypes.wintypes
115+-
116+-    class DATA_BLOB(ctypes.Structure):
117+-        _fields_ = [('cbData', ctypes.wintypes.DWORD),
118+-                    ('pbData', ctypes.POINTER(ctypes.c_char))]
119+-
120+-    buffer = ctypes.create_string_buffer(ciphertext)
121+-    blob_in = DATA_BLOB(ctypes.sizeof(buffer), buffer)
122+-    blob_out = DATA_BLOB()
123+-    ret = ctypes.windll.crypt32.CryptUnprotectData(
124+-        ctypes.byref(blob_in),  # pDataIn
125+-        None,  # ppszDataDescr: human readable description of pDataIn
126+-        None,  # pOptionalEntropy: salt?
127+-        None,  # pvReserved: must be NULL
128+-        None,  # pPromptStruct: information about prompts to display
129+-        0,  # dwFlags
130+-        ctypes.byref(blob_out),  # pDataOut
131+-    )
132+-    if not ret:
133+-        logger.warning('failed to decrypt with DPAPI', only_once=True)
134+-        return None
135+-
136+-    result = ctypes.string_at(blob_out.pbData, blob_out.cbData)
137+-    ctypes.windll.kernel32.LocalFree(blob_out.pbData)
138+-    return result
139+-
140+-
141+ def _config_home():
142+     return os.environ.get('XDG_CONFIG_HOME', os.path.expanduser('~/.config'))
143+ 
144+diff --git a/yt_dlp/utils/_utils.py b/yt_dlp/utils/_utils.py
145+index 0d3e707c5..357f145d7 100644
146+--- a/yt_dlp/utils/_utils.py
147++++ b/yt_dlp/utils/_utils.py
148+@@ -1482,64 +1482,7 @@ def __init__(self):
149+         super().__init__(self.msg)
150+ 
151+ 
152+-# Cross-platform file locking
153+-if sys.platform == 'win32':
154+-    import ctypes
155+-    import ctypes.wintypes
156+-    import msvcrt
157+-
158+-    class OVERLAPPED(ctypes.Structure):
159+-        _fields_ = [
160+-            ('Internal', ctypes.wintypes.LPVOID),
161+-            ('InternalHigh', ctypes.wintypes.LPVOID),
162+-            ('Offset', ctypes.wintypes.DWORD),
163+-            ('OffsetHigh', ctypes.wintypes.DWORD),
164+-            ('hEvent', ctypes.wintypes.HANDLE),
165+-        ]
166+-
167+-    kernel32 = ctypes.WinDLL('kernel32')
168+-    LockFileEx = kernel32.LockFileEx
169+-    LockFileEx.argtypes = [
170+-        ctypes.wintypes.HANDLE,     # hFile
171+-        ctypes.wintypes.DWORD,      # dwFlags
172+-        ctypes.wintypes.DWORD,      # dwReserved
173+-        ctypes.wintypes.DWORD,      # nNumberOfBytesToLockLow
174+-        ctypes.wintypes.DWORD,      # nNumberOfBytesToLockHigh
175+-        ctypes.POINTER(OVERLAPPED),  # Overlapped
176+-    ]
177+-    LockFileEx.restype = ctypes.wintypes.BOOL
178+-    UnlockFileEx = kernel32.UnlockFileEx
179+-    UnlockFileEx.argtypes = [
180+-        ctypes.wintypes.HANDLE,     # hFile
181+-        ctypes.wintypes.DWORD,      # dwReserved
182+-        ctypes.wintypes.DWORD,      # nNumberOfBytesToLockLow
183+-        ctypes.wintypes.DWORD,      # nNumberOfBytesToLockHigh
184+-        ctypes.POINTER(OVERLAPPED),  # Overlapped
185+-    ]
186+-    UnlockFileEx.restype = ctypes.wintypes.BOOL
187+-    whole_low = 0xffffffff
188+-    whole_high = 0x7fffffff
189+-
190+-    def _lock_file(f, exclusive, block):
191+-        overlapped = OVERLAPPED()
192+-        overlapped.Offset = 0
193+-        overlapped.OffsetHigh = 0
194+-        overlapped.hEvent = 0
195+-        f._lock_file_overlapped_p = ctypes.pointer(overlapped)
196+-
197+-        if not LockFileEx(msvcrt.get_osfhandle(f.fileno()),
198+-                          (0x2 if exclusive else 0x0) | (0x0 if block else 0x1),
199+-                          0, whole_low, whole_high, f._lock_file_overlapped_p):
200+-            # NB: No argument form of "ctypes.FormatError" does not work on PyPy
201+-            raise BlockingIOError(f'Locking file failed: {ctypes.FormatError(ctypes.GetLastError())!r}')
202+-
203+-    def _unlock_file(f):
204+-        assert f._lock_file_overlapped_p
205+-        handle = msvcrt.get_osfhandle(f.fileno())
206+-        if not UnlockFileEx(handle, 0, whole_low, whole_high, f._lock_file_overlapped_p):
207+-            raise OSError(f'Unlocking file failed: {ctypes.FormatError()!r}')
208+-
209+-else:
210++if True:
211+     try:
212+         import fcntl
213+ 
214+@@ -1888,31 +1831,7 @@ def fix_xml_ampersands(xml_str):
215+ 
216+ 
217+ def setproctitle(title):
218+-    assert isinstance(title, str)
219+-
220+-    # Workaround for https://github.com/yt-dlp/yt-dlp/issues/4541
221+-    try:
222+-        import ctypes
223+-    except ImportError:
224+-        return
225+-
226+-    try:
227+-        libc = ctypes.cdll.LoadLibrary('libc.so.6')
228+-    except OSError:
229+-        return
230+-    except TypeError:
231+-        # LoadLibrary in Windows Python 2.7.13 only expects
232+-        # a bytestring, but since unicode_literals turns
233+-        # every string into a unicode string, it fails.
234+-        return
235+-    title_bytes = title.encode()
236+-    buf = ctypes.create_string_buffer(len(title_bytes))
237+-    buf.value = title_bytes
238+-    try:
239+-        # PR_SET_NAME = 15      Ref: /usr/include/linux/prctl.h
240+-        libc.prctl(15, buf, 0, 0, 0)
241+-    except AttributeError:
242+-        return  # Strange libc, just skip this
243++    return
244+ 
245+ 
246+ def remove_start(s, start):
247+-- 
248+2.44.0
249+
+1074, -0
   1@@ -0,0 +1,1074 @@
   2+# 2,<cd src && find yt_dlp -type f -name '*.py' | LC_COLLATE=C sort
   3+yt_dlp/YoutubeDL.py
   4+yt_dlp/__init__.py
   5+yt_dlp/__main__.py
   6+yt_dlp/__pyinstaller/__init__.py
   7+yt_dlp/__pyinstaller/hook-yt_dlp.py
   8+yt_dlp/aes.py
   9+yt_dlp/cache.py
  10+yt_dlp/compat/__init__.py
  11+yt_dlp/compat/_deprecated.py
  12+yt_dlp/compat/_legacy.py
  13+yt_dlp/compat/compat_utils.py
  14+yt_dlp/compat/functools.py
  15+yt_dlp/compat/imghdr.py
  16+yt_dlp/compat/shutil.py
  17+yt_dlp/compat/types.py
  18+yt_dlp/compat/urllib/__init__.py
  19+yt_dlp/compat/urllib/request.py
  20+yt_dlp/cookies.py
  21+yt_dlp/dependencies/Cryptodome.py
  22+yt_dlp/dependencies/__init__.py
  23+yt_dlp/downloader/__init__.py
  24+yt_dlp/downloader/common.py
  25+yt_dlp/downloader/dash.py
  26+yt_dlp/downloader/external.py
  27+yt_dlp/downloader/f4m.py
  28+yt_dlp/downloader/fc2.py
  29+yt_dlp/downloader/fragment.py
  30+yt_dlp/downloader/hls.py
  31+yt_dlp/downloader/http.py
  32+yt_dlp/downloader/ism.py
  33+yt_dlp/downloader/mhtml.py
  34+yt_dlp/downloader/niconico.py
  35+yt_dlp/downloader/rtmp.py
  36+yt_dlp/downloader/rtsp.py
  37+yt_dlp/downloader/websocket.py
  38+yt_dlp/downloader/youtube_live_chat.py
  39+yt_dlp/extractor/__init__.py
  40+yt_dlp/extractor/_extractors.py
  41+yt_dlp/extractor/abc.py
  42+yt_dlp/extractor/abcnews.py
  43+yt_dlp/extractor/abcotvs.py
  44+yt_dlp/extractor/abematv.py
  45+yt_dlp/extractor/academicearth.py
  46+yt_dlp/extractor/acast.py
  47+yt_dlp/extractor/acfun.py
  48+yt_dlp/extractor/adn.py
  49+yt_dlp/extractor/adobeconnect.py
  50+yt_dlp/extractor/adobepass.py
  51+yt_dlp/extractor/adobetv.py
  52+yt_dlp/extractor/adultswim.py
  53+yt_dlp/extractor/aenetworks.py
  54+yt_dlp/extractor/aeonco.py
  55+yt_dlp/extractor/afreecatv.py
  56+yt_dlp/extractor/agora.py
  57+yt_dlp/extractor/airtv.py
  58+yt_dlp/extractor/aitube.py
  59+yt_dlp/extractor/aliexpress.py
  60+yt_dlp/extractor/aljazeera.py
  61+yt_dlp/extractor/allocine.py
  62+yt_dlp/extractor/allstar.py
  63+yt_dlp/extractor/alphaporno.py
  64+yt_dlp/extractor/alsace20tv.py
  65+yt_dlp/extractor/altcensored.py
  66+yt_dlp/extractor/alura.py
  67+yt_dlp/extractor/amadeustv.py
  68+yt_dlp/extractor/amara.py
  69+yt_dlp/extractor/amazon.py
  70+yt_dlp/extractor/amazonminitv.py
  71+yt_dlp/extractor/amcnetworks.py
  72+yt_dlp/extractor/americastestkitchen.py
  73+yt_dlp/extractor/amp.py
  74+yt_dlp/extractor/anchorfm.py
  75+yt_dlp/extractor/angel.py
  76+yt_dlp/extractor/antenna.py
  77+yt_dlp/extractor/anvato.py
  78+yt_dlp/extractor/aol.py
  79+yt_dlp/extractor/apa.py
  80+yt_dlp/extractor/aparat.py
  81+yt_dlp/extractor/appleconnect.py
  82+yt_dlp/extractor/applepodcasts.py
  83+yt_dlp/extractor/appletrailers.py
  84+yt_dlp/extractor/archiveorg.py
  85+yt_dlp/extractor/arcpublishing.py
  86+yt_dlp/extractor/ard.py
  87+yt_dlp/extractor/arkena.py
  88+yt_dlp/extractor/arnes.py
  89+yt_dlp/extractor/art19.py
  90+yt_dlp/extractor/arte.py
  91+yt_dlp/extractor/asobichannel.py
  92+yt_dlp/extractor/asobistage.py
  93+yt_dlp/extractor/atresplayer.py
  94+yt_dlp/extractor/atscaleconf.py
  95+yt_dlp/extractor/atvat.py
  96+yt_dlp/extractor/audimedia.py
  97+yt_dlp/extractor/audioboom.py
  98+yt_dlp/extractor/audiodraft.py
  99+yt_dlp/extractor/audiomack.py
 100+yt_dlp/extractor/audius.py
 101+yt_dlp/extractor/awaan.py
 102+yt_dlp/extractor/aws.py
 103+yt_dlp/extractor/axs.py
 104+yt_dlp/extractor/azmedien.py
 105+yt_dlp/extractor/baidu.py
 106+yt_dlp/extractor/banbye.py
 107+yt_dlp/extractor/bandaichannel.py
 108+yt_dlp/extractor/bandcamp.py
 109+yt_dlp/extractor/bannedvideo.py
 110+yt_dlp/extractor/bbc.py
 111+yt_dlp/extractor/beatbump.py
 112+yt_dlp/extractor/beatport.py
 113+yt_dlp/extractor/beeg.py
 114+yt_dlp/extractor/behindkink.py
 115+yt_dlp/extractor/bellmedia.py
 116+yt_dlp/extractor/berufetv.py
 117+yt_dlp/extractor/bet.py
 118+yt_dlp/extractor/bfi.py
 119+yt_dlp/extractor/bfmtv.py
 120+yt_dlp/extractor/bibeltv.py
 121+yt_dlp/extractor/bigflix.py
 122+yt_dlp/extractor/bigo.py
 123+yt_dlp/extractor/bild.py
 124+yt_dlp/extractor/bilibili.py
 125+yt_dlp/extractor/biobiochiletv.py
 126+yt_dlp/extractor/bitchute.py
 127+yt_dlp/extractor/blackboardcollaborate.py
 128+yt_dlp/extractor/bleacherreport.py
 129+yt_dlp/extractor/blerp.py
 130+yt_dlp/extractor/blogger.py
 131+yt_dlp/extractor/bloomberg.py
 132+yt_dlp/extractor/bokecc.py
 133+yt_dlp/extractor/bongacams.py
 134+yt_dlp/extractor/boosty.py
 135+yt_dlp/extractor/bostonglobe.py
 136+yt_dlp/extractor/box.py
 137+yt_dlp/extractor/boxcast.py
 138+yt_dlp/extractor/bpb.py
 139+yt_dlp/extractor/br.py
 140+yt_dlp/extractor/brainpop.py
 141+yt_dlp/extractor/bravotv.py
 142+yt_dlp/extractor/breitbart.py
 143+yt_dlp/extractor/brightcove.py
 144+yt_dlp/extractor/brilliantpala.py
 145+yt_dlp/extractor/bundesliga.py
 146+yt_dlp/extractor/bundestag.py
 147+yt_dlp/extractor/businessinsider.py
 148+yt_dlp/extractor/buzzfeed.py
 149+yt_dlp/extractor/byutv.py
 150+yt_dlp/extractor/c56.py
 151+yt_dlp/extractor/caffeinetv.py
 152+yt_dlp/extractor/callin.py
 153+yt_dlp/extractor/caltrans.py
 154+yt_dlp/extractor/cam4.py
 155+yt_dlp/extractor/camdemy.py
 156+yt_dlp/extractor/camfm.py
 157+yt_dlp/extractor/cammodels.py
 158+yt_dlp/extractor/camsoda.py
 159+yt_dlp/extractor/camtasia.py
 160+yt_dlp/extractor/canal1.py
 161+yt_dlp/extractor/canalalpha.py
 162+yt_dlp/extractor/canalc2.py
 163+yt_dlp/extractor/canalplus.py
 164+yt_dlp/extractor/caracoltv.py
 165+yt_dlp/extractor/cartoonnetwork.py
 166+yt_dlp/extractor/cbc.py
 167+yt_dlp/extractor/cbs.py
 168+yt_dlp/extractor/cbsnews.py
 169+yt_dlp/extractor/cbssports.py
 170+yt_dlp/extractor/ccc.py
 171+yt_dlp/extractor/ccma.py
 172+yt_dlp/extractor/cctv.py
 173+yt_dlp/extractor/cda.py
 174+yt_dlp/extractor/cellebrite.py
 175+yt_dlp/extractor/ceskatelevize.py
 176+yt_dlp/extractor/cgtn.py
 177+yt_dlp/extractor/charlierose.py
 178+yt_dlp/extractor/chaturbate.py
 179+yt_dlp/extractor/chilloutzone.py
 180+yt_dlp/extractor/chzzk.py
 181+yt_dlp/extractor/cinemax.py
 182+yt_dlp/extractor/cinetecamilano.py
 183+yt_dlp/extractor/cineverse.py
 184+yt_dlp/extractor/ciscolive.py
 185+yt_dlp/extractor/ciscowebex.py
 186+yt_dlp/extractor/cjsw.py
 187+yt_dlp/extractor/clipchamp.py
 188+yt_dlp/extractor/clippit.py
 189+yt_dlp/extractor/cliprs.py
 190+yt_dlp/extractor/closertotruth.py
 191+yt_dlp/extractor/cloudflarestream.py
 192+yt_dlp/extractor/cloudycdn.py
 193+yt_dlp/extractor/clubic.py
 194+yt_dlp/extractor/clyp.py
 195+yt_dlp/extractor/cmt.py
 196+yt_dlp/extractor/cnbc.py
 197+yt_dlp/extractor/cnn.py
 198+yt_dlp/extractor/comedycentral.py
 199+yt_dlp/extractor/common.py
 200+yt_dlp/extractor/commonmistakes.py
 201+yt_dlp/extractor/commonprotocols.py
 202+yt_dlp/extractor/condenast.py
 203+yt_dlp/extractor/contv.py
 204+yt_dlp/extractor/corus.py
 205+yt_dlp/extractor/coub.py
 206+yt_dlp/extractor/cozytv.py
 207+yt_dlp/extractor/cpac.py
 208+yt_dlp/extractor/cracked.py
 209+yt_dlp/extractor/crackle.py
 210+yt_dlp/extractor/craftsy.py
 211+yt_dlp/extractor/crooksandliars.py
 212+yt_dlp/extractor/crowdbunker.py
 213+yt_dlp/extractor/crtvg.py
 214+yt_dlp/extractor/crunchyroll.py
 215+yt_dlp/extractor/cspan.py
 216+yt_dlp/extractor/ctsnews.py
 217+yt_dlp/extractor/ctv.py
 218+yt_dlp/extractor/ctvnews.py
 219+yt_dlp/extractor/cultureunplugged.py
 220+yt_dlp/extractor/curiositystream.py
 221+yt_dlp/extractor/cwtv.py
 222+yt_dlp/extractor/cybrary.py
 223+yt_dlp/extractor/dacast.py
 224+yt_dlp/extractor/dailymail.py
 225+yt_dlp/extractor/dailymotion.py
 226+yt_dlp/extractor/dailywire.py
 227+yt_dlp/extractor/damtomo.py
 228+yt_dlp/extractor/dangalplay.py
 229+yt_dlp/extractor/daum.py
 230+yt_dlp/extractor/daystar.py
 231+yt_dlp/extractor/dbtv.py
 232+yt_dlp/extractor/dctp.py
 233+yt_dlp/extractor/deezer.py
 234+yt_dlp/extractor/democracynow.py
 235+yt_dlp/extractor/detik.py
 236+yt_dlp/extractor/deuxm.py
 237+yt_dlp/extractor/dfb.py
 238+yt_dlp/extractor/dhm.py
 239+yt_dlp/extractor/digitalconcerthall.py
 240+yt_dlp/extractor/digiteka.py
 241+yt_dlp/extractor/discogs.py
 242+yt_dlp/extractor/disney.py
 243+yt_dlp/extractor/dispeak.py
 244+yt_dlp/extractor/dlf.py
 245+yt_dlp/extractor/dlive.py
 246+yt_dlp/extractor/douyutv.py
 247+yt_dlp/extractor/dplay.py
 248+yt_dlp/extractor/drbonanza.py
 249+yt_dlp/extractor/dreisat.py
 250+yt_dlp/extractor/drooble.py
 251+yt_dlp/extractor/dropbox.py
 252+yt_dlp/extractor/dropout.py
 253+yt_dlp/extractor/drtuber.py
 254+yt_dlp/extractor/drtv.py
 255+yt_dlp/extractor/dtube.py
 256+yt_dlp/extractor/duboku.py
 257+yt_dlp/extractor/dumpert.py
 258+yt_dlp/extractor/duoplay.py
 259+yt_dlp/extractor/dvtv.py
 260+yt_dlp/extractor/dw.py
 261+yt_dlp/extractor/eagleplatform.py
 262+yt_dlp/extractor/ebaumsworld.py
 263+yt_dlp/extractor/ebay.py
 264+yt_dlp/extractor/egghead.py
 265+yt_dlp/extractor/eighttracks.py
 266+yt_dlp/extractor/eitb.py
 267+yt_dlp/extractor/elementorembed.py
 268+yt_dlp/extractor/elonet.py
 269+yt_dlp/extractor/elpais.py
 270+yt_dlp/extractor/eltrecetv.py
 271+yt_dlp/extractor/embedly.py
 272+yt_dlp/extractor/epicon.py
 273+yt_dlp/extractor/epidemicsound.py
 274+yt_dlp/extractor/eplus.py
 275+yt_dlp/extractor/epoch.py
 276+yt_dlp/extractor/eporner.py
 277+yt_dlp/extractor/erocast.py
 278+yt_dlp/extractor/eroprofile.py
 279+yt_dlp/extractor/err.py
 280+yt_dlp/extractor/ertgr.py
 281+yt_dlp/extractor/espn.py
 282+yt_dlp/extractor/ettutv.py
 283+yt_dlp/extractor/europa.py
 284+yt_dlp/extractor/europeantour.py
 285+yt_dlp/extractor/eurosport.py
 286+yt_dlp/extractor/euscreen.py
 287+yt_dlp/extractor/expressen.py
 288+yt_dlp/extractor/extractors.py
 289+yt_dlp/extractor/eyedotv.py
 290+yt_dlp/extractor/facebook.py
 291+yt_dlp/extractor/fancode.py
 292+yt_dlp/extractor/fathom.py
 293+yt_dlp/extractor/faz.py
 294+yt_dlp/extractor/fc2.py
 295+yt_dlp/extractor/fczenit.py
 296+yt_dlp/extractor/fifa.py
 297+yt_dlp/extractor/filmon.py
 298+yt_dlp/extractor/filmweb.py
 299+yt_dlp/extractor/firsttv.py
 300+yt_dlp/extractor/fivetv.py
 301+yt_dlp/extractor/flextv.py
 302+yt_dlp/extractor/flickr.py
 303+yt_dlp/extractor/floatplane.py
 304+yt_dlp/extractor/folketinget.py
 305+yt_dlp/extractor/footyroom.py
 306+yt_dlp/extractor/formula1.py
 307+yt_dlp/extractor/fourtube.py
 308+yt_dlp/extractor/fox.py
 309+yt_dlp/extractor/fox9.py
 310+yt_dlp/extractor/foxnews.py
 311+yt_dlp/extractor/foxsports.py
 312+yt_dlp/extractor/fptplay.py
 313+yt_dlp/extractor/franceinter.py
 314+yt_dlp/extractor/francetv.py
 315+yt_dlp/extractor/freesound.py
 316+yt_dlp/extractor/freespeech.py
 317+yt_dlp/extractor/freetv.py
 318+yt_dlp/extractor/frontendmasters.py
 319+yt_dlp/extractor/fujitv.py
 320+yt_dlp/extractor/funimation.py
 321+yt_dlp/extractor/funk.py
 322+yt_dlp/extractor/funker530.py
 323+yt_dlp/extractor/fuyintv.py
 324+yt_dlp/extractor/gab.py
 325+yt_dlp/extractor/gaia.py
 326+yt_dlp/extractor/gamejolt.py
 327+yt_dlp/extractor/gamespot.py
 328+yt_dlp/extractor/gamestar.py
 329+yt_dlp/extractor/gaskrank.py
 330+yt_dlp/extractor/gazeta.py
 331+yt_dlp/extractor/gbnews.py
 332+yt_dlp/extractor/gdcvault.py
 333+yt_dlp/extractor/gedidigital.py
 334+yt_dlp/extractor/generic.py
 335+yt_dlp/extractor/genericembeds.py
 336+yt_dlp/extractor/genius.py
 337+yt_dlp/extractor/getcourseru.py
 338+yt_dlp/extractor/gettr.py
 339+yt_dlp/extractor/giantbomb.py
 340+yt_dlp/extractor/gigya.py
 341+yt_dlp/extractor/glide.py
 342+yt_dlp/extractor/globalplayer.py
 343+yt_dlp/extractor/globo.py
 344+yt_dlp/extractor/glomex.py
 345+yt_dlp/extractor/gmanetwork.py
 346+yt_dlp/extractor/go.py
 347+yt_dlp/extractor/godresource.py
 348+yt_dlp/extractor/godtube.py
 349+yt_dlp/extractor/gofile.py
 350+yt_dlp/extractor/golem.py
 351+yt_dlp/extractor/goodgame.py
 352+yt_dlp/extractor/googledrive.py
 353+yt_dlp/extractor/googlepodcasts.py
 354+yt_dlp/extractor/googlesearch.py
 355+yt_dlp/extractor/goplay.py
 356+yt_dlp/extractor/gopro.py
 357+yt_dlp/extractor/goshgay.py
 358+yt_dlp/extractor/gotostage.py
 359+yt_dlp/extractor/gputechconf.py
 360+yt_dlp/extractor/graspop.py
 361+yt_dlp/extractor/gronkh.py
 362+yt_dlp/extractor/groupon.py
 363+yt_dlp/extractor/harpodeon.py
 364+yt_dlp/extractor/hbo.py
 365+yt_dlp/extractor/hearthisat.py
 366+yt_dlp/extractor/heise.py
 367+yt_dlp/extractor/hellporno.py
 368+yt_dlp/extractor/hgtv.py
 369+yt_dlp/extractor/hidive.py
 370+yt_dlp/extractor/historicfilms.py
 371+yt_dlp/extractor/hitrecord.py
 372+yt_dlp/extractor/hketv.py
 373+yt_dlp/extractor/hollywoodreporter.py
 374+yt_dlp/extractor/holodex.py
 375+yt_dlp/extractor/hotnewhiphop.py
 376+yt_dlp/extractor/hotstar.py
 377+yt_dlp/extractor/hrefli.py
 378+yt_dlp/extractor/hrfensehen.py
 379+yt_dlp/extractor/hrti.py
 380+yt_dlp/extractor/hse.py
 381+yt_dlp/extractor/huajiao.py
 382+yt_dlp/extractor/huffpost.py
 383+yt_dlp/extractor/hungama.py
 384+yt_dlp/extractor/huya.py
 385+yt_dlp/extractor/hypem.py
 386+yt_dlp/extractor/hypergryph.py
 387+yt_dlp/extractor/hytale.py
 388+yt_dlp/extractor/icareus.py
 389+yt_dlp/extractor/ichinanalive.py
 390+yt_dlp/extractor/idolplus.py
 391+yt_dlp/extractor/ign.py
 392+yt_dlp/extractor/iheart.py
 393+yt_dlp/extractor/ilpost.py
 394+yt_dlp/extractor/iltalehti.py
 395+yt_dlp/extractor/imdb.py
 396+yt_dlp/extractor/imggaming.py
 397+yt_dlp/extractor/imgur.py
 398+yt_dlp/extractor/ina.py
 399+yt_dlp/extractor/inc.py
 400+yt_dlp/extractor/indavideo.py
 401+yt_dlp/extractor/infoq.py
 402+yt_dlp/extractor/instagram.py
 403+yt_dlp/extractor/internazionale.py
 404+yt_dlp/extractor/internetvideoarchive.py
 405+yt_dlp/extractor/iprima.py
 406+yt_dlp/extractor/iqiyi.py
 407+yt_dlp/extractor/islamchannel.py
 408+yt_dlp/extractor/israelnationalnews.py
 409+yt_dlp/extractor/itprotv.py
 410+yt_dlp/extractor/itv.py
 411+yt_dlp/extractor/ivi.py
 412+yt_dlp/extractor/ivideon.py
 413+yt_dlp/extractor/iwara.py
 414+yt_dlp/extractor/ixigua.py
 415+yt_dlp/extractor/izlesene.py
 416+yt_dlp/extractor/jamendo.py
 417+yt_dlp/extractor/japandiet.py
 418+yt_dlp/extractor/jeuxvideo.py
 419+yt_dlp/extractor/jiocinema.py
 420+yt_dlp/extractor/jiosaavn.py
 421+yt_dlp/extractor/jixie.py
 422+yt_dlp/extractor/joj.py
 423+yt_dlp/extractor/joqrag.py
 424+yt_dlp/extractor/jove.py
 425+yt_dlp/extractor/jstream.py
 426+yt_dlp/extractor/jtbc.py
 427+yt_dlp/extractor/jwplatform.py
 428+yt_dlp/extractor/kakao.py
 429+yt_dlp/extractor/kaltura.py
 430+yt_dlp/extractor/kankanews.py
 431+yt_dlp/extractor/karaoketv.py
 432+yt_dlp/extractor/kelbyone.py
 433+yt_dlp/extractor/khanacademy.py
 434+yt_dlp/extractor/kick.py
 435+yt_dlp/extractor/kicker.py
 436+yt_dlp/extractor/kickstarter.py
 437+yt_dlp/extractor/kinja.py
 438+yt_dlp/extractor/kinopoisk.py
 439+yt_dlp/extractor/kommunetv.py
 440+yt_dlp/extractor/kompas.py
 441+yt_dlp/extractor/koo.py
 442+yt_dlp/extractor/krasview.py
 443+yt_dlp/extractor/kth.py
 444+yt_dlp/extractor/ku6.py
 445+yt_dlp/extractor/kukululive.py
 446+yt_dlp/extractor/kuwo.py
 447+yt_dlp/extractor/la7.py
 448+yt_dlp/extractor/laracasts.py
 449+yt_dlp/extractor/lastfm.py
 450+yt_dlp/extractor/laxarxames.py
 451+yt_dlp/extractor/lazy_extractors.py
 452+yt_dlp/extractor/lbry.py
 453+yt_dlp/extractor/lci.py
 454+yt_dlp/extractor/lcp.py
 455+yt_dlp/extractor/learningonscreen.py
 456+yt_dlp/extractor/lecture2go.py
 457+yt_dlp/extractor/lecturio.py
 458+yt_dlp/extractor/leeco.py
 459+yt_dlp/extractor/lefigaro.py
 460+yt_dlp/extractor/lego.py
 461+yt_dlp/extractor/lemonde.py
 462+yt_dlp/extractor/lenta.py
 463+yt_dlp/extractor/libraryofcongress.py
 464+yt_dlp/extractor/libsyn.py
 465+yt_dlp/extractor/lifenews.py
 466+yt_dlp/extractor/likee.py
 467+yt_dlp/extractor/limelight.py
 468+yt_dlp/extractor/linkedin.py
 469+yt_dlp/extractor/liputan6.py
 470+yt_dlp/extractor/listennotes.py
 471+yt_dlp/extractor/litv.py
 472+yt_dlp/extractor/livejournal.py
 473+yt_dlp/extractor/livestream.py
 474+yt_dlp/extractor/livestreamfails.py
 475+yt_dlp/extractor/lnkgo.py
 476+yt_dlp/extractor/loom.py
 477+yt_dlp/extractor/lovehomeporn.py
 478+yt_dlp/extractor/lrt.py
 479+yt_dlp/extractor/lsm.py
 480+yt_dlp/extractor/lumni.py
 481+yt_dlp/extractor/lynda.py
 482+yt_dlp/extractor/maariv.py
 483+yt_dlp/extractor/magellantv.py
 484+yt_dlp/extractor/magentamusik.py
 485+yt_dlp/extractor/mailru.py
 486+yt_dlp/extractor/mainstreaming.py
 487+yt_dlp/extractor/mangomolo.py
 488+yt_dlp/extractor/manoto.py
 489+yt_dlp/extractor/manyvids.py
 490+yt_dlp/extractor/maoritv.py
 491+yt_dlp/extractor/markiza.py
 492+yt_dlp/extractor/massengeschmacktv.py
 493+yt_dlp/extractor/masters.py
 494+yt_dlp/extractor/matchtv.py
 495+yt_dlp/extractor/mbn.py
 496+yt_dlp/extractor/mdr.py
 497+yt_dlp/extractor/medaltv.py
 498+yt_dlp/extractor/mediaite.py
 499+yt_dlp/extractor/mediaklikk.py
 500+yt_dlp/extractor/medialaan.py
 501+yt_dlp/extractor/mediaset.py
 502+yt_dlp/extractor/mediasite.py
 503+yt_dlp/extractor/mediastream.py
 504+yt_dlp/extractor/mediaworksnz.py
 505+yt_dlp/extractor/medici.py
 506+yt_dlp/extractor/megaphone.py
 507+yt_dlp/extractor/megatvcom.py
 508+yt_dlp/extractor/meipai.py
 509+yt_dlp/extractor/melonvod.py
 510+yt_dlp/extractor/metacritic.py
 511+yt_dlp/extractor/mgtv.py
 512+yt_dlp/extractor/microsoftembed.py
 513+yt_dlp/extractor/microsoftstream.py
 514+yt_dlp/extractor/mildom.py
 515+yt_dlp/extractor/minds.py
 516+yt_dlp/extractor/minoto.py
 517+yt_dlp/extractor/mirrativ.py
 518+yt_dlp/extractor/mirrorcouk.py
 519+yt_dlp/extractor/mit.py
 520+yt_dlp/extractor/mitele.py
 521+yt_dlp/extractor/mixch.py
 522+yt_dlp/extractor/mixcloud.py
 523+yt_dlp/extractor/mlb.py
 524+yt_dlp/extractor/mlssoccer.py
 525+yt_dlp/extractor/mocha.py
 526+yt_dlp/extractor/mojvideo.py
 527+yt_dlp/extractor/monstercat.py
 528+yt_dlp/extractor/motherless.py
 529+yt_dlp/extractor/motorsport.py
 530+yt_dlp/extractor/moviepilot.py
 531+yt_dlp/extractor/moview.py
 532+yt_dlp/extractor/moviezine.py
 533+yt_dlp/extractor/movingimage.py
 534+yt_dlp/extractor/msn.py
 535+yt_dlp/extractor/mtv.py
 536+yt_dlp/extractor/muenchentv.py
 537+yt_dlp/extractor/murrtube.py
 538+yt_dlp/extractor/museai.py
 539+yt_dlp/extractor/musescore.py
 540+yt_dlp/extractor/musicdex.py
 541+yt_dlp/extractor/mx3.py
 542+yt_dlp/extractor/mxplayer.py
 543+yt_dlp/extractor/myspace.py
 544+yt_dlp/extractor/myspass.py
 545+yt_dlp/extractor/myvideoge.py
 546+yt_dlp/extractor/myvidster.py
 547+yt_dlp/extractor/mzaalo.py
 548+yt_dlp/extractor/n1.py
 549+yt_dlp/extractor/nate.py
 550+yt_dlp/extractor/nationalgeographic.py
 551+yt_dlp/extractor/naver.py
 552+yt_dlp/extractor/nba.py
 553+yt_dlp/extractor/nbc.py
 554+yt_dlp/extractor/ndr.py
 555+yt_dlp/extractor/ndtv.py
 556+yt_dlp/extractor/nebula.py
 557+yt_dlp/extractor/nekohacker.py
 558+yt_dlp/extractor/nerdcubed.py
 559+yt_dlp/extractor/neteasemusic.py
 560+yt_dlp/extractor/netverse.py
 561+yt_dlp/extractor/netzkino.py
 562+yt_dlp/extractor/newgrounds.py
 563+yt_dlp/extractor/newspicks.py
 564+yt_dlp/extractor/newsy.py
 565+yt_dlp/extractor/nextmedia.py
 566+yt_dlp/extractor/nexx.py
 567+yt_dlp/extractor/nfb.py
 568+yt_dlp/extractor/nfhsnetwork.py
 569+yt_dlp/extractor/nfl.py
 570+yt_dlp/extractor/nhk.py
 571+yt_dlp/extractor/nhl.py
 572+yt_dlp/extractor/nick.py
 573+yt_dlp/extractor/niconico.py
 574+yt_dlp/extractor/niconicochannelplus.py
 575+yt_dlp/extractor/ninaprotocol.py
 576+yt_dlp/extractor/ninecninemedia.py
 577+yt_dlp/extractor/ninegag.py
 578+yt_dlp/extractor/ninenews.py
 579+yt_dlp/extractor/ninenow.py
 580+yt_dlp/extractor/nintendo.py
 581+yt_dlp/extractor/nitter.py
 582+yt_dlp/extractor/nobelprize.py
 583+yt_dlp/extractor/noice.py
 584+yt_dlp/extractor/nonktube.py
 585+yt_dlp/extractor/noodlemagazine.py
 586+yt_dlp/extractor/noovo.py
 587+yt_dlp/extractor/nosnl.py
 588+yt_dlp/extractor/nova.py
 589+yt_dlp/extractor/novaplay.py
 590+yt_dlp/extractor/nowness.py
 591+yt_dlp/extractor/noz.py
 592+yt_dlp/extractor/npo.py
 593+yt_dlp/extractor/npr.py
 594+yt_dlp/extractor/nrk.py
 595+yt_dlp/extractor/nrl.py
 596+yt_dlp/extractor/nts.py
 597+yt_dlp/extractor/ntvcojp.py
 598+yt_dlp/extractor/ntvde.py
 599+yt_dlp/extractor/ntvru.py
 600+yt_dlp/extractor/nubilesporn.py
 601+yt_dlp/extractor/nuevo.py
 602+yt_dlp/extractor/nuum.py
 603+yt_dlp/extractor/nuvid.py
 604+yt_dlp/extractor/nytimes.py
 605+yt_dlp/extractor/nzherald.py
 606+yt_dlp/extractor/nzonscreen.py
 607+yt_dlp/extractor/nzz.py
 608+yt_dlp/extractor/odkmedia.py
 609+yt_dlp/extractor/odnoklassniki.py
 610+yt_dlp/extractor/oftv.py
 611+yt_dlp/extractor/oktoberfesttv.py
 612+yt_dlp/extractor/olympics.py
 613+yt_dlp/extractor/on24.py
 614+yt_dlp/extractor/once.py
 615+yt_dlp/extractor/ondemandkorea.py
 616+yt_dlp/extractor/onefootball.py
 617+yt_dlp/extractor/onenewsnz.py
 618+yt_dlp/extractor/oneplace.py
 619+yt_dlp/extractor/onet.py
 620+yt_dlp/extractor/onionstudios.py
 621+yt_dlp/extractor/opencast.py
 622+yt_dlp/extractor/openload.py
 623+yt_dlp/extractor/openrec.py
 624+yt_dlp/extractor/ora.py
 625+yt_dlp/extractor/orf.py
 626+yt_dlp/extractor/outsidetv.py
 627+yt_dlp/extractor/owncloud.py
 628+yt_dlp/extractor/packtpub.py
 629+yt_dlp/extractor/palcomp3.py
 630+yt_dlp/extractor/panopto.py
 631+yt_dlp/extractor/paramountplus.py
 632+yt_dlp/extractor/parler.py
 633+yt_dlp/extractor/parlview.py
 634+yt_dlp/extractor/patreon.py
 635+yt_dlp/extractor/pbs.py
 636+yt_dlp/extractor/pearvideo.py
 637+yt_dlp/extractor/peekvids.py
 638+yt_dlp/extractor/peertube.py
 639+yt_dlp/extractor/peertv.py
 640+yt_dlp/extractor/peloton.py
 641+yt_dlp/extractor/performgroup.py
 642+yt_dlp/extractor/periscope.py
 643+yt_dlp/extractor/pgatour.py
 644+yt_dlp/extractor/philharmoniedeparis.py
 645+yt_dlp/extractor/phoenix.py
 646+yt_dlp/extractor/photobucket.py
 647+yt_dlp/extractor/piapro.py
 648+yt_dlp/extractor/piaulizaportal.py
 649+yt_dlp/extractor/picarto.py
 650+yt_dlp/extractor/piksel.py
 651+yt_dlp/extractor/pinkbike.py
 652+yt_dlp/extractor/pinterest.py
 653+yt_dlp/extractor/pixivsketch.py
 654+yt_dlp/extractor/pladform.py
 655+yt_dlp/extractor/planetmarathi.py
 656+yt_dlp/extractor/platzi.py
 657+yt_dlp/extractor/playplustv.py
 658+yt_dlp/extractor/playsuisse.py
 659+yt_dlp/extractor/playtvak.py
 660+yt_dlp/extractor/playwire.py
 661+yt_dlp/extractor/pluralsight.py
 662+yt_dlp/extractor/plutotv.py
 663+yt_dlp/extractor/podbayfm.py
 664+yt_dlp/extractor/podchaser.py
 665+yt_dlp/extractor/podomatic.py
 666+yt_dlp/extractor/pokemon.py
 667+yt_dlp/extractor/pokergo.py
 668+yt_dlp/extractor/polsatgo.py
 669+yt_dlp/extractor/polskieradio.py
 670+yt_dlp/extractor/popcorntimes.py
 671+yt_dlp/extractor/popcorntv.py
 672+yt_dlp/extractor/pornbox.py
 673+yt_dlp/extractor/pornflip.py
 674+yt_dlp/extractor/pornhub.py
 675+yt_dlp/extractor/pornotube.py
 676+yt_dlp/extractor/pornovoisines.py
 677+yt_dlp/extractor/pornoxo.py
 678+yt_dlp/extractor/pr0gramm.py
 679+yt_dlp/extractor/prankcast.py
 680+yt_dlp/extractor/premiershiprugby.py
 681+yt_dlp/extractor/presstv.py
 682+yt_dlp/extractor/projectveritas.py
 683+yt_dlp/extractor/prosiebensat1.py
 684+yt_dlp/extractor/prx.py
 685+yt_dlp/extractor/puhutv.py
 686+yt_dlp/extractor/puls4.py
 687+yt_dlp/extractor/pyvideo.py
 688+yt_dlp/extractor/qdance.py
 689+yt_dlp/extractor/qingting.py
 690+yt_dlp/extractor/qqmusic.py
 691+yt_dlp/extractor/r7.py
 692+yt_dlp/extractor/radiko.py
 693+yt_dlp/extractor/radiocanada.py
 694+yt_dlp/extractor/radiocomercial.py
 695+yt_dlp/extractor/radiode.py
 696+yt_dlp/extractor/radiofrance.py
 697+yt_dlp/extractor/radiojavan.py
 698+yt_dlp/extractor/radiokapital.py
 699+yt_dlp/extractor/radiozet.py
 700+yt_dlp/extractor/radlive.py
 701+yt_dlp/extractor/rai.py
 702+yt_dlp/extractor/raywenderlich.py
 703+yt_dlp/extractor/rbgtum.py
 704+yt_dlp/extractor/rcs.py
 705+yt_dlp/extractor/rcti.py
 706+yt_dlp/extractor/rds.py
 707+yt_dlp/extractor/redbee.py
 708+yt_dlp/extractor/redbulltv.py
 709+yt_dlp/extractor/reddit.py
 710+yt_dlp/extractor/redge.py
 711+yt_dlp/extractor/redgifs.py
 712+yt_dlp/extractor/redtube.py
 713+yt_dlp/extractor/rentv.py
 714+yt_dlp/extractor/restudy.py
 715+yt_dlp/extractor/reuters.py
 716+yt_dlp/extractor/reverbnation.py
 717+yt_dlp/extractor/rheinmaintv.py
 718+yt_dlp/extractor/ridehome.py
 719+yt_dlp/extractor/rinsefm.py
 720+yt_dlp/extractor/rmcdecouverte.py
 721+yt_dlp/extractor/rockstargames.py
 722+yt_dlp/extractor/rokfin.py
 723+yt_dlp/extractor/roosterteeth.py
 724+yt_dlp/extractor/rottentomatoes.py
 725+yt_dlp/extractor/rozhlas.py
 726+yt_dlp/extractor/rte.py
 727+yt_dlp/extractor/rtl2.py
 728+yt_dlp/extractor/rtlnl.py
 729+yt_dlp/extractor/rtnews.py
 730+yt_dlp/extractor/rtp.py
 731+yt_dlp/extractor/rtrfm.py
 732+yt_dlp/extractor/rts.py
 733+yt_dlp/extractor/rtvcplay.py
 734+yt_dlp/extractor/rtve.py
 735+yt_dlp/extractor/rtvs.py
 736+yt_dlp/extractor/rtvslo.py
 737+yt_dlp/extractor/rudovideo.py
 738+yt_dlp/extractor/rule34video.py
 739+yt_dlp/extractor/rumble.py
 740+yt_dlp/extractor/rutube.py
 741+yt_dlp/extractor/rutv.py
 742+yt_dlp/extractor/ruutu.py
 743+yt_dlp/extractor/ruv.py
 744+yt_dlp/extractor/s4c.py
 745+yt_dlp/extractor/safari.py
 746+yt_dlp/extractor/saitosan.py
 747+yt_dlp/extractor/samplefocus.py
 748+yt_dlp/extractor/sapo.py
 749+yt_dlp/extractor/sbs.py
 750+yt_dlp/extractor/sbscokr.py
 751+yt_dlp/extractor/screen9.py
 752+yt_dlp/extractor/screencast.py
 753+yt_dlp/extractor/screencastify.py
 754+yt_dlp/extractor/screencastomatic.py
 755+yt_dlp/extractor/scrippsnetworks.py
 756+yt_dlp/extractor/scrolller.py
 757+yt_dlp/extractor/scte.py
 758+yt_dlp/extractor/sejmpl.py
 759+yt_dlp/extractor/senalcolombia.py
 760+yt_dlp/extractor/senategov.py
 761+yt_dlp/extractor/sendtonews.py
 762+yt_dlp/extractor/servus.py
 763+yt_dlp/extractor/sevenplus.py
 764+yt_dlp/extractor/sexu.py
 765+yt_dlp/extractor/seznamzpravy.py
 766+yt_dlp/extractor/shahid.py
 767+yt_dlp/extractor/sharepoint.py
 768+yt_dlp/extractor/sharevideos.py
 769+yt_dlp/extractor/shemaroome.py
 770+yt_dlp/extractor/showroomlive.py
 771+yt_dlp/extractor/sibnet.py
 772+yt_dlp/extractor/simplecast.py
 773+yt_dlp/extractor/sina.py
 774+yt_dlp/extractor/sixplay.py
 775+yt_dlp/extractor/skeb.py
 776+yt_dlp/extractor/sky.py
 777+yt_dlp/extractor/skyit.py
 778+yt_dlp/extractor/skylinewebcams.py
 779+yt_dlp/extractor/skynewsarabia.py
 780+yt_dlp/extractor/skynewsau.py
 781+yt_dlp/extractor/slideshare.py
 782+yt_dlp/extractor/slideslive.py
 783+yt_dlp/extractor/slutload.py
 784+yt_dlp/extractor/smotrim.py
 785+yt_dlp/extractor/snotr.py
 786+yt_dlp/extractor/sohu.py
 787+yt_dlp/extractor/sonyliv.py
 788+yt_dlp/extractor/soundcloud.py
 789+yt_dlp/extractor/soundgasm.py
 790+yt_dlp/extractor/southpark.py
 791+yt_dlp/extractor/sovietscloset.py
 792+yt_dlp/extractor/spankbang.py
 793+yt_dlp/extractor/spiegel.py
 794+yt_dlp/extractor/spike.py
 795+yt_dlp/extractor/sport5.py
 796+yt_dlp/extractor/sportbox.py
 797+yt_dlp/extractor/sportdeutschland.py
 798+yt_dlp/extractor/spotify.py
 799+yt_dlp/extractor/spreaker.py
 800+yt_dlp/extractor/springboardplatform.py
 801+yt_dlp/extractor/sprout.py
 802+yt_dlp/extractor/sproutvideo.py
 803+yt_dlp/extractor/srgssr.py
 804+yt_dlp/extractor/srmediathek.py
 805+yt_dlp/extractor/stacommu.py
 806+yt_dlp/extractor/stageplus.py
 807+yt_dlp/extractor/stanfordoc.py
 808+yt_dlp/extractor/startrek.py
 809+yt_dlp/extractor/startv.py
 810+yt_dlp/extractor/steam.py
 811+yt_dlp/extractor/stitcher.py
 812+yt_dlp/extractor/storyfire.py
 813+yt_dlp/extractor/streamable.py
 814+yt_dlp/extractor/streamcz.py
 815+yt_dlp/extractor/streetvoice.py
 816+yt_dlp/extractor/stretchinternet.py
 817+yt_dlp/extractor/stripchat.py
 818+yt_dlp/extractor/stv.py
 819+yt_dlp/extractor/substack.py
 820+yt_dlp/extractor/sunporno.py
 821+yt_dlp/extractor/sverigesradio.py
 822+yt_dlp/extractor/svt.py
 823+yt_dlp/extractor/swearnet.py
 824+yt_dlp/extractor/syfy.py
 825+yt_dlp/extractor/syvdk.py
 826+yt_dlp/extractor/sztvhu.py
 827+yt_dlp/extractor/tagesschau.py
 828+yt_dlp/extractor/taptap.py
 829+yt_dlp/extractor/tass.py
 830+yt_dlp/extractor/tbs.py
 831+yt_dlp/extractor/tbsjp.py
 832+yt_dlp/extractor/teachable.py
 833+yt_dlp/extractor/teachertube.py
 834+yt_dlp/extractor/teachingchannel.py
 835+yt_dlp/extractor/teamcoco.py
 836+yt_dlp/extractor/teamtreehouse.py
 837+yt_dlp/extractor/ted.py
 838+yt_dlp/extractor/tele13.py
 839+yt_dlp/extractor/tele5.py
 840+yt_dlp/extractor/telebruxelles.py
 841+yt_dlp/extractor/telecaribe.py
 842+yt_dlp/extractor/telecinco.py
 843+yt_dlp/extractor/telegraaf.py
 844+yt_dlp/extractor/telegram.py
 845+yt_dlp/extractor/telemb.py
 846+yt_dlp/extractor/telemundo.py
 847+yt_dlp/extractor/telequebec.py
 848+yt_dlp/extractor/teletask.py
 849+yt_dlp/extractor/telewebion.py
 850+yt_dlp/extractor/tempo.py
 851+yt_dlp/extractor/tencent.py
 852+yt_dlp/extractor/tennistv.py
 853+yt_dlp/extractor/tenplay.py
 854+yt_dlp/extractor/testurl.py
 855+yt_dlp/extractor/tf1.py
 856+yt_dlp/extractor/tfo.py
 857+yt_dlp/extractor/theguardian.py
 858+yt_dlp/extractor/theholetv.py
 859+yt_dlp/extractor/theintercept.py
 860+yt_dlp/extractor/theplatform.py
 861+yt_dlp/extractor/thestar.py
 862+yt_dlp/extractor/thesun.py
 863+yt_dlp/extractor/theweatherchannel.py
 864+yt_dlp/extractor/thisamericanlife.py
 865+yt_dlp/extractor/thisoldhouse.py
 866+yt_dlp/extractor/thisvid.py
 867+yt_dlp/extractor/threeqsdn.py
 868+yt_dlp/extractor/threespeak.py
 869+yt_dlp/extractor/tiktok.py
 870+yt_dlp/extractor/tmz.py
 871+yt_dlp/extractor/tnaflix.py
 872+yt_dlp/extractor/toggle.py
 873+yt_dlp/extractor/toggo.py
 874+yt_dlp/extractor/tonline.py
 875+yt_dlp/extractor/toongoggles.py
 876+yt_dlp/extractor/toutv.py
 877+yt_dlp/extractor/toypics.py
 878+yt_dlp/extractor/traileraddict.py
 879+yt_dlp/extractor/triller.py
 880+yt_dlp/extractor/trovo.py
 881+yt_dlp/extractor/trtcocuk.py
 882+yt_dlp/extractor/trtworld.py
 883+yt_dlp/extractor/trueid.py
 884+yt_dlp/extractor/trunews.py
 885+yt_dlp/extractor/truth.py
 886+yt_dlp/extractor/trutv.py
 887+yt_dlp/extractor/tube8.py
 888+yt_dlp/extractor/tubetugraz.py
 889+yt_dlp/extractor/tubitv.py
 890+yt_dlp/extractor/tumblr.py
 891+yt_dlp/extractor/tunein.py
 892+yt_dlp/extractor/turner.py
 893+yt_dlp/extractor/tv2.py
 894+yt_dlp/extractor/tv24ua.py
 895+yt_dlp/extractor/tv2dk.py
 896+yt_dlp/extractor/tv2hu.py
 897+yt_dlp/extractor/tv4.py
 898+yt_dlp/extractor/tv5mondeplus.py
 899+yt_dlp/extractor/tv5unis.py
 900+yt_dlp/extractor/tva.py
 901+yt_dlp/extractor/tvanouvelles.py
 902+yt_dlp/extractor/tvc.py
 903+yt_dlp/extractor/tver.py
 904+yt_dlp/extractor/tvigle.py
 905+yt_dlp/extractor/tviplayer.py
 906+yt_dlp/extractor/tvland.py
 907+yt_dlp/extractor/tvn24.py
 908+yt_dlp/extractor/tvnoe.py
 909+yt_dlp/extractor/tvopengr.py
 910+yt_dlp/extractor/tvp.py
 911+yt_dlp/extractor/tvplay.py
 912+yt_dlp/extractor/tvplayer.py
 913+yt_dlp/extractor/tweakers.py
 914+yt_dlp/extractor/twentymin.py
 915+yt_dlp/extractor/twentythreevideo.py
 916+yt_dlp/extractor/twitcasting.py
 917+yt_dlp/extractor/twitch.py
 918+yt_dlp/extractor/twitter.py
 919+yt_dlp/extractor/txxx.py
 920+yt_dlp/extractor/udemy.py
 921+yt_dlp/extractor/udn.py
 922+yt_dlp/extractor/ufctv.py
 923+yt_dlp/extractor/ukcolumn.py
 924+yt_dlp/extractor/uktvplay.py
 925+yt_dlp/extractor/umg.py
 926+yt_dlp/extractor/unistra.py
 927+yt_dlp/extractor/unity.py
 928+yt_dlp/extractor/unsupported.py
 929+yt_dlp/extractor/uol.py
 930+yt_dlp/extractor/uplynk.py
 931+yt_dlp/extractor/urort.py
 932+yt_dlp/extractor/urplay.py
 933+yt_dlp/extractor/usanetwork.py
 934+yt_dlp/extractor/usatoday.py
 935+yt_dlp/extractor/ustream.py
 936+yt_dlp/extractor/ustudio.py
 937+yt_dlp/extractor/utreon.py
 938+yt_dlp/extractor/varzesh3.py
 939+yt_dlp/extractor/vbox7.py
 940+yt_dlp/extractor/veo.py
 941+yt_dlp/extractor/veoh.py
 942+yt_dlp/extractor/vesti.py
 943+yt_dlp/extractor/vevo.py
 944+yt_dlp/extractor/vgtv.py
 945+yt_dlp/extractor/vh1.py
 946+yt_dlp/extractor/vice.py
 947+yt_dlp/extractor/viddler.py
 948+yt_dlp/extractor/videa.py
 949+yt_dlp/extractor/videocampus_sachsen.py
 950+yt_dlp/extractor/videodetective.py
 951+yt_dlp/extractor/videofyme.py
 952+yt_dlp/extractor/videoken.py
 953+yt_dlp/extractor/videomore.py
 954+yt_dlp/extractor/videopress.py
 955+yt_dlp/extractor/vidio.py
 956+yt_dlp/extractor/vidlii.py
 957+yt_dlp/extractor/vidly.py
 958+yt_dlp/extractor/vidyard.py
 959+yt_dlp/extractor/viewlift.py
 960+yt_dlp/extractor/viidea.py
 961+yt_dlp/extractor/viki.py
 962+yt_dlp/extractor/vimeo.py
 963+yt_dlp/extractor/vimm.py
 964+yt_dlp/extractor/vine.py
 965+yt_dlp/extractor/viously.py
 966+yt_dlp/extractor/viqeo.py
 967+yt_dlp/extractor/viu.py
 968+yt_dlp/extractor/vk.py
 969+yt_dlp/extractor/vocaroo.py
 970+yt_dlp/extractor/vodpl.py
 971+yt_dlp/extractor/vodplatform.py
 972+yt_dlp/extractor/voicy.py
 973+yt_dlp/extractor/volejtv.py
 974+yt_dlp/extractor/voxmedia.py
 975+yt_dlp/extractor/vrt.py
 976+yt_dlp/extractor/vtm.py
 977+yt_dlp/extractor/vtv.py
 978+yt_dlp/extractor/vuclip.py
 979+yt_dlp/extractor/vvvvid.py
 980+yt_dlp/extractor/walla.py
 981+yt_dlp/extractor/washingtonpost.py
 982+yt_dlp/extractor/wat.py
 983+yt_dlp/extractor/wdr.py
 984+yt_dlp/extractor/webcamerapl.py
 985+yt_dlp/extractor/webcaster.py
 986+yt_dlp/extractor/webofstories.py
 987+yt_dlp/extractor/weibo.py
 988+yt_dlp/extractor/weiqitv.py
 989+yt_dlp/extractor/weverse.py
 990+yt_dlp/extractor/wevidi.py
 991+yt_dlp/extractor/weyyak.py
 992+yt_dlp/extractor/whowatch.py
 993+yt_dlp/extractor/whyp.py
 994+yt_dlp/extractor/wikimedia.py
 995+yt_dlp/extractor/wimbledon.py
 996+yt_dlp/extractor/wimtv.py
 997+yt_dlp/extractor/wistia.py
 998+yt_dlp/extractor/wordpress.py
 999+yt_dlp/extractor/worldstarhiphop.py
1000+yt_dlp/extractor/wppilot.py
1001+yt_dlp/extractor/wrestleuniverse.py
1002+yt_dlp/extractor/wsj.py
1003+yt_dlp/extractor/wwe.py
1004+yt_dlp/extractor/wykop.py
1005+yt_dlp/extractor/xanimu.py
1006+yt_dlp/extractor/xboxclips.py
1007+yt_dlp/extractor/xhamster.py
1008+yt_dlp/extractor/xiaohongshu.py
1009+yt_dlp/extractor/ximalaya.py
1010+yt_dlp/extractor/xinpianchang.py
1011+yt_dlp/extractor/xminus.py
1012+yt_dlp/extractor/xnxx.py
1013+yt_dlp/extractor/xstream.py
1014+yt_dlp/extractor/xvideos.py
1015+yt_dlp/extractor/xxxymovies.py
1016+yt_dlp/extractor/yahoo.py
1017+yt_dlp/extractor/yandexdisk.py
1018+yt_dlp/extractor/yandexmusic.py
1019+yt_dlp/extractor/yandexvideo.py
1020+yt_dlp/extractor/yapfiles.py
1021+yt_dlp/extractor/yappy.py
1022+yt_dlp/extractor/yle_areena.py
1023+yt_dlp/extractor/youjizz.py
1024+yt_dlp/extractor/youku.py
1025+yt_dlp/extractor/younow.py
1026+yt_dlp/extractor/youporn.py
1027+yt_dlp/extractor/youtube.py
1028+yt_dlp/extractor/zaiko.py
1029+yt_dlp/extractor/zapiks.py
1030+yt_dlp/extractor/zattoo.py
1031+yt_dlp/extractor/zdf.py
1032+yt_dlp/extractor/zee5.py
1033+yt_dlp/extractor/zeenews.py
1034+yt_dlp/extractor/zenporn.py
1035+yt_dlp/extractor/zetland.py
1036+yt_dlp/extractor/zhihu.py
1037+yt_dlp/extractor/zingmp3.py
1038+yt_dlp/extractor/zoom.py
1039+yt_dlp/extractor/zype.py
1040+yt_dlp/jsinterp.py
1041+yt_dlp/minicurses.py
1042+yt_dlp/networking/__init__.py
1043+yt_dlp/networking/_curlcffi.py
1044+yt_dlp/networking/_helper.py
1045+yt_dlp/networking/_requests.py
1046+yt_dlp/networking/_urllib.py
1047+yt_dlp/networking/_websockets.py
1048+yt_dlp/networking/common.py
1049+yt_dlp/networking/exceptions.py
1050+yt_dlp/networking/impersonate.py
1051+yt_dlp/networking/websocket.py
1052+yt_dlp/options.py
1053+yt_dlp/plugins.py
1054+yt_dlp/postprocessor/__init__.py
1055+yt_dlp/postprocessor/common.py
1056+yt_dlp/postprocessor/embedthumbnail.py
1057+yt_dlp/postprocessor/exec.py
1058+yt_dlp/postprocessor/ffmpeg.py
1059+yt_dlp/postprocessor/metadataparser.py
1060+yt_dlp/postprocessor/modify_chapters.py
1061+yt_dlp/postprocessor/movefilesafterdownload.py
1062+yt_dlp/postprocessor/sponskrub.py
1063+yt_dlp/postprocessor/sponsorblock.py
1064+yt_dlp/postprocessor/xattrpp.py
1065+yt_dlp/socks.py
1066+yt_dlp/update.py
1067+yt_dlp/utils/__init__.py
1068+yt_dlp/utils/_deprecated.py
1069+yt_dlp/utils/_legacy.py
1070+yt_dlp/utils/_utils.py
1071+yt_dlp/utils/networking.py
1072+yt_dlp/utils/progress.py
1073+yt_dlp/utils/traversal.py
1074+yt_dlp/version.py
1075+yt_dlp/webvtt.py
+1, -0
1@@ -0,0 +1 @@
2+e08331fb9a36eba56b4efd074b5b25fbf08413e9cb47009a28ecbffe47150310  yt-dlp.tar.gz
+1, -0
1@@ -0,0 +1 @@
2+url = "https://github.com/yt-dlp/yt-dlp/releases/download/2024.08.06/yt-dlp.tar.gz"
+1, -0
1@@ -0,0 +1 @@
2+2024.08.06 r0
+6, -0
1@@ -0,0 +1,6 @@
2+#!/bin/python
3+
4+import yt_dlp
5+
6+if __name__ == '__main__':
7+    yt_dlp.main()
+1, -0
1@@ -65,6 +65,7 @@ return {
2 		'ffmpeg',
3 		'mpv',
4 		'tinyalsa',
5+		'yt-dlp',
6 		},
7 	desktop={
8 		'liberation-fonts',