Ë
    \NeÀC  ã                   ó€  — d dl mZ d dl mZ d dlmZ ddlZ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ZddlZd dlmZ 	  ej&                  ej(                  d«        ej*                  «       \  ZZes3d
Z ej2                  dd«       	  ej&                  ej4                  d«        ej8                  d ej:                  «       z  «       d„ Z G d„ dej>                  j@                  jB                  «      Z! G d„ dej>                  j@                  jD                  «      Z" G d„ de#«      Z$ G d„ de#«      Z% G d„ de	«      Z& ed«       ed«       ed«       ed«       ed«      f  G d„ de#«      Z'e(d k(  r e!«       Z)e)jU                  «        yy#   ej0                  d	«       d
ZY �Œ6xY w# ej6                  $ r Y �Œw xY w)!é   )Úgettext)Úngettext)Úgeté    N)ÚEnum)Úapport_pkgfailureÚ zgetting the encoding failedzutf-8ÚLC_CTYPEzC.UTF-8zlocale: '%s' '%s'c                 óÐ  — t        | «      } | dz  }| dz  dz  }| dz  dz  }| dz  }|dk(  rd}dddddœ}|dkD  rt        d	d
|«      |z  |d<   |dkD  rt        dd|«      |z  |d<   |dkD  rt        dd|«      |z  |d<   t        dd|«      |z  |d<   |dkD  r|d   dk(  r|d   S t        d«      |z  S |dkD  r|d   S |dkD  r|d   dk(  r|d   S t        d«      |z  S |dkD  r|d   S |d   S )z; return the time a bit fuzzy (no seconds if time > 60 secs i€Q i  é   é<   r   r   r	   )Ústr_daysÚ	str_hoursÚstr_minutesÚstr_secondsz%li dayz%li daysr   z%li hourz	%li hoursr   z
%li minutez%li minutesr   z
%li secondz%li secondsr   z%(str_days)s %(str_hours)sé   z%(str_hours)s %(str_minutes)s)Úintr   Ú_)ÚsecÚdaysÚhoursÚminutesÚsecondsÚmaps         ú=/usr/lib/python3/dist-packages/DistUpgrade/DistUpgradeView.pyÚFuzzyTimeToStrr   ;   se  € ô 	ˆC‹€#à	ˆx‰€$Ø
�‰,˜Ñ
€%Ø�"‰W˜‰N€'Ø�"‰H€'à�‚\Ø€Gð ØØØñ	
€#ð 
ˆA‚XÜ˜y¨°TÓ:¸TÑA€Cˆ
�OØ
ˆQ‚YÜ 
¨;¸Ó>ÀÑF€CˆÑØˆq‚[Ü! ,¨}¸gÓFÈÑP€CˆÑÜ ¨]¸GÓDÀwÑN€#€mÑð 
ˆA‚Xà
ˆ;Ñ˜2ÒØ�:‰Ðô Ð)Ó*¨SÑ0Ð0àˆq‚yØˆ{ÑÐàˆq‚yà
ˆ=Ñ˜RÒØ�;ÑÐô Ð,Ó-°Ñ3Ð3Ø�‚{Øˆ}ÑÐØ	ˆ]Ñ	Ðó    c                   óP   ‡ — e Zd Zˆ fd„Zˆ fd„Zˆ fd„Zd„ Zdˆ fd„	Zd„ Zd„ Z	ˆ xZ
S )	ÚAcquireProgressc                 ó8   •— t         t        | �  «        d| _        y )Nç        )Úsuperr   Ú__init__Ú	est_speed©ÚselfÚ	__class__s    €r   r#   zAcquireProgress.__init__�   s   ø€ Ü	Œ/˜4Ñ)Ô+Ø€D…Nr   c                 ób   •— t         t        | �  «        d| _        d| _        d| _        d| _        y )Nr!   F)r"   r   Ústartr$   ÚetaÚpercentÚrelease_file_download_errorr%   s    €r   r)   zAcquireProgress.start„   s-   ø€ Ü	Œ/˜4Ñ&Ô(Ø€D„NØ€D„HØ€D„LØ',€DÕ$r   c                 ó  •— t         t        | �  ||||«       |t        j                  k(  r]t        j                  d|z  «       |j                  d«      s|j                  d«      r"dD ]  }|j                  |«      sŒd| _	         y  y y y )Nz update_status: dlFailed on '%s' zRelease.gpgÚRelease)ÚhttpÚftpÚmirrorT)
r"   r   Úupdate_statusÚapt_pkgÚSTAT_FAILEDÚloggingÚwarningÚendswithÚ
startswithr,   )r&   ÚuriÚdescrÚ
shortDescrÚstatusÚnetr'   s         €r   r2   zAcquireProgress.update_statusŠ   s„   ø€ Ü	Œ/˜4Ñ.¨s°E¸:ÀvÔNð ”×$Ñ$Ò$Ü‡o�oÐ8¸3Ñ>Ô?Ø	�‰�mÔ	$¨¯©°YÔ(?ð +ò 	ˆCØ�^‰^˜CÕ Ø/3ˆDÔ,Ùñ	ð )@ð %r   c                  ó   — y©NT© )r&   Úargs     r   Úpulse_itemszAcquireProgress.pulse_items™   s   € Ør   c                 ó®  •— t         t        | �  |«       | j                  | j                  z   dz  t        | j                  | j                  z   «      z  | _        | j                  | j                  kD  r!| j                  | j                  z   dz  | _
        | j                  dkD  r4| j                  | j                  z
  t        | j                  «      z  | _        y)Ng      Y@g       @r   T)r"   r   ÚpulseÚcurrent_bytesÚcurrent_itemsÚfloatÚtotal_bytesÚtotal_itemsr+   Úcurrent_cpsr$   r*   )r&   Úownerr'   s     €r   rD   zAcquireProgress.pulse›   s¶   ø€ Ü	Œ/˜4Ñ& uÔ-Ø×(Ñ(¨4×+=Ñ+=Ñ=ÀÑFÜ˜$×*Ñ*¨T×-=Ñ-=Ñ=Ó>ñ?€D„Là×Ñ˜$Ÿ.™.Ò(ØŸ™ t×'7Ñ'7Ñ7¸Ñ<€d„nØ×Ñ˜!ÒØ×#Ñ# d×&8Ñ&8Ñ8Ü˜×(Ñ(Ó)ñ*€d„hàr   c                 ó    — | j                   dk7  S )Nr   )r$   ©r&   s    r   ÚisDownloadSpeedEstimatedz(AcquireProgress.isDownloadSpeedEstimated¥   s   € Ø�N‰N˜aÑÐ r   c                 óÈ   — | j                   dk(  r.|dz  }|dz  }t        d«      t        |«      t        |«      fz  }|S t        d«      t        || j                   z  «      z  }|S )z! get the estimated download time r   g    Ð#Ag    ÐSAz_This download will take about %s with a 40Mbit connection and about %s with a 5Mbit connection.z7This download will take about %s with your connection. )r$   r   r   )r&   Úrequired_downloadÚ	time5MbitÚ
