
    yfm                     J   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 ddlmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZm Z   G d	 d
e jB                        Z" G d de
      Z# G d de#      Z$ G d de#      Z% G d de#      Z& G d de#      Z' G d de#      Z( G d de#      Z) G d de)      Z* e+       jY                         D  ci c]+  \  } }| j[                  d      r| dvr|j]                         |- c}} Z/d Z0d Z1yc c}} w )    N   )
FragmentFD   )	functools)Request)EXT_TO_OUT_FORMATSFFmpegPostProcessor)PopenRetryManager_configuration_argscheck_executableclasspropertycli_bool_option
cli_optioncli_valueless_optiondetermine_extencodeArgumentencodeFilenamefind_available_port
remove_endtraverse_objc                   P    e Zd Z ej                         Z ej                         Zy)FeaturesN)__name__
__module____qualname__enumauto	TO_STDOUTMULTIPLE_FORMATS     </usr/lib/python3/dist-packages/yt_dlp/downloader/external.pyr   r   !   s    		I tyy{r"   r   c                       e Zd ZdZdZdZd Zed        Ze	d        Z
ej                  d        Zedd	       Zed
        Zedd       Zd ZddZddZddZd Zd Zd Zy)
ExternalFD)httphttpsftpftpsr!   Tc                 P   | j                  |       | j                  |      }d | _        	 t        j                         }| j	                  ||      }| j                  r| j                  | j                         	 |dk(  r|dt        j                         z
  d}|dk7  rNt        j                  j                  t        |            }| j                  ||       |j                  ||d       | j!                  ||       y| j#                  d	       | j%                  d
| j                         |fz         y# t
        $ r: |j                  d      s d}| j                  d| j                         z         Y &w xY w# | j                  r| j                  | j                         w w xY w)Nis_liver   z[%s] Interrupted by userfinished)filenamestatuselapsed-)downloaded_bytestotal_bytesT
z%s exited with code %dF)report_destination	temp_name_cookies_tempfiletime_call_downloaderKeyboardInterruptget	to_screenget_basename
try_removeospathgetsizer   
try_renameupdate_hook_progress	to_stderrreport_error)selfr-   	info_dicttmpfilenamestartedretvalr.   fsizes           r#   real_downloadzExternalFD.real_download+   s   )nnX.!%	8iikG**;	BF %% 6 67Q;$$99;0F
 3{(CDX6(-#(  	2NN4 6!!#V:- - .? ! 	M==+ FNN58I8I8KKL	M %% 6 67 &s#   &D5 5?E84E; 7E88E; ;*F%c                 <    | j                   d d j                         S )N)r   lowerclss    r#   r<   zExternalFD.get_basenameT   s    ||CR &&((r"   c                 "    | j                         S N)r<   rP   s    r#   EXE_NAMEzExternalFD.EXE_NAMEX   s    !!r"   c                     | j                   S rS   rT   )rF   s    r#   exezExternalFD.exe\   s    }}r"   Nc                     t        |d | j                         fv r| j                  n|| j                  g      }|sy|| _        |S )NF)r   r<   rT   AVAILABLE_OPTrW   rQ   r?   s     r#   	availablezExternalFD.available`   sJ     T3+;+;+=$>>CLLD! r"   c                 $    t        |j                  d       xs t        j                   j                  v d|d   vxs t        j
                   j                  v t        |dd       t         fd|d   j                  d      D              f      S )N	to_stdout+protocol)hls_aes.extra_param_to_segment_urlc              3   :   K   | ]  }|j                   v   y wrS   )SUPPORTED_PROTOCOLS).0protorQ   s     r#   	<genexpr>z&ExternalFD.supports.<locals>.<genexpr>p   s     _U000_s   )allr:   r   r   SUPPORTED_FEATURESr    r   split)rQ   rG   s   ` r#   supportszExternalFD.supportsj   s    k**Zh.@.@CDZDZ.Zy,,c0I0ISMcMc0cY(8:VWW_i
