U
    ¦y^sc  ã                   @   sZ  d dl m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	 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 ddd	d
d
ddddddœ
ZddddddddœZG dd„ deƒZG dd„ de	ƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd „ d eƒZG d!d"„ d"eƒZG d#d$„ d$eƒZG d%d&„ d&eƒZ G d'd(„ d(eƒZ!G d)d*„ d*eƒZ"dS )+é    )Úunicode_literalsNé   )ÚAudioConversionErrorÚPostProcessoré   )ÚencodeArgumentÚencodeFilenameÚget_exe_versionÚis_outdated_versionÚPostProcessingErrorÚprepend_extensionÚshell_quoteÚsubtitles_filenameÚdfxp2srtÚISO639UtilsÚreplace_extensionÚadtsÚflacZipodZmatroskaZmpegÚoggÚmpegtsÚasf)
Úaacr   Úm4aÚmkaÚmkvZmpgÚogvÚtsÚwmaÚwmvÚ
libmp3lamer   ZlibopusZ	libvorbis)Úmp3r   r   r   ÚopusÚvorbisÚwavc                   @   s   e Zd ZdS )ÚFFmpegPostProcessorErrorN)Ú__name__Ú
__module__Ú__qualname__© r(   r(   úRC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\youtube_dl\postprocessor\ffmpeg.pyr$   2   s   r$   c                   @   s„   e Zd Zddd„Zdd„ Zeddd„ƒZdd	„ Zed
d„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚFFmpegPostProcessorNc                 C   s   t  | |¡ |  ¡  d S ©N)r   Ú__init__Ú_determine_executables)ÚselfÚ
downloaderr(   r(   r)   r,   7   s    zFFmpegPostProcessor.__init__c                 C   sZ   | j stdƒ‚| jdkrdnd}t| j| j |ƒrVd| j| j|f }| jrV| j |¡ d S )Nz/ffmpeg or avconv not found. Please install one.Úavconvú10-0z1.0zZYour copy of %s is outdated, update %s to version %s or newer if you encounter any errors.)Ú	availabler$   Úbasenamer
   Ú	_versionsÚ_downloaderÚreport_warning©r.   Zrequired_versionZwarningr(   r(   r)   Úcheck_version;   s    
 ÿ  ÿz!FFmpegPostProcessor.check_versionc                 C   s
   t | ƒjS r+   )r*   r4   )r/   r(   r(   r)   Úget_versionsG   s    z FFmpegPostProcessor.get_versionsc                    sÔ  ddddg}d}dd„ ‰ d ˆ_ d ˆ_d ˆ_d ˆ_ˆj�r(ˆjj dd¡}ˆjj d	¡‰ˆd k	�r(tj 	ˆ¡s†ˆj 
d
ˆ ¡ i ˆ_d S tj ˆ¡sötj tj  ˆ¡¡d }||krÖˆj 
dˆd |¡f ¡ i ˆ_d S tj tj ˆ¡¡‰|dkröd}t‡fdd„|D ƒƒˆ_t‡ ‡fdd„|D ƒƒˆ_ˆjd k�r`t‡ fdd„|D ƒƒˆ_tdd„ |D ƒƒˆ_|dk�rpd}nd}|D ]}ˆj| �rx|ˆ_  �q˜�qx|dk�r¨d}nd}|D ]}ˆj| �r°|ˆ_ �qÐ�q°d S )NÚavprober0   ÚffmpegÚffprobeTc                 S   sB   t | dgd�}|r>ddg}|D ]}t ||¡}|r| d¡}q|S )Nz-version)Úargsz'(?:\d+:)?([0-9.]+)-[0-9]+ubuntu[0-9.]+$zn([0-9.]+)$r   )r	   ÚreÚmatchÚgroup)ÚpathÚverZregexsÚregexÚmobjr(   r(   r)   Úget_ffmpeg_versionO   s    þzFFFmpegPostProcessor._determine_executables.<locals>.get_ffmpeg_versionÚprefer_ffmpegÚffmpeg_locationzDffmpeg-location %s does not exist! Continuing without avconv/ffmpeg.r   zbCannot identify executable %s, its basename should be one of %s. Continuing without avconv/ffmpeg.z, )r;   r<   c                 3   s    | ]}|t j ˆ |¡fV  qd S r+   )ÚosrA   Újoin©Ú.0Úp)Úlocationr(   r)   Ú	<genexpr>y   s    z=FFmpegPostProcessor._determine_executables.<locals>.<genexpr>c                 3   s    | ]}|ˆ ˆj | ƒfV  qd S r+   )Ú_pathsrJ   )rE   r.   r(   r)   rN   {   s    c                 3   s   | ]}|ˆ |ƒfV  qd S r+   r(   rJ   )rE   r(   r)   rN   ~   s    c                 s   s   | ]}||fV  qd S r+   r(   rJ   r(   r(   r)   rN   €   s     F)r0   r;   )r;   r0   )r:   r<   )r<   r:   )r3   Úprobe_basenamerO   r4   r5   ÚparamsÚgetrH   rA   Úexistsr6   ÚisdirÚsplitextrI   ÚdirnameÚabspathÚdict)r.   ZprogramsrF   r3   ZprefsrL   r(   )rE   rM   r.   r)   r-   K   sr    
ÿÿþÿÿ
ÿ
ÿ



z*FFmpegPostProcessor._determine_executablesc                 C   s
   | j d k	S r+   )r3   ©r.   r(   r(   r)   r2   ”   s    zFFmpegPostProcessor.availablec                 C   s   | j | j S r+   )rO   r3   rY   r(   r(   r)   Ú
executable˜   s    zFFmpegPostProcessor.executablec                 C   s
   | j d k	S r+   )rP   rY   r(   r(   r)   Úprobe_availableœ   s    z#FFmpegPostProcessor.probe_availablec                 C   s   | j | j S r+   )rO   rP   rY   r(   r(   r)   Úprobe_executable    s    z$FFmpegPostProcessor.probe_executablec              	   C   s~  | j s| jstdƒ‚z¸| j r2t| jdƒtdƒg}nt| jdƒtdƒg}| t|  |¡dƒ¡ | j	j
 dd¡r†| j	 d| jt|ƒf ¡ tj|tjtjtjd�}| ¡ \}}| j r´d	nd
}| ¡ |krÊW d S W n ttfk
ræ   Y d S X | j rò|n| dd¡}| j �r^d }| d¡D ]F}	|	 d¡�r8|	 d¡d
  ¡ }n |	 ¡ dk�r|d k	�r|  S �qnt d|¡}
|
�rz|
 d
¡S d S )Nz@ffprobe/avprobe and ffmpeg/avconv not found. Please install one.Tz-show_streamsú-iÚverboseFz[debug] %s command line: %s)ÚstderrÚstdoutÚstdinr   r   ÚasciiÚignoreÚ
zcodec_name=ú=zcodec_type=audiozNStream\s*#\d+:\d+(?:\[0x[0-9a-f]+\])?(?:\([a-z]{3}\))?:\s*Audio:\s*([0-9a-z]+))r[   r2   r   r   r\   r   rZ   ÚappendÚ_ffmpeg_filename_argumentr5   rQ   rR   Ú	to_screenr3   r   Ú
subprocessÚPopenÚPIPEÚcommunicateÚwaitÚIOErrorÚOSErrorÚdecodeÚsplitÚ
startswithÚstripr>   Úsearchr@   )r.   rA   ÚcmdÚhandleZstdout_dataZstderr_dataZexpected_retÚoutputZaudio_codecÚlinerD   r(   r(   r)   Úget_audio_codec¤   sT    
þ
þÿ  þ
þ
z#FFmpegPostProcessor.get_audio_codecc                 C   s8  |   ¡  tdd„ |D ƒƒ}||  ¡ 7 }g }|D ]"}| tdƒt|  |¡dƒg¡ q.t| jdƒtdƒg}| jdkr„|tdƒtdƒg7 }||d	d
„ |D ƒ t|  |¡dƒg 7 }| j	j
 dd¡rÐ| j	 dt|ƒ ¡ tj|tjtjtjd�}| ¡ \}	}
|jdk�r&|
 dd¡}
|
 ¡  d¡d }t|ƒ‚|  |||¡ d S )Nc                 s   s   | ]}t  t|ƒ¡jV  qd S r+   )rH   Ústatr   Úst_mtime)rK   rA   r(   r(   r)   rN   Ñ   s    z@FFmpegPostProcessor.run_ffmpeg_multiple_files.<locals>.<genexpr>r]   Tz-yr;   z	-loglevelzrepeat+infoc                 S   s   g | ]}t |ƒ‘qS r(   )r   )rK   Úor(   r(   r)   Ú
<listcomp>á   s     zAFFmpegPostProcessor.run_ffmpeg_multiple_files.<locals>.<listcomp>r^   Fz[debug] ffmpeg command line: %s)r`   r_   ra   r   úutf-8Úreplacerd   éÿÿÿÿ)r8   ÚminÚ_configuration_argsÚextendr   r   rg   rZ   r3   r5   rQ   rR   rh   r   ri   rj   rk   rl   Ú
returncoderp   rs   rq   r$   Ú	try_utime)r.   Zinput_pathsÚout_pathÚoptsZoldest_mtimeZ	files_cmdrA   ru   rL   r`   r_   Úmsgr(   r(   r)   Úrun_ffmpeg_multiple_filesÎ   s8    ÿþ
ÿþz-FFmpegPostProcessor.run_ffmpeg_multiple_filesc                 C   s   |   |g||¡ d S r+   )r‰   )r.   rA   r†   r‡   r(   r(   r)   Ú
run_ffmpegî   s    zFFmpegPostProcessor.run_ffmpegc                 C   s   |dkrd| S |S )Nú-zfile:r(   )r.   Úfnr(   r(   r)   rg   ñ   s    z-FFmpegPostProcessor._ffmpeg_filename_argument)N)N)r%   r&   r'   r,   r8   Ústaticmethodr9   r-   Úpropertyr2   rZ   r[   r\   ry   r‰   rŠ   rg   r(   r(   r(   r)   r*   6   s"   
I



* r*   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚFFmpegExtractAudioPPNFc                 C   s.   t  | |¡ |d krd}|| _|| _|| _d S )NÚbest)r*   r,   Ú_preferredcodecÚ_preferredqualityÚ_nopostoverwrites)r.   r/   ÚpreferredcodecÚpreferredqualityÚnopostoverwritesr(   r(   r)   r,   ú   s    zFFmpegExtractAudioPP.__init__c              
   C   sj   |d krg }nd|g}dg| | }zt  | |||¡ W n, tk
rd } zt|jƒ‚W 5 d }~X Y nX d S )Nú-acodecú-vn)r*   rŠ   r$   r   rˆ   )r.   rA   r†   ÚcodecÚ	more_optsZacodec_optsr‡   Úerrr(   r(   r)   rŠ     s    zFFmpegExtractAudioPP.run_ffmpegc              
   C   s´  |d }|   |¡}|d kr"tdƒ‚g }| jdksL| j|ksL| jdkræ|dkræ|dkrp| jdkrpd}d}dd	g}nt|d
kržd}|}|dkr�ddg}|dkräd}nFd}d}g }| jd k	rät| jƒdk rÒ|d| jg7 }n|d| jd g7 }n¸t| j }| j}g }| jd k	�rBt| jƒdk �r0|dk�r0|d| jg7 }n|d| jd g7 }| jdk�rZ|ddg7 }| jdk�rr|dd	g7 }| jdk�r‚d}| jdk�ržd}|ddg7 }| d¡\}}}	|| | }
|
|d< ||d< |
|k�sî| j�rtj	 
t|
ƒ¡�r| j d|
 ¡ g |fS z$| j d|
 ¡ |  ||
||¡ W nT tk
�r\ } ztd|j ƒ‚W 5 d }~X Y n$ tk
�r~   td| j ƒ‚Y nX | d¡d k	�rª| j|
t ¡ |d dd� |g|fS ) NÚfilepathz7WARNING: unable to obtain file audio codec with ffprober�   r   r   )r   r�   Úcopyú-bsf:aÚaac_adtstoasc)r   r   r    r"   r!   ú-fr   r"   r   r   r    é
   z-q:az-b:aÚkr!   r#   Ú.Úextz.[ffmpeg] Post-process file %s exists, skippingz[ffmpeg] Destination: zaudio conversion failed: zerror running Úfiletimez!Cannot update utime of audio file)Zerrnote)ry   r   r‘   r’   ÚintÚACODECSÚ
rpartitionr“   rH   rA   rS   r   r5   rh   rŠ   r   rˆ   Ú	Exceptionr3   rR   r…   Útime)r.   ÚinformationrA   Z	filecodecrš   ÚacodecÚ	extensionÚprefixÚsepr¤   Únew_pathÚer(   r(   r)   Úrun  sˆ    
&



ÿÿÿ  þzFFmpegExtractAudioPP.run)NNNF)r%   r&   r'   r,   rŠ   r²   r(   r(   r(   r)   r�   ù   s   
r�   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚFFmpegVideoConvertorPPNc                    s   t t| ƒ |¡ || _d S r+   )Úsuperr³   r,   Ú_preferedformat)r.   r/   Úpreferedformat©Ú	__class__r(   r)   r,   a  s    zFFmpegVideoConvertorPP.__init__c                 C   sÈ   |d }|d | j kr4| j d|| j f ¡ g |fS g }| j dkrT| ddddg¡ | d	¡\}}}|| | j  }| j d
d|d | j f  | ¡ |  |||¡ ||d< | j |d< | j |d< |g|fS )Nrœ   r¤   zF[ffmpeg] Not converting video file %s - already is in target format %sÚaviz-c:vZlibxvidz-vtagZXVIDr£   z[ffmpegz/] Converting video from %s to %s, Destination: Úformat)rµ   r5   rh   rƒ   r¨   rŠ   )r.   r«   rA   Úoptionsr®   r¯   r¤   Zoutpathr(   r(   r)   r²   e  s    
"

zFFmpegVideoConvertorPP.run)NN©r%   r&   r'   r,   r²   Ú__classcell__r(   r(   r·   r)   r³   `  s   r³   c                   @   s   e Zd Zdd„ ZdS )ÚFFmpegEmbedSubtitlePPc                 C   sº  |d dkr | j  d¡ g |fS | d¡}|sB| j  d¡ g |fS |d }|d }g }g }d}| ¡ D ]l\}}	|	d }
|dksŽ|dkr®|
d	kr®| |¡ | t|||
|ƒ¡ qf|sf|dkrf|
d	krfd
}| j  d¡ qf|sàg |fS |g| }ddddddddg}|d dk�r|ddg7 }t|ƒD ]F\}}| dd|d  g¡ t 	|¡�pL|}| d| d| g¡ �q t
|dƒ}| j  d| ¡ |  |||¡ t t|ƒ¡ t t|ƒt|ƒ¡ ||fS )Nr¤   )Úmp4Úwebmr   zA[ffmpeg] Subtitles can only be embedded in mp4, webm or mkv filesÚrequested_subtitlesz,[ffmpeg] There aren't any subtitles to embedrœ   FrÀ   ÚvttTz<[ffmpeg] Only WebVTT subtitles can be embedded in webm filesú-mapÚ0ú-cr�   z-0:sz-0:dr¿   z-c:sZmov_textz%d:0r   z-metadata:s:s:%dzlanguage=%sÚtempz$[ffmpeg] Embedding subtitles in '%s')r5   rh   rR   Úitemsrf   r   Ú	enumeraterƒ   r   Ú
short2longr   r‰   rH   Úremover   Úrename)r.   r«   Ú	subtitlesÚfilenamer¤   Z	sub_langsÚsub_filenamesZwebm_vtt_warnÚlangZsub_infoZsub_extZinput_filesr‡   ÚiZ	lang_codeÚtemp_filenamer(   r(   r)   r²   x  sX    


    ø

zFFmpegEmbedSubtitlePP.runN©r%   r&   r'   r²   r(   r(   r(   r)   r¾   w  s   r¾   c                   @   s   e Zd Zdd„ ZdS )ÚFFmpegMetadataPPc              	      s  i ‰d1‡ ‡fdd„	}|ddƒ |ddƒ |ddƒ |d	d
ƒ |ddƒ |ddƒ |dƒ |dƒ |dƒ |ddƒ ˆsŠ| j  d¡ g ˆ fS ˆ d }t|dƒ}|g}g }ˆ d dkrÄ| dddg¡ n| ddg¡ ˆ ¡ D ]\}}| dd||f g¡ qÚˆ  dg ¡}	|	�r¼t|d ƒ}
tj|
d!d"d#���}d$d%„ }d&}|	D ]V}|d'7 }|d(|d) d*  7 }|d+|d, d*  7 }| d¡}|�r8|d-||ƒ 7 }�q8| 	|¡ | 
|
¡ | d.d/g¡ W 5 Q R X | j  d0| ¡ |  |||¡ |	�rêt |
¡ t t|ƒ¡ t t|ƒt|ƒ¡ g ˆ fS )2Nc                    sf   |s| }t | ttfƒs| f} t |ttfƒs0|f}|D ],}ˆ  |¡d k	r4| D ]}ˆ | ˆ|< qJ qbq4d S r+   )Ú
isinstanceÚlistÚtuplerR   )Z	meta_listZ	info_listZinfo_fZmeta_f©ÚinfoÚmetadatar(   r)   Úaddµ  s    z!FFmpegMetadataPP.run.<locals>.addÚtitle)ÚtrackrÛ   ÚdateÚupload_date)ÚdescriptionÚcommentrß   ZpurlZwebpage_urlrÜ   Ztrack_numberÚartist)rá   ZcreatorZuploaderZuploader_idZgenreZalbumZalbum_artistZdiscZdisc_numberz([ffmpeg] There isn't any metadata to addrœ   rÆ   r¤   r   r˜   r—   r�   rÅ   z	-metadataz%s=%sÚchaptersÚmetaÚwtr~   ©Úencodingc                 S   s   t  dd| ¡S )Nz(=|;|#|\\|\n)z\\\1)r>   Úsub)Útextr(   r(   r)   Úffmpeg_escapeâ  s    z+FFmpegMetadataPP.run.<locals>.ffmpeg_escapez;FFMETADATA1
z[CHAPTER]
TIMEBASE=1/1000
z	START=%d
Ú
start_timeiè  zEND=%d
Úend_timez	title=%s
z-map_metadataÚ1z [ffmpeg] Adding metadata to '%s')N)r5   rh   r   rƒ   rÇ   rR   r   ÚioÚopenÚwriterf   r‰   rH   rÊ   r   rË   )r.   rØ   rÚ   rÍ   rÑ   Zin_filenamesr»   ÚnameÚvaluerâ   Zmetadata_filenameÚfré   Zmetadata_file_contentZchapterZchapter_titler(   r×   r)   r²   ²  s^    