time40MbitÚss        r   ÚestimatedDownloadTimez%AcquireProgress.estimatedDownloadTime§   sw   € à‡~�~˜ÒØ# ]Ñ3€iØ$ nÑ5€jÜ	
ð 3ó 
4Ü7EÀjÓ7QÔSaÐbkÓSlÐ6mñ
n€aà€hä	Ð
CÓDÄ~ÐVgÐhl×hvÑhvÑVvÓGwÑw€AØ€Hr   ©N)Ú__name__Ú
__module__Ú__qualname__r#   r)   r2   rB   rD   rN   rT   Ú__classcell__)r'   s   @r   r   r      s&   ø„ ôô-ôòõ	ò!ö
r   r   c                   ó(   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zy)ÚInstallProgressz_ Base class for InstallProgress that supports some fancy
      stuff like apport integration
  c                 óx   — t         j                  j                  j                  j	                  | «       d | _        y rU   )ÚaptÚprogressÚbaser[   r#   Ú	master_fdrM   s    r   r#   zInstallProgress.__init__¹   s'   € Ü‡L�L×Ñ×%Ñ%×.Ñ.¨tÔ4Ø€D…Nr   c                 ó<  — 	 	 t        j                   | j                  gg g | j                  «       | j                  «        	 t        j                  | j                  t        j                  «      \  }}|| j                  k(  r	 |S 	 Œ„# t         j                  $ r+}|j                  d   t
        j                  k7  r‚ Y d}~Œ�d}~ww xY w# t        $ rK}|j
                  t
        j                  k7  r‚ |j
                  t
        j                  k(  rY d}~S Y d}~Œ‘d}~ww xY w)z�Wait for child progress to exit.

      The return values is the full status returned from os.waitpid()
      (not only the return code).
      r   N)ÚselectÚstatusfdÚselect_timeoutÚerrorÚargsÚerrnoÚEINTRÚupdate_interfaceÚosÚwaitpidÚ	child_pidÚWNOHANGÚOSErrorÚECHILD)r&   ÚeÚpidÚress       r   Ú