>S>Y>YZ]>^__	
  	r"   c                 J    | j                  |      xr | j                  |      S rS   )r[   rj   )rQ   rG   r?   s      r#   can_downloadzExternalFD.can_downloads   s    }}T">s||I'>>r"   c                 0    t        | j                  ||      S rS   )r   params)rF   command_optionparams      r#   _optionzExternalFD._optionw   s    $++~u==r"   c                 6    t        | j                  |||||      S rS   )r   rn   )rF   ro   rp   
true_valuefalse_value	separators         r#   _bool_optionzExternalFD._bool_optionz   s    t{{NE:{\effr"   c                 2    t        | j                  |||      S rS   )r   rn   )rF   ro   rp   expected_values       r#   _valueless_optionzExternalFD._valueless_option}   s    #DKKWWr"   c                     t        | j                         | j                  j                  d      | j                  |g|i |S )Nexternal_downloader_args)r   r<   rn   r:   rT   )rF   keysargskwargss       r#   r   zExternalFD._configuration_args   sD    "1K!Ldmm##!# 	#r"   c                    | j                   j                  j                  sWt        j                  dd      }|j                          |j                  | _        | j                  d| j                   d       | j                   j                  j                  | j                         | j                   j                  j                  xs | j                  S )Nz.cookiesF)suffixdeletez.[download] Writing temporary cookies file to "")
ydl	cookiejarr-   tempfileNamedTemporaryFileclosenamer6   r;   save)rF   tmp_cookiess     r#   _write_cookieszExternalFD._write_cookies   s    xx!!**"55ZPUVK%0%5%5D"NNKDLbLbKccdef 6 67xx!!**Dd.D.DDr"   c                    | j                  ||      D cg c]  }t        |       }}| j                  |       d|vr-| j                  ||      \  }}}|r|r| j	                  |       |S | j
                  j                  dd      }t        | j
                  j                  d      | j                  d|       }	|	D ]>  }
| j                  ||      \  }}}|s n$|r| j	                  |       t               |
_
        @ |s|	j                  ry| j                  |      }| j                  |d      \  }}t        |d         D ]  \  }}d	||fz  }	 | j                  |d
      \  }}|j#                   |||j%                                      |j'                          | j
                  j                  dd      rv| j)                  t+        |              |j'                          | j)                  t+        d|z               yc c}w # t        $ r@}|r|dkD  r| j                  ||       Y d}~| j!                  d| d|        Y d}~ yd}~ww xY w)z. Either overwrite this or implement _make_cmd 	fragmentsskip_unavailable_fragmentsTfragment_retriesN)
frag_indexfatalwb	%s-Frag%drbr   zUnable to open fragment z; keep_fragmentsF%s.frag.urlsr   )	_make_cmdr   
_debug_cmd_call_processrD   rn   r:   r   report_retry	Exceptionerror	decryptersanitize_open	enumerateOSErrorreport_skip_fragmentrE   writereadr   r=   r   )rF   rH   rG   acmd_stderr
returncoder   retry_managerretrydecrypt_fragmentdestr   fragmentfragment_filenamesrcerrs                     r#   r8   zExternalFD._call_downloader   s;   *...i*PQQ~a QQi'$($6$6sI$F!Avzfv&%)[[__5QSW%X"$T[[__5G%H$J[J[04@Z<Z\" 		E$($6$6sI$F!Avz v&#+EK		 *m.A.A>>)4$$[$7a$-i.D$E 	C J +{J.G G++,=tDQ JJ'#((*=>IIK;;??#3U;/@ AB	C 	

~'CDE[ RB  -*q.--j#>!!$<ZL3%"PQs#   H H	II	,I		Ic                 t    t        j                  |d| j                  rt        j                        S d       S )NT)textr   )r
   run_CAPTURE_STDERR