zFFmpegMetadataPP.runNrÒ   r(   r(   r(   r)   rÓ   ±  s   rÓ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚFFmpegMergerPPc                 C   sd   |d }t |dƒ}ddddddg}| j d| ¡ |  |d	 ||¡ t t|ƒt|ƒ¡ |d	 |fS )
Nrœ   rÆ   rÅ   r�   rÃ   z0:v:0z1:a:0z"[ffmpeg] Merging formats into "%s"Z__files_to_merge)r   r5   rh   r‰   rH   rË   r   )r.   rØ   rÍ   rÑ   r=   r(   r(   r)   r²   û  s    
zFFmpegMergerPP.runc                 C   sP   | j dkrdS d}t| j| j  |ƒrLd| j | j |f }| jrH| j |¡ dS dS )Nr0   Tr1   z°Your copy of %s is outdated and unable to properly mux separate video and audio files, youtube-dl will download single file media. Update %s to version %s or newer to fix this.F)r3   r
   r4   r5   r6   r7   r(   r(   r)   Ú	can_merge  s"    

 ÿ  ÿþzFFmpegMergerPP.can_mergeN)r%   r&   r'   r²   rô   r(   r(   r(   r)   ró   ú  s   	ró   c                   @   s   e Zd Zdd„ ZdS )ÚFFmpegFixupStretchedPPc                 C   sŒ   |  d¡}|d ks|dkr"g |fS |d }t|dƒ}dddd| g}| j d	| ¡ |  |||¡ t t|ƒ¡ t t|ƒt|ƒ¡ g |fS )