wait_childzInstallProgress.wait_child½   sì   € ð ðÜ�m‰m˜TŸ]™]˜O¨R°°T×5HÑ5HÔIð ×
Ñ
Ô
!ðÜŸ:™: d§n¡n´b·j±jÓA‰jˆs�CØ˜Ÿ™Ò&Øð €jð 'ð øô —‘ò Ø—‘˜‘œeŸk™kÒ)Øô *ûðûô ò Ø—‘œEŸK™KÒ'ØØ—‘œEŸL™LÒ(ÛØ€jô )ûðús0   ƒ-B ÁA C ÂCÂ!B?Â?CÃ	DÃ;DÄDc                 ón  — | j                  «       }|dk(  rct        j                  t        j                  t        j                  «       	 |j	                  | j
                  «      }t        j                  «       || _        t        j"                  | j%                  «       «      }|S # t        $ r†}t        d|«       t        j                  d«       t        dd«      5 }|j                  t        |«      «       d d d «       n# 1 sw Y   nxY wt        j                  |j                  «       Y d }~ŒËd }~ww xY w)Nr   z!Exception during pm.DoInstall(): zException during pm.DoInstall()z./var/run/ubuntu-release-upgrader-apt-exceptionÚw)ÚforkÚsignalÚSIGPIPEÚSIG_IGNÚ