subprocessPIPE)rF   r   rG   s      r#   r   zExternalFD._call_process   s*    yy44CWCW
bb]abbr"   rS   )truefalseN)T)r   r   r   rc   rh   r   rL   classmethodr<   r   rT   r   cached_propertyrW   r[   rj   rl   rq   rv   ry   r   r   r8   r   r!   r"   r#   r%   r%   &   s    :O'R ) ) " "       ? ?>gX#
E/bcr"   r%   c                       e Zd ZdZdZd Zy)CurlFD-VFc                    | j                   dd|dg}| j                  j                  j                  |d         }|r|d|gz  }|j	                  d      '|d   j                         D ]  \  }}|d| d| gz  } || j                  d	d
dd      z  }|| j                  dd      z  }|| j                  dd      z  }|| j                  dd      z  }| j                  dd      }t        |      dk(  r|d   dv rd|d<   ||z  }|| j                  dd      z  }|| j                  dd      z  }|| j                  dd      z  }|| j                  dd       z  }|| j                         z  }|d!|d   gz  }|S )"Nz
--location-oz--compressedurlz--cookiehttp_headers--header: z--continue-at
continuedlr0   0z--silent
noprogressz	--verboseverbose--limit-rate	ratelimitz--retryretriesr   r   infinfinite
2147483647z--max-filesizemax_filesize--interfacesource_addressz--proxyproxyz
--insecurenocheckcertificate--)rW   r   r   get_cookie_headerr:   itemsrv   ry   rq   lenr   )rF   rH   rG   r   cookie_headerkeyvalr   s           r#   r   zCurlFD._make_cmd   s   xxt[.I**<<Yu=MNJ..C==(4%n5;;= 5S
se2cUO445 	t  ,SIIt%%j,??t%%k9==t||NK88Y	2u:?Qx..'a5LCt||,n==t||M+;<<t||Iw//t%%l4HIIt''))i&''
r"   N)r   r   r   rY   r   r   r!   r"   r#   r   r      s    MOr"   r   c                       e Zd ZdZd Zy)AxelFDr   c                 8   | j                   d|g}|j                  d      '|d   j                         D ]  \  }}|d| d| gz  } | j                  j                  j                  |d         }|r|dd| dgz  }|| j                         z  }|d|d   gz  }|S )	Nr   r   z-Hr   r   zCookie: z--max-redirect=0r   )rW   r:   r   r   r   r   r   rF   rH   rG   r   r   r   r   s          r#   r   zAxelFD._make_cmd   s    xx{+==(4%n5;;= /SRuo../**<<Yu=MNDH]O46HIICt''))i&''
r"   Nr   r   r   rY   r   r!   r"   r#   r   r      s    M
r"   r   c                       e Zd ZdZd Zy)WgetFD	--versionc                    | j                   d|ddg}| j                  j                  j                  |d         r|d| j	                         gz  }|j                  d      '|d   j                         D ]  \  }}|d| d| gz  } || j                  d	d
      z  }| j                  dd      }t        |      dk(  r|d   dv rd|d<   ||z  }|| j                  dd      z  }| j                  j                  d      }|rdD ]  }|d| d| gz  } || j                  dd      z  }|| j                         z  }|d|d   gz  }|S )Nz-Oz-nvz--compression=autor   z--load-cookiesr   r   r   r   r   z--triesr   r   r   r   r   z--bind-addressr   r   )
http_proxyhttps_proxyz	--execute=z--no-check-certificater   r   )rW   r   r   r   r   r:   r   rq   r   rn   ry   r   )	rF   rH   rG   r   r   r   r   r   vars	            r#   r   zWgetFD._make_cmd   s   xx{E3GH88//	%0@A$d&9&9&;<<C==(4%n5;;= 5S
se2cUO445t||NK88Y	2u:?Qx..a5LCt||,.>??(4 7uAeW%5667t%%&>@TUUt''))i&''
r"   Nr   r!   r"   r#   r   r      s    Mr"   r   c                   ^     e Zd ZdZdZed        Zed        Z fdZd Z	d	dZ
 fdZ xZS )
Aria2cFDz-v)r&   r'   r(   r)   dash_frag_urlsm3u8_frag_urlsc                 6     dg} fd|D        }t        |      S )Nz#EXT-X-BYTERANGEc              3   L   K   | ]  }t        j                  |         y wrS   )research)rd   featuremanifests     r#   rf   z-Aria2cFD.supports_manifest.<locals>.<genexpr>  s     ^gRYYw99^s   !$)rg   )r   UNSUPPORTED_FEATUREScheck_resultss   `  r#   supports_manifestzAria2cFD.supports_manifest  s)       
 _I]^=!!r"   c                     t         j                  j                  |       r| S dt         j                  j                   |  S )N.)r>   r?   isabssep)fns    r#   _aria2c_filenamezAria2cFD._aria2c_filename  s/    WW]]2&rAa}RD,AAr"   c                 &    	 t        |   ||      S rS   )rn   r:   r   struuiduuid4superr8   )rF   rH   rG   	__class__s      r#   r8   zAria2cFD._call_downloader  s    
 w'Y??r"   c                    | j                   ddddddddd	d