NÚstretched_ratior   rœ   rÆ   rÅ   r�   z-aspectz%fz$[ffmpeg] Fixing aspect ratio in "%s"©	rR   r   r5   rh   rŠ   rH   rÊ   r   rË   )r.   rØ   rö   rÍ   rÑ   r»   r(   r(   r)   r²     s    

zFFmpegFixupStretchedPP.runNrÒ   r(   r(   r(   r)   rõ     s   rõ   c                   @   s   e Zd Zdd„ ZdS )ÚFFmpegFixupM4aPPc                 C   s|   |  d¡dkrg |fS |d }t|dƒ}ddddg}| j d	| ¡ |  |||¡ t t|ƒ¡ t t|ƒt|ƒ¡ g |fS )
NÚ	containerZm4a_dashrœ   rÆ   rÅ   r�   r    r¿   z%[ffmpeg] Correcting container in "%s"r÷   ©r.   rØ   rÍ   rÑ   r»   r(   r(   r)   r²   *  s    
zFFmpegFixupM4aPP.runNrÒ   r(   r(   r(   r)   rø   )  s   rø   c                   @   s   e Zd Zdd„ ZdS )ÚFFmpegFixupM3u8PPc                 C   sx   |d }|   |¡dkrpt|dƒ}dddddd	g}| j d
| ¡ |  |||¡ t t|ƒ¡ t t|ƒt|ƒ¡ g |fS )Nrœ   r   rÆ   rÅ   r�   r    r¿   rž   rŸ   z/[ffmpeg] Fixing malformed AAC bitstream in "%s")	ry   r   r5   rh   rŠ   rH   rÊ   r   rË   rú   r(   r(   r)   r²   <  s    
zFFmpegFixupM3u8PP.runNrÒ   r(   r(   r(   r)   rû   ;  s   rû   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚFFmpegSubtitlesConvertorPPNc                    s   t t| ƒ |¡ || _d S r+   )r´   rü   r,   rº   )r.   r/   rº   r·   r(   r)   r,   K  s    z#FFmpegSubtitlesConvertorPP.__init__c              
   C   s¤  |  d¡}|d }| j}|}|dkr(d}|d krD| j d¡ g |fS | j d¡ g }| ¡ D �]<\}}|d }	|	|krˆ| j d| ¡ q\t|||	|  d¡ƒ}