do_installÚwritefdÚ	ExceptionÚprintr5   Ú	exceptionÚopenÚwriteÚstrrj   Ú_exitÚRESULT_FAILEDrl   ÚWEXITSTATUSrs   )r&   Úpmrq   rr   rp   Úfs         r   ÚrunzInstallProgress.runÕ   sã   € Ø
�)‰)‹+€CØ
ˆa‚xô ‡m�m”F—N‘N¤6§>¡>Ô2ð#Ø�m‰m˜DŸL™LÓ)ˆô 	‡h�hˆs„mØ€D„NÜ
�.‰.˜Ÿ™Ó*Ó
+€CØ€Jøô ò #ÜÐ1°1Ô5Ü×ÑÐ;Ô<ÜÐBÀ3ÓGð 	È1Ø�G‰G”C˜“FŒO÷	÷ 	ñ 	úä
�‰�×!Ñ!×"Ñ"ûð#ús0   Á	B% Â%	D4Â.-D/ÃC?Ã6	D/Ã?D	Ä&D/Ä/D4c                 ó¾  — t         j                  j                  j                  j	                  | ||«       t        j                  d|›d|›d�«       d|v rt        j                  j                  |«      }|j                  d«      d   j                  «       r#dj                  |j                  d«      dd «      }d	|v r|j                  d	«      d   }t        ||«       y)
z install error from a package z!got an error from dpkg for pkg: 'z': 'ú'ú/ú-r   r   Nr   )r]   r^   r_   r[   re   r5   rj   ÚpathÚbasenameÚsplitÚisdigitÚjoinr   )r&   ÚpkgÚerrormsgs      r   re   zInstallProgress.errorè   s©   € ä‡L�L×Ñ×%Ñ%×+Ñ+¨D°#°xÔ@Ü‡M‚MÂ#ÂxÐPÔQØ
ˆc�zÜ�G‰G×Ñ˜SÓ!€cØ
‡y�y�ƒ~�aÑ× Ñ Ô"Ø�J‰J�s—y‘y “~ a bÐ)Ó*€cØ
ˆc�zØ�I‰I�c‹N˜1Ñ€cä�c˜8Õ$r   N)rV   rW   rX   Ú__doc__r#   rs   r‡   re   r@   r   r   r[   r[   µ   s   „ ñòòò0ó&%r   r[   c                   ó   — e Zd Zdd„Zy)ÚDumbTerminalc                 ó.   — ddl }|j                  |«       y)z7 expects a command in the subprocess style (as a list) r   N)Ú
subprocessÚcall)r&   ÚcmdÚhiddenr—   s       r   r˜   zDumbTerminal.callö   s   € ãØ�‰˜Õr   N©F)rV   rW   rX   r˜   r@   r   r   r•   r•   õ   s   „ ôr   r•   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚSampleHtmlViewc                  ó   — y rU   r@   )r&   Úurls     r   r   zSampleHtmlView.openü   s   € Ør   c                  ó   — y rU   r@   rM   s    r   ÚshowzSampleHtmlView.showþ   ó   € Ø
r   c                  ó   — y rU   r@   rM   s    r   ÚhidezSampleHtmlView.hide   r¢   r   N)rV   rW   rX   r   r¡   r¤   r@   r   r   r�   r�   û   s   „ òòór   r�   c                   ó(   — e Zd ZdZdZdZdZdZdZdZ	y)	ÚStepr   é   r   é   é   é   é   N)
rV   rW   rX   ÚPREPAREÚMODIFY_SOURCESÚFETCHÚINSTALLÚCLEANUPÚREBOOTÚNr@   r   r   r¦   r¦     s%   „ Ø€GØ€NØ€EØ€GØ€GØ€FØ	�Ar   r¦   zPreparing to upgradezGetting new software channelszGetting new packageszInstalling the upgradeszCleaning upc                   ó¤   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Z	 dd„Zdd„Zdd„Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Zdd„Zd„ Zy)ÚDistUpgradeViewz" abstraction for the upgrade view c                 ó   — d| _         y )NF)Úneeds_screenrM   s    r   r#   zDistUpgradeView.__init__  s   € Ø!ˆÔØr   c                 óR   — t         j                  j                  j                  «       S )z5 return a OpProgress() subclass for the given graphic)r]   r^   r_   Ú
OpProgressrM   s    r   ÚgetOpCacheProgressz"DistUpgradeView.getOpCacheProgress  s   € ä�|‰|× Ñ ×+Ñ+Ó-Ð-r   c                 ó   — t        «       S )z# return an acquire progress object )r   rM   s    r   ÚgetAcquireProgressz"DistUpgradeView.getAcquireProgress  ó   € äÓ Ð r   Nc                 ó   — t        «       S )z" return a install progress object )r[   )r&   Úcaches     r   ÚgetInstallProgressz"DistUpgradeView.getInstallProgress   r¼   r   c                 ó   — t        «       S rU   )r•   rM   s    r   ÚgetTerminalzDistUpgradeView.getTerminal#  s
   € Ü‹~Ðr   c                 ó   — t        «       S rU   )r�   rM   s    r   ÚgetHtmlViewzDistUpgradeView.getHtmlView%  s   € ÜÓÐr   c                  ó   — y)z\ update the current status of the distUpgrade based
            on the current view
        Nr@   )r&   Úmsgs     r   ÚupdateStatuszDistUpgradeView.updateStatus'  s   € ð 	r   c                  ó   — y)z8 provide a visual feedback that the upgrade was aborted Nr@   rM   s    r   ÚabortzDistUpgradeView.abort,  ó   € àr   c                 óJ   — t        «       j                  |j                  «       y)zé we have 6 steps current for a upgrade:
        1. Analyzing the system
        2. Updating repository information
        3. fetch packages
        3. Performing the upgrade
        4. Post upgrade stuff
        5. Complete
        N)Úget_telemetryÚ	add_stageÚname©r&   Ústeps     r   ÚsetStepzDistUpgradeView.setStep/  s   € ô 	‹×!Ñ! $§)¡)Ô,Ør   c                  ó   — y)z" hide a certain step from the GUI Nr@   rÎ   s     r   ÚhideStepzDistUpgradeView.hideStep:  rÉ   r   c                  ó   — y)z" show a certain step from the GUI Nr@   rÎ   s     r   ÚshowStepzDistUpgradeView.showStep=  rÉ   r   c                 óT  — d| _         || _        g | _        g | _        g | _        g | _        g | _        g | _        |D �]  }|j                  r| j                  j                  |«       Œ,|j                  r| j                  j                  |«       ŒT|j                  r| j                  j                  |«       Œ||j                  rg|j                  j                  j                  |j                   «      r| j                  j                  |«       ŒÓ| j
                  j                  |«       Œï|j"                  sŒü| j                  j                  |«       �Œ | j                  | j                  z   | _        | j                  j%                  «        | j                  j%                  «        | j
                  j%                  «        | j                  j%                  «        | j                  j%                  «        d}t'        | j
                  «      t'        | j                  «      z   }	t'        | j                  «      t'        | j                  «      z   }