g}d|v r|ddgz  }n|ddgz  }| j                  j                  j                  |d         r|d| j	                          gz  }|j                  d      '|d   j                         D ]  \  }}|d| d| gz  } || j                  dd      z  }|| j                  dd      z  }|| j                  dd      z  }|| j                  ddddd      z  }|| j                  d d!ddd      z  }|| j                  d"d#ddd      z  }|| j                         z  }d$|v r|d%d&|d$   d'    d(|d$   d)    gz  }t        j                  j                  |      }|r1|d*| j                  |      t        j                  j                  z   gz  }d|vr3|d+| j                  t        j                  j                  |            gz  }|d,gz  }d|v r|d-gz  }d.|z  }g }t!        |d         D ]Q  \  }	}
d/t        j                  j                  |      |	fz  }|j#                  |
d   d0| j                  |             S | j%                  |d1      \  }}|j'                  d2j)                  |      j+                                |j-                          |d3| j                  |      gz  }|S |d4|d   gz  }|S )5N-cz	--no-confz--console-log-level=warnz--summary-interval=0z--download-result=hidez--http-accept-gzip=truez--file-allocation=nonez-x16z-j16z-s16r   z--allow-overwrite=truez --allow-piece-length-change=truez--min-split-size1Mr   z--load-cookies=r   r   r   z--max-overall-download-limitr   r   r   z--all-proxyr   z--check-certificater   r   r   r   z--remote-time
updatetimez--show-console-readoutr   __rpcz--enable-rpcz--rpc-listen-port=portz--rpc-secret=secretz--dirz--outz--auto-file-renaming=falsez--uri-selector=inorderr   r   z
	out=r   r3   -ir   )rW   r   r   r   r   r:   r   rq   rv   r   r>   r?   dirnamer   r   basenamer   appendr   r   joinencoder   )rF   rH   rG   r   r   r   dnurl_list_fileurl_listr   r   r   streamr   s                 r#   r   zAria2cFD._make_cmd(  sQ   xx{)+AC[(*BFFTZ\ )#,.PQQC&--C88//	%0@Aod&9&9&;%<=>>C==(4%n5;;= 5S
se2cUO445t||:KHHt||M+;<<t||M733t  !68LgW]_bcct  ,QTUUt  !9<RXZ]^^t''))i$Yw%7%?$@A	' 28 <=>@ @C WW__[)GT2226DEECi'GT222773C3CK3PQRRC,--)#,--C*[8MH(1)K2H(I n$
H$/2773C3CK3PR\2]$]!(5/4CXCXYjCk lmn **=$?IFALL8,3356LLND$//>??C 
 D)E*++C