| |
¡ t||||  d¡ƒ}|	d	k�rZ| j d
¡ |
}t||d|  d¡ƒ}t|dƒ�}t	| 
¡ ƒ}W 5 Q R X tj|ddd��}| |¡ W 5 Q R X |}
d|dœ||< |dk�rPq\n
| |¡ |  |
|d|g¡ tj|ddd��}|| 
¡ dœ||< W 5 Q R X q\||fS )NrÁ   rœ   rÂ   Zwebvttz.[ffmpeg] There aren't any subtitles to convertz[ffmpeg] Converting subtitlesr¤   z@[ffmpeg] Subtitle file for %s is already in the requested format)ÚdfxpÚttmlÚttzpYou have requested to convert dfxp (TTML) subtitles into another format, which results in style information lossÚsrtÚrbrä   r~   rå   )r¤   Údatar    Zrt)rR   rº   r5   rh   rÇ   r   rf   r6   rî   r   Úreadrí   rï   rŠ   )r.   rØ   ZsubsrÍ   Znew_extZ
new_formatrÎ   rÏ   rç   r¤   Zold_fileZnew_fileZ	dfxp_fileZsrt_filerò   Zsrt_datar(   r(   r)   r²   O  sX    
ÿ

ÿþ


þzFFmpegSubtitlesConvertorPP.run)NNr¼   r(   r(   r·   r)   rü   J  s   rü   )#Ú
__future__r   rí   rH   ri   rª   r>   Úcommonr   r   Úutilsr   r   r	   r
   r   r   r   r   r   r   r   ÚEXT_TO_OUT_FORMATSr§   r$   r*   r�   r³   r¾   rÓ   ró   rõ   rø   rû   rü   r(   r(   r(   r)   Ú<module>   sL   4öù Dg:I