t'        | j                  «      }t'        | j                  «      dkD  r@|t)        ddt'        | j                  «      «      dt'        | j                  «      iz  z  }|dz  }|	dkD  r|t)        dd	|	«      |	z  z  }|d
z  }|
dkD  r|t)        dd|
«      |
z  z  }|d
z  }|dkD  r|t)        dd|«      |z  z  }|d
z  }|dkD  rmt+        j,                  |«      }t/        |t0        «      r|j3                  t4        «      }|t7        d«      |z  z  }|| j9                  «       j;                  |«      z  }||
z   dkD  rM||
z   |	z   dkD  rB| j9                  «       j=                  «       r|dt7        d«      z  z  }n(|dt7        d«      z  z  }n|	dkD  r|dt7        d«      z  z  }||
z   |	z   dk  r)t7        d«      }t7        d«      }| j?                  ||«       y|| _         y)zm display the list of changed packages (apt.Package) and
            return if the user confirms them
        r	   ú
r   zo%(amount)d installed package is no longer supported by Canonical. You can still get support from the community.zq%(amount)d installed packages are no longer supported by Canonical. You can still get support from the community.Úamountz

z"%d package is going to be removed.z$%d packages are going to be removed.ú z(%d new package is going to be installed.z*%d new packages are going to be installed.z#%d package is going to be upgraded.z%%d packages are going to be upgraded.z&

You have to download a total of %s. éd   z