r"   c                    t        t        j                               }t        j                  d||d| g|d      j                  d      }t        d| d|dt        |       dd	d i
      }| j                  j                  |      5 }t        j                  |      }	d d d        	j                  d      |k(  sJ d       |	d   S # 1 sw Y   )xY w)Nz2.0ztoken:)jsonrpcidmethodrn   zutf-8zhttp://localhost:z/jsonrpczapplication/json)zContent-TypezContent-Lengthrg   )dataheadersproxiesr  z$Something went wrong with RPC serverresult)r   r   r   jsondumpsr  r   r   r   urlopenloadr:   )
rF   rpc_port
rpc_secretr  rn   sanitycheckdrequestrresps
             r#   
aria2c_rpczAria2cFD.aria2c_rpc`  s    $**,'JJ
|,6v6	
 
 6'? 	
 z2 2%(VH t}& XXg& 	 !99Q<D	 xx~,T.TT,H~	  	 s   
CCc                 f   d|vrt         |   ||      S t        j                  | j                  |d   d   |d   d         }t        j
                         }d|v }|rt        |d         nd}|j                  d      ddd|r|nd |rdnd d	}| j                  ||       d
dd}t        |dt        j                  t        j                        5 }	t        j                  d       |	j                         }
|
 |d      } |dd|g      } |d|       |d|      z   } |d|      }| |d||d      z  }||k  rd }|j                  t!        |      ||rd n||||z
  |xs dz  |rt#        |t        |      dz         nd t        j
                         |z
  d       | j                  ||       |s't        |      |k\  r |d       |	j%                         }
n)t        j                  d       |	j                         }
|
d|	j&                  j)                         |
fcd d d        S # 1 sw Y   y xY w)Nr  r  r  r   r   	_filenamedownloadingr   )r-   r.   r/   r1   fragment_countfragment_indexF)averagec                    t        t        d t        t        t	        |dd| f                        xs dg}t        |      |rt        |      z  S dz  S )N.r   r   )tuplefiltermapfloatr   sumr   )r   r,  objr   s       r#   get_statz(Aria2cFD._call_process.<locals>.get_stat  sM    tSS3S/0R%STU\Z[Y\Cs87s3x::::r"   T)r   stdoutr   g?zaria2.tellActivezaria2.tellStoppedtotalLengthcompletedLengthdownloadSpeed)r1   speedr2   total_bytes_estimateetar+  r/   zaria2.shutdowng? )r   r   r   partialr&  r7   r   r:   rC   r
   r   DEVNULLr   sleeppollrB   intminwaitr   r   )rF   r   rG   send_rpcrI   
fragmented
frag_countr.   r4  prJ   active	completed
downloadedr9  totalr  s                   r#   r   zAria2cFD._call_processt  s5   )#7(i88$$T__i6H6PR[\cRdemRno))+ I-
4>S;/0A
!k2# !,6jD#-a4
 	FI.(- 	; 3T**<*<Z__U $	/YZ JJsOVVXF. ""45$%81j/J	%mY?(K\^dBee
 &9"XmVYX\%]]:% E(+J"+545,1!J.5:A>MWc*c)nq6H&I]a#yy{W4  ##FI6#i.J">-.VVXF

3; .> qxx}}.I$	/ $	/ $	/s   D/H'H''H0)r!   )r   r   r   rY   rc   staticmethodr   r   r8   r   r&  r   __classcell__)r  s   @r#   r   r     sQ    M^" " B B@6p(;/ ;/r"   r   c                       e Zd ZdZdZd Zy)HttpieFDr   r&   c                     ddd||d   g}|j                  d      &|d   j                         D ]  \  }}|| d| gz  } | j                  j                  j	                  |d         }|r	|d| gz  }|S )Nr&   z
--downloadz--outputr   r   :zCookie:)r:   r   r   r   r   r   s          r#   r   zHttpieFD._make_cmd  s    |Zi>NO==(4%n5;;= (S3%q''( **<<Yu=MNgm_-..C
r"   N)r   r   r   rY   rT   r   r!   r"   r#   rO  rO    s    MHr"   rO  c                   n    e Zd ZdZej
                  ej                  fZedd       Z	d Z
ed        Zd Zy)FFmpegFD)r&   r'   r(   r)   m3u8m3u8_nativertsprtmprtmp_ffmpegmmshttp_dash_segmentsNc                 *    t               j                  S rS   )r	   r[   rZ   s     r#   r[   zFFmpegFD.available  s     #$...r"   c                      y)z Override this in subclasses  Nr!   )rF   procstdins      r#   on_process_startedzFFmpegFD.on_process_started  s    r"   c                     |j                  d      xrN |j                  d      xr; |j                  d       xr' d|j                  dg       vxr | j                  |      S )Nrequested_formatsr_   allow_unplayable_formatszno-direct-mergecompat_opts)r:   rl   )rQ   rG   rn   s      r#   can_merge_formatszFFmpegFD.can_merge_formats  sk     MM-. ,j),JJ9::, "M2)FF,   +	-r"   c           	      <   t        |       }|j                  s| j                  d       y|j                          |j                  dg}dD ]'  }| j
                  j                  |d      s |d|gz  } n | j
                  j                  d      s|dgz  }|t        |d	      z  }||j                  d
      xs g z  }|j                  d      }||d|rdndgz  }d }| j
                  j                  d      }|rvt        j                  d|      sd|z  }|j                  d      r"| j                  d| j                         z         t        j                  j                         }||d<   ||d<   |j                  d      }	|	dk(  r|j                  d      }
|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  d      }|j                  dd      }|j                  d      }|
|d |
gz  }||d!|gz  }||d"|gz  }||d#|gz  }||d$|gz  }||d%|gz  }|r|d&d'gz  }t!        |t"              r|D ]	  }|d(|gz  } nt!        |t$              r|d(|gz  }|j                  d)      xs d*|j                  d+      }}|j                  d,      xs |g}t'        |      D ]  \  }}t        j                  d-|d.         }|r(| j(                  j*                  j-                  |d.         ng }|r)|j/                  d/d0j1                  d1 |D              g       |j                  d2      r<|r:|j/                  d3d0j1                  d4 |d2   j3                         D              g       |r|d5t%        |      gz  }|r|d6t%        ||z
        gz  }|| j5                  d7|d8z    d7f      d9|d.   gz   z  } |s|r| j
                  j                  d:      s|d;d<gz  }|j                  d,      s|	d=k(  r=t'        |      D ]/  \  }}|j                  d>d*      }|j/                  d?| d@| g       1 | j
                  j                  dAd      r|dBt%        | j6                        gz  }|dC   }|	dDv r|dEk(  xs | j
                  j                  dF      }||j                  dG      }|r|dHdIgz  }n|dHdJgz  }|j8                  dKk(  r|j:                  j                  dL      r|j                  dM      r|dM   j=                  dN      d*   dOv r|dPdQgz  }n|	dk(  r|dHdRgz  }n|dJk(  r|dEk(  r|dHdIgz  }n}|dSk(  r]t?        tA        |dT            }|dSk(  r| j                  dU       nL| j                  dV| dW       |dHtC        j                  ||      gz  }n|dHtC        j                  ||      gz  }|t        |dX      z  }|| j5                  dY      z  }|D cg c]  }tE        |       }}|jG                  tI        |jK                  |      dZ             | jM                  |       tO        d[ |D              }tQ        |tR        jT                  |\      5 }|r| jW                  ||jX                         	 |j[                         } | cd d d        S c c}w # t\        $ rO}!t!        |!t^              r't`        jb                  d]k7  r|s|je                  d^        |jg                  d _        d }!~!ww xY w# 1 sw Y   y xY w)`N)
downloaderzDm3u8 download detected but ffmpeg could not be found. Please installFz-y)quietr   z	-loglevelr   z-hide_banner)downloader_optionsffmpeg_args._ffmpeg_args	_seekablez	-seekable1r   r   z^[\da-zA-Z]+://z	http://%ssockszv%s does not support SOCKS proxies. Downloading is likely to fail. Consider adding --hls-prefer-native to your command.
HTTP_PROXYr   r_   rW  
player_urlpage_urlapp	play_pathtc_urlflash_version	rtmp_live	rtmp_connz-rtmp_swfverifyz-rtmp_pageurlz	-rtmp_appz-rtmp_playpathz-rtmp_tcurlz-rtmp_flashverz
-rtmp_livelivez
-rtmp_connsection_startr   section_endra  z
^https?://r   z-cookiesr<  c           	   3      K   | ]:  }|j                    d |j                   d|j                   d|j                   d < yw)r   z; path=z	; domain=z;
N)r   valuer?   domain)rd   cookies     r#   rf   z,FFmpegFD._call_downloader.<locals>.<genexpr>5  sE      1+ {{m1V\\N'&++iPVP]P]^cd1+s   A Ar   z-headersc              3   2   K   | ]  \  }}| d | d  yw)r   z
Nr!   )rd   r   r   s      r#   rf   z,FFmpegFD._call_downloader.<locals>.<genexpr>;  s!     0qcC53%t1D0qs   z-ssz-t_ir   r	  force_keyframes_at_cutsr  copyrZ  manifest_stream_numberz-maprQ  testz-fsext)rT  rU  r0   hls_use_mpegtsr+   z-fmpegtsmp4ffmpegneeds_adtstoascacodecr   )aacmp4az-bsf:aaac_adtstoascflvunknown_videoz.partzThe video format is unknown and cannot be downloaded by ffmpeg. Explicitly set the extension in the filename to attempt download in that formatz3The video format is unknown. Trying to download as z according to the filename)rh  ffmpeg_args_out.)_o1_or<  Tc              3   *   K   | ]  }|d    dv   yw)r   )r0   zpipe:Nr!   )rd   fmts     r#   rf   z,FFmpegFD._call_downloader.<locals>.<genexpr>r  s     MSCJ.0Ms   )r^  envwin32   q)timeout)4r	   r[   rE   check_version
executablern   r:   r   r   match
startswithreport_warningr<   r>   environr  
isinstancelistr   r   r   r   get_cookies_for_urlextendr  r   r   _TEST_FILE_SIZEr  	_featuresri   r   r   r   r   r  r   _ffmpeg_filename_argumentr   anyr
   r   r   r_  r^  rC  BaseExceptionr9   sysplatformcommunicate_or_killkill)"rF   rH   rG   ffppr}   	log_levelseekabler  r   r_   ro  rp  rq  rr  rs  rt  rw  connentry