%sznInstalling the upgrade can take several hours. Once the download has finished, the process cannot be canceled.z{Fetching and installing the upgrade can take several hours. Once the download has finished, the process cannot be canceled.z.Removing the packages can take several hours. r   z,The software on this computer is up to date.zRThere are no upgrades available for your system. The upgrade will now be canceled.FT) ÚconfirmChangesMessageÚ	demotionsÚ	toInstallÚtoReinstallÚ	toUpgradeÚtoRemoveÚtoRemoveAutoÚtoDowngradeÚmarked_installÚappendÚmarked_upgradeÚmarked_reinstallÚmarked_deleteÚ_pcacheÚ	_depcacheÚis_auto_installedÚ_pkgÚmarked_downgradeÚsortÚlenr   r3   Úsize_to_strÚ
isinstanceÚbytesÚdecodeÚENCODINGr   r»   rT   rN   re   )r&   ÚsummaryÚchangesrÛ   ÚdownloadSizeÚactionsÚremoval_boldr‘   rÅ   Úpkgs_removeÚ	pkgs_instÚpkgs_upgradeÚdownloadSizeStrs                r   ÚconfirmChangeszDistUpgradeView.confirmChanges@  s  € ð
 &(ˆÔ"Ø"ˆŒØˆŒØˆÔØˆŒØˆŒØˆÔØˆÔØó 	+ˆCØ×!Ò!Ø�n‰n×#Ñ# CÕ(Ø×#Ò#Ø�n‰n×#Ñ# CÕ(Ø×%Ò%Ø×Ñ×%Ñ% cÕ*Ø×"Ò"Ø—‘×&Ñ&×8Ñ8¸¿¹ÔBØ×!Ñ!×(Ñ(¨Õ-à—‘×$Ñ$ SÕ)Ø×%Ó%Ø×Ñ×%Ñ% cÖ*ð	+ð Ÿ™¨$×*:Ñ*:Ñ:ˆŒà�‰×ÑÔØ�‰×ÑÔØ�‰×ÑÔØ×Ñ×ÑÔ Ø×Ñ×ÑÔàˆÜ˜$Ÿ-™-Ó(¬3¨t×/@Ñ/@Ó+AÑAˆÜ˜Ÿ™Ó'¬#¨d×.>Ñ.>Ó*?Ñ?ˆ	Ü˜4Ÿ>™>Ó*ˆäˆt�~‰~Ó Ò"Ø
”ð<ðGä�—‘Óó!ð
 &.´°D·N±NÓ0CÐ#EñFñ Fˆ#ð �‰-ˆ#Ø˜Š?ð ”Ð>Ø@Ø%ó'à)4ñ5ñ 5ˆ#ð �‰*ˆ#Ø�qŠ=Ø
”ð 'ð'Ø'0ó2ð 5>ñ>ñ >ˆ#ð �‰*ˆ#Ø˜!ÒØ
”Ð?ØAØ&ó(à*6ñ7ñ 7ˆ#ð �‰)ˆ#Ø˜!ÒÜ#×/Ñ/°Ó=ˆ/Ü˜¬Ô/Ø /× 6Ñ 6´xÓ @ˆoØ
”Ð=Ó>Øññ ˆ#à
�×(Ñ(Ó*×@Ñ@ÀÓNÑ
Nˆ#Ø˜IÑ%¨Ò*°,ÀÑ2JÈ[Ñ2XÐ\_Ò1_Ø×$Ñ$Ó&×?Ñ?ÔAØ�8œað "Qó Rñ Rñ R‰Cð �8œað "Qó Rñ Rñ R‰Cð ˜3ÒØ�8œað "<ó =ñ =ñ =ˆCð ˜9Ñ$ {Ñ2°aÒ7äÐDÓEˆ'Üð 6ó 7ˆ#à
�*‰*�W˜cÔ
"Øà%(ˆÔ"Ør   c                  ó   — y)z0 ask a Yes/No question and return True on 'Yes' Nr@   ©r&   ró   rÅ   Údefaults       r   ÚaskYesNoQuestionz DistUpgradeView.askYesNoQuestion£  rÉ   r   c                  ó   — y)z= ask a Cancel/Continue question and return True on 'Continue'Nr@   rþ   s       r   ÚaskCancelContinueQuestionz)DistUpgradeView.askCancelContinueQuestion¦  rÉ   r   c                 óR   — t        d«      }t        d«      }| j                  ||«      S )z2 generic ask about the restart, can be overridden zReboot requiredzMThe upgrade is finished and a reboot is required. Do you want to do this now?)r   r   )r&   ró   rÅ   s      r   ÚconfirmRestartzDistUpgradeView.confirmRestart©  s1   € äÐ%Ó&ˆÜð ó ˆð ×$Ñ$ W¨cÓ2Ð2r   c                 ój   — t        d«      }t        d«      }t        d«      }| j                  |||«      S )NzAction requiredz9Exit all other instances of Ubuntu WSL before continuing.z'Unsaved progress may otherwise be lost.©r   Úinformation©r&   ró   rÅ   Úextendeds       r   ÚadviseExitOtherWSLz"DistUpgradeView.adviseExitOtherWSL±  s8   € ÜÐ%Ó&ˆÜÐKÓLˆÜÐ>Ó?ˆØ×Ñ ¨¨hÓ7Ð7r   c                 ój   — t        d«      }t        d«      }t        d«      }| j                  |||«      S )NzWSL restart requiredz!Exit this instance of Ubuntu WSL.z"The upgrade will then be complete.r  r  s       r   ÚadviseRestartWSLz DistUpgradeView.adviseRestartWSL¶  s8   € ÜÐ*Ó+ˆÜÐ3Ó4ˆÜÐ9Ó:ˆØ×Ñ ¨¨hÓ7Ð7r   c                  ó   — y)z display a error Nr@   ©r&   ró   rÅ   Úextended_msgs       r   re   zDistUpgradeView.error»  rÉ   r   c                  ó   — y)z display a information msgNr@   r  s       r   r  zDistUpgradeView.information¾  rÉ   r   c                  ó   — y)zQ process gui events (to keep the gui alive during a long
            computation Nr@   rM   s    r   ÚprocessEventszDistUpgradeView.processEventsÁ  s   € ð 	r   c                  ó   — y)zX do a progress pulse (e.g. bounce a bar back and forth, show
          a spinner)
      Nr@   )r&   Úfinisheds     r   ÚpulseProgresszDistUpgradeView.pulseProgressÅ  s   € ð r   c                 óH   — | j                  ||dj                  |«      «       y)zr
      show demoted packages to the user, default implementation
      is to just show a information dialog
      rÖ   N)r  r�   )r&   ró   rÅ   rÛ   s       r   ÚshowDemotionszDistUpgradeView.showDemotionsÊ  s   € ð
 ×Ñ�w  T§Y¡Y¨yÓ%9Õ:r   rU   r?   )ÚNo)ÚCancelr›   )rV   rW   rX   r“   r#   r¹   r»   r¿   rÁ   rÃ   rÆ   rÈ   rÐ   rÒ   rÔ   rü   r   r  r  r
  r  re   r  r  r  r  r@   r   r   r´   r´     sz   „ Ù(òò.ò!ó!òò òò
ò
òòð 37óaóFóò3ò8ò
8ó
óòóó
;r   r´   Ú__main__)+ÚDistUpgradeGettextr   r   r   Ú	telemetryr   rË   r]   Úenumr   rg   rj   r3   Úlocaler5   rw   rb   ÚDistUpgradeApportr   Ú	setlocaleÚLC_ALLÚgetdefaultlocaleÚcoderò   r~   Úputenvr
   re   ÚinfoÚ	getlocaler   r^   r_   r   r[   Úobjectr•   r�   r¦   r´   rV   ÚfprD   r@   r   r   ú<module>r)     s±  ðõ, -Ý (Ý +Û 
Ý Û Û 	Û Û Û Û Û å 0ðØ€F×Ñ�V—]‘] BÔ'Ø.�v×.Ñ.Ó0Ñ€Tˆ8ñ Ø€HØ€B‡I�Iˆj˜)Ô$ðØˆ×Ñ˜Ÿ™¨)Ô4ð €‡�Ð Ð#3 6×#3Ñ#3Ó#5Ñ5Ô 6òAôH2�c—l‘l×'Ñ'×7Ñ7ô 2ôl>%�c—l‘l×'Ñ'×7Ñ7ô >%ô@�6ô ô�Vô ô
ˆ4ô 
ñ ÐÓÙÐ#Ó$ÙÐÓÙÐÓÙ€MÓñ	ôz;�fô z;ðx ˆzÒÙÓ€"Ø‡(�(…*ð øðQØ€G×ÑÐ3Ô4ØƒHûð �<‰<ò Úðús   Á 1F Â	F* ÆF'Æ*F=Æ<F=