start_timeend_timeselected_formatsir  is_httpcookiesstream_numberr  
use_mpegtsoptpipedr]  rJ   es"                                     r#   r8   zFFmpegFD._call_downloader  s   "d3~~de&- 	I{{y%0i00	 {{y)^$$DY(RSS 		n-33==- [#s;;D(88.6#e+(##KMQM^M^M`ab **//#C %C %C==,v"|4J }}Z0H--&C!k2I]]8,F%MM/:M==e4D==-D%*J77#(33c**$)955!//()=99v..$%! 2E\511D2D#&t,,(}}_=BIMMR_D`H
$==)<=L) 01 	XFAshh}c%j9GLSdhh((<<SZHY[GZ 1+")1+ *+ , - ww~&7 Z0qUXYgUhUnUnUp0q)qrsJ00s8j#89::D,,1q5'lD-ABdCPUJEWWWD#	X& ht{{?X/YT6N"D==,-=Q1Q#$45 >3 #(@! DVs!M?%;<=> ;;??65)UC 4 4566D..%,RAQ1RJ!&]]95
x((u%MMX-$..2D2DEV2Wbkbobopxby  ~G  HP  ~Q  ~W  ~W  X[  ~\  ]^  ~_  cr  ~rX77DT5M!DE\kS0T8$$DO#
; @ACo%##fg ##&YZ]Y^^x$yz155c3?@@T-11#s;<<DY(VWW(():;;/34s#44N4#A#A+#NPTUVM<LMM4zC8 	D''djj9 !	 	 5 ! 
 a!238OX],,T2  IIdI+
	 	s7   :Z27\Z7'\7	\ A
\

\\\rS   )r   r   r   rc   r   r   r    rh   r   r[   r_  rd  r8   r!   r"   r#   rS  rS    sS     N",,h.G.GH/ /
 - -er"   rS  c                       e Zd Zy)AVconvFDN)r   r   r   r!   r"   r#   r  r    s    r"   r  FD)r%   r   c                  <    t        t        j                               S rS   )sorted_BY_NAMEr|   r!   r"   r#   list_external_downloadersr    s    (--/""r"   c                     t         j                  j                  t         j                  j                  |             d   t        j                        xs' t        fdt        j                         D        d      S )zO Given the name of the executable, see whether we support the given downloader r   c              3   @   K   | ]  }|j                   v s|  y wrS   rV   )rd   klassbns     r#   rf   z*get_external_downloader.<locals>.<genexpr>  s!      %"0D%s   N)r>   r?   splitextr  r  r:   nextvalues)external_downloaderr  s    @r#   get_external_downloaderr    s`    			"''**+>?	@	CB<< t %#??,%  r"   )2r   r  r>   r   r   r  r   r7   r   r   r   compatr   
networkingr   postprocessor.ffmpegr   r	   utilsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   Enumr   r%   r   r   r   r   rO  rS  r  globalsr   endswithr<   r  r  r  )r   r  s   00r#   <module>r     s     	 	  
         J   $#tyy #
[c [c|Z >Z  Z 6a/z a/Hz *|z |~	x 	 y(e}}Tt+GG 
%#s   $0D