Ë
    J0mhÚ7 ã            	       óx  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddlm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&m'Z( ddl)m*Z* dZ+ejX                  j[                  d	d
«      Z.dZ/d„ Z0d&de1de2dz  de2dz  fd„Z3de1de2de2dz  fd„Z4de2de5e1e1f   fd„Z6de7fd„Z8ddœde9e1   de7de ddfd„Z:d„ Z;	 d'd„Z<ejz                   G d„ d«      «       Z> G d „ d!«      Z? G d"„ d#«      Z@ G d$„ d%e@«      ZAy)(zŽAbstract Apport user interface.

This encapsulates the workflow and common code for any user interface
implementation (like GTK, Qt, or CLI).
é    N)ÚSequence)Úgettext)ÚAny)Úimpl)Úget_process_user_and_groupz2.28.1ÚAPPORT_SYMPTOMS_DIRz/usr/share/apport/symptomsi    c                 ó®   — 	 t        j                  d| j                  dd«      «      j                  d«      }t	        |«      S # t
        t        f$ r Y yw xY w)zExtract process ID from report.z
Pid:	(.*)
Ú
ProcStatusÚ é   N)ÚreÚsearchÚgetÚgroupÚintÚ
IndexErrorÚAttributeError)ÚreportÚpids     ú+/usr/lib/python3/dist-packages/apport/ui.pyÚget_pidr   ?   sM   € ðÜ�i‰i˜¨¯
©
°<ÀÓ(DÓE×KÑKÈAÓNˆÜ�3‹xˆøÜœÐ'ò Ùðús   ‚?A ÁAÁAÚkeyÚdefaultÚreturnc                 ój   — 	 t        t        j                  |    «      S # t        t        f$ r |cY S w xY w)zµGet an environment variable as integer.

    Return None if it doesn't exist or failed to convert to integer.
    The optional second argument can specify an alternate default.
    )r   ÚosÚenvironÚKeyErrorÚ
ValueError)r   r   s     r   Ú_get_env_intr    H   s3   € ðÜ”2—:‘:˜c‘?Ó#Ð#øÜ”jÐ!ò ØŠðús   ‚ ž2±2ÚnameÚuidc           	      óÐ   — t        j                  ddddt        |«      | gddd¬«      }|j                  dk7  s|j                  sy t        |j                  j                  «       «      S )	NÚpgrepz-nz-xú-uTF)Úcapture_outputÚcheckÚtextr   )Ú
subprocessÚrunÚstrÚ
returncodeÚstdoutr   Ústrip)r!   r"   Úprocesss      r   Ú_get_newest_process_for_userr0   T   s^   € Ü�n‰nØ	�$˜˜d¤C¨£H¨dÐ3ØØØô	€Gð ×Ñ˜QÒ g§n¢nØÜˆw�~‰~×#Ñ#Ó%Ó&Ð&ó    c                 óÚ  — t        d| «      }|€i S t        j                  d|› �t        j                  t        j                  z  t        j
                  z  «      }	 t        j                  j                  |«      }	 t        j                  |«       dD �ci c]  }||v r|||   “Œ c}S # t        $ r i cY t        j                  |«       S w xY w# t        j                  |«       w xY wc c}w )zóFind D-BUS address and XDG_DATA_DIRS for the given user.

    The D-BUS address and XDG_DATA_DIRS is needed for xdg-open. It is
    incredibly hard, or alternatively, unsafe to funnel it through
    pkexec/env/sudo, so grab it from gvfsd.
    Úgvfsdú/proc/)ÚDBUS_SESSION_BUS_ADDRESSÚXDG_DATA_DIRS)r0   r   ÚopenÚO_RDONLYÚO_PATHÚO_DIRECTORYÚapportÚ	fileutilsÚget_process_environÚOSErrorÚclose)r"   Ú	gvfsd_pidÚgvfsd_pid_fdÚ	gvfsd_envr   s        r   Ú_get_users_environrC   `   sØ   € ô -¨W°cÓ:€IØÐØˆ	ä—7‘7Ø
��ÐœbŸk™k¬B¯I©IÑ5¼¿¹ÑFó€LðÜ×$Ñ$×8Ñ8¸ÓF‰	ô 	�‰�Ôð AöàØ�)Ñð 	ˆY�s‰^Ñòð øô ò Ø‰	ä
�‰�Õðûô 	�‰�Õüòs*   ÁB( ÂC(Â(CÂ3C Ã
CÃC ÃC%c                  ó”   — t        t        j                  j                  d«      xs t        j                  j                  d«      «      S )z:Check if a display server is specified in the environment.ÚDISPLAYÚWAYLAND_DISPLAY)Úboolr   r   r   © r1   r   Úhas_displayrI   |   s-   € ä”—
‘
—‘˜yÓ)ÒN¬R¯Z©Z¯^©^Ð<MÓ-NÓOÐOr1   F©Úget_user_envÚargsrK   Úkwargsc                ó<  — t        dt        d«      «      }|�t        «       j                  «       st        j                  | fddi|¤Ž yt        j                  |«      }t        d«      }|€|j                  }t        j                  j                  «       D ��ci c]  \  }}|j                  d«      s|dk7  r||“Œ  }}}|r|t        |«      z  }|j                  |d<   t        j                  | fd|||t        j                  |j                  |«      d	œ|¤Ž yc c}}w )
a`  Call subprocess.run as real user if called via sudo/pkexec.

    If we are called through pkexec/sudo, determine the real user ID and
    run the command with it to get the user's web browser settings.
    If get_user_env is set to True, the D-BUS address and XDG_DATA_DIRS
    is grabbed from a running gvfsd and added to the process environment.
    ÚSUDO_UIDÚ
PKEXEC_UIDNr'   FÚSUDO_GIDÚSUDO_ÚHOME)r'   ÚenvÚuserr   Úextra_groups)r    r   Úis_rootr)   r*   ÚpwdÚgetpwuidÚpw_gidr   r   ÚitemsÚ
startswithrC   Úpw_dirÚgetgrouplistÚpw_name)	rL   rK   rM   r"   ÚpwuidÚgidÚkÚvrT   s	            r   Úrun_as_real_userrd   �   s  € ô �z¤<°Ó#=Ó
>€CØ
€{Ô4Ó6×>Ñ>Ô@Ü�‰�tÑ3 5Ð3¨FÒ3Øä�L‰L˜Ó€Eä
�zÓ
"€CØ
€{Ø�l‰lˆô —J‘J×$Ñ$Ó&÷áˆAˆqØ�|‰|˜GÔ$¨¨lÒ):ð 	
ˆ1‰ð€Cñ ñ
 ØÔ! #Ó&Ñ&ˆØ—,‘,€Cˆ�Kä‡N�NØðàØØØÜ—_‘_ U§]¡]°CÓ8ñð óùós   Â#Dc                 ó´   — 	 t        j                  t        | «      d«       y# t        $ r,}|j                  t        j
                  k(  rY d}~yY d}~yd}~ww xY w)z8Check if the process with the given ID is still running.r   NFT)r   Úkillr   r>   ÚerrnoÚESRCH©r   Úerrors     r   Ústill_runningrk   ª   sK   € ðÜ
�‰”�C“˜!Ôð øô ò Ø�;‰;œ%Ÿ+™+Ò%Üó &àûðús   ‚" ¢	A«AÁAc                 ó€  — t        |t        «      sJ ‚	 | j                  «        | j	                  «        |r¯i }	 t        |d¬«      5 }t        t        |j                  «       |d«      |«       ddd«        |d   | |«      }|s!t        j                  j                  d|«       yt        j                  j                  t        j                  j                  |«      «      d   | d<   |s2d
| v r#t        j,                  j/                  | d
   «      }nt1        d«      ‚t        j,                  j3                  |«      }|r| j5                  |«       	 | j7                  |«       d| vrË| j?                  |«      rt#        j$                  d«       	 d| vr dt        j@                  vrŽd| vrd| vrtC        d«      | d<   nwtE        jF                  | d   jI                  «       d   «      sNtE        jJ                  | d   jI                  «       d   «      s%tC        d«      | d   jI                  «       d   z  | d<   d| vr| jM                  «       }
|
r|
| d<   | jO                  d«      dk(  rDdt        j@                  vr2| jQ                  «       }|r tC        d«      djS                  |«      z  | d<   |ru	 t        |d«      5 }t        jT                  |d«       | jW                  |d¬«       ddd«       t        j,                  jY                  |«       t        jT                  |d«       yy# t        $ r Y �Œÿw xY w# 1 sw Y   �Œ½xY w# t         $ r t#        j$                  d«       Y �Œpt&        $ rM t        j                  j                  d	|«       t)        j*                  «        t#        j$                  d«       Y �ŒÄw xY w# t8        $ r |sd| vr‚ Y �Œct:        $ r}	t=        |	«      | d<   Y d}	~	�Œd}	~	ww xY w# t8        $ r |sd| vr‚ Y �ŒËw xY w# 1 sw Y   �Œ%xY w# t        $ r,}	t        j                  j                  d||	«       Y d}	~	�ŒXd}	~	ww xY w)ay  Collect information about report.

    Encapsulate calls to add_*_info() and update given report, so that this
    function is suitable for threading.

    ui must be a HookUI instance, it gets passed to add_hooks_info().

    If reportfile is not None, the file is written back with the new data.

    If symptom_script is given, it will be run first (for run_symptom()).
    úutf-8©ÚencodingÚexecNr*   z8symptom script %s did not determine the affected packager   ÚSymptomzsymptom script %s crashed:ÚExecutablePathzAcalled without a package, and report does not have ExecutablePathÚSnapÚUnreportableReasonÚCrashDBÚAPPORT_DISABLE_DISTRO_CHECKÚPackagez4This package does not seem to be installed correctlyz½This does not seem to be an official %s package. Please retry after updating the indexes of available packages, if that does not work then remove related third party packages and try again.ÚDistroReleaseÚTitleÚProblemTypeÚCrashÚAPPORT_IGNORE_OBSOLETE_PACKAGESzƒYou have some obsolete package versions installed. Please upgrade the following packages and check if the problem still occurs:

%sz, ÚabT)Úonly_newzCannot update %s: %si   )-Ú
isinstanceÚHookUIÚadd_gdb_infor>   Úadd_os_infor7   rp   ÚcompileÚreadr;   Úloggingrj   r   ÚpathÚsplitextÚbasenameÚStopIterationÚsysÚexitÚ	ExceptionÚ	tracebackÚ	print_excr<   Úfind_file_packager   Ú	find_snapÚadd_snap_infoÚadd_package_infor   ÚSystemErrorr+   Úadd_hooks_infor   Ú_Ú	packagingÚis_distro_packageÚsplitÚis_native_origin_packageÚstandard_titler   Úobsolete_packagesÚjoinÚchmodÚwriteÚmark_report_seen)r   Ú
reportfileÚpackageÚuiÚsymptom_scriptÚignore_uninstalledÚsymbÚfÚsnaprj   ÚtitleÚold_pkgss               r   Úthread_collect_inforª   ´   s  € ô  �bœ&Ô!Ð!Ð!ðØ×ÑÔð
 ×ÑÔáØˆð	Ü�n¨wÔ7ð F¸1ä”W˜QŸV™V›X ~°vÓ>ÀÔE÷Fð "�d˜5‘k &¨"Ó-ˆGÙÜ—‘×$Ñ$ØNØ"ôð Ü "§¡× 0Ñ 0´·±×1AÑ1AÀ.Ó1QÓ RÐSTÑ UˆF�9Ññ Ø˜vÑ%Ü×&Ñ&×8Ñ8¸Ð@PÑ9QÓR‰GäØSóð ô
 ×Ñ×%Ñ% gÓ.€DÙØ×Ñ˜TÔ"ð
2Ø×Ñ Ô(ð  6Ñ)Ø× Ñ  Ô$Ü�H‰H�QŒKð	à Ñ'Ø1¼¿¹ÑCà FÑ*¨v¸VÑ/CÜ34ØNó4�FÐ/Ò0ô #×4Ñ4Ø˜9Ñ%×+Ñ+Ó-¨aÑ0ôä#×<Ñ<Ø˜9Ñ%×+Ñ+Ó-¨aÑ0ôô
 ð.óð ! Ñ1×7Ñ7Ó9¸!Ñ<ñ=ð Ð/Ñ0ð& �fÑØ×%Ñ%Ó'ˆÙØ#ˆF�7‰Oð 	�
‰
�=Ó! WÒ,Ø-´R·Z±ZÑ?à×+Ñ+Ó-ˆÙÜ+,ð@ó,ð —	‘	˜(Ó#ñ	,$ˆFÐ'Ñ(ñ ð		LÜ�j $Ó'ð /¨1Ü—‘˜ QÔ'Ø—‘˜Q¨�Ô.÷/ô 	×Ñ×)Ñ)¨*Ô5Ü
�‰�˜UÕ#ð øô] ò ò 	ðú÷Fñ Fûô ò 	Ü�H‰H�Q�KÜò 	Ü�N‰N× Ñ Ð!=¸~ÔNÜ×ÑÔ!Ü�H‰H�Q�Kð	ûô( ò ñ
 " f°FÑ&:ØúÜò 2Ü'*¨5£zˆÐ#×$ûð2ûôD ò 	ñ
 &¨&¸Ñ*>Øúð	ú÷:/ñ /ûô ò 	Lô
 �N‰N× Ñ Ð!7¸ÀU×KÒKûð	Lús©   ”L ¹L4 Á&L'Á,6L4 Â#AL4 ÅN- ÆB$O$ Ê"P Ê.*O;ËP Ì	L$Ì#L$Ì'L1Ì,L4 Ì4N*ÍAN*Î)N*Î-O!Ï O!ÏOÏO!Ï$O8Ï7O8Ï;PÐ P Ð	P=Ð!P8Ð8P=c                   óX   — e Zd ZU dZdZeed<   dZeed<   dZeed<   dZ	eed<   dZ
eed<   y)	ÚActionzÖAction to take on a problem report.

    Possible actions: examine the crash ('examine'), report the crash
    ('report'), restart the crashed application ('restart'), or ignore further
    crashes ('ignore').
    FÚexamineÚignoreÚrememberr   ÚrestartN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r­   rG   Ú__annotations__r®   r¯   r   r°   rH   r1   r   r¬   r¬   E  s;   … ñð €GˆTÓØ€FˆDÓØ€HˆdÓØ€FˆDÓØ€GˆTÔr1   r¬   c                   óø  — e Zd ZdZdee   fd„Zd„ Zd„ Ze	d„ «       Z
d„ Ze	d„ «       Ze	d	„ «       Zd8ded
z  defd„Zdefd„Zd„ Zd„ Zd„ Ze	dee   dej,                  fd„«       Zdee   dej,                  fd„Ze	d„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zdedd
fd„Zd„ Z 	 d9d„Z!d„ Z"d„ Z#d „ Z$d!„ Z%d"„ Z&d#„ Z'd$„ Z(d%„ Z)	 d:d&ed'e*d
z  de+fd(„Z,d)„ Z-d*„ Z.d+„ Z/d,„ Z0d-„ Z1d.„ Z2d/e3d
z  dd
fd0„Z4d1„ Z5d2„ Z6d3„ Z7d4„ Z8d5„ Z9d6„ Z:d7„ Z;y
);ÚUserInterfacea  Apport user interface API.

    This provides an abstract base class for encapsulating the workflow and
    common code for any user interface implementation (like GTK, Qt, or CLI).

    A concrete subclass must implement all the abstract ui_* methods.
    Úargvc                 óê  — d| _         d| _        d| _        d| _        d| _        d| _        d| _        	 t        j                  j                  d«      | _        t        j                   | j                   «       | j#                  |«      | _        y# t        $ r3}t        j                  j                  dt        |«      «       Y d}~Œmd}~wt        $ r" t        j                  j                  d«       Y Œšw xY w)z8Initialize program state and parse command line options.r;   NFzDCould not import module, is a package upgrade in progress? Error: %sz8/etc/apport/crashdb.conf is damaged: No default database)Úgettext_domainr   Úreport_fileÚcur_packageÚoffer_restartÚspecified_a_pkgÚupload_progressr;   ÚcrashdbÚget_crashdbÚImportErrorr…   Úfatalr+   r   r   Ú
textdomainÚ
parse_argvrL   )Úselfr¸   rj   s      r   Ú__init__zUserInterface.__init__`  sÎ   € à&ˆÔØ37ˆŒØ'+ˆÔØˆÔØ"ˆÔØ$ˆÔØ#ˆÔð	Ü!Ÿ>™>×5Ñ5°dÓ;ˆDŒLô 	×Ñ˜4×.Ñ.Ô/Ø—O‘O DÓ)ˆ�	øô ò 	ä�N‰N× Ñ ðä�E“
÷ñ ûô
 ò 	Ü�N‰N× Ñ ØJöð	ús   ³$B Â	C2Â)CÃ+C2Ã1C2c                 ó|  — d}d| _         t        j                  «       dk(  rt        j                  j                  «       }nt        j                  j                  «       }|D ]Y  }| j                  |«      sŒ| j                  sJ ‚| j                  d   dk(  r| j                  |«       n| j                  |«       d}Œ[ |S )aæ  Present all currently pending crash reports.

        Ask the user what to do about them, and offer to file bugs for them.

        Crashes that occurred in a different desktop (logind) session than the
        one that is currently running are not processed. This skips crashes
        that happened during logout, which are uninteresting and confusing to
        see at the next login.

        Return True if at least one crash report was processed, False
        otherwise.
        FTr   rz   ÚHang)r½   r   Úgeteuidr;   r<   Úget_new_system_reportsÚget_new_reportsÚload_reportr   Úfinish_hangÚ	run_crash)rÆ   ÚresultÚreportsr¦   s       r   Úrun_crasheszUserInterface.run_crashes  s¬   € ð ˆð "ˆÔä�:‰:‹<˜1ÒÜ×&Ñ&×=Ñ=Ó?‰Gä×&Ñ&×6Ñ6Ó8ˆGàò 		ˆAØ×#Ñ# AÔ&ØØ—;’;Ð�;à�{‰{˜=Ñ)¨VÒ3Ø× Ñ  Õ#à—‘˜qÔ!Ø‰Fð		ð ˆr1   c                 óP  — || _         	 	 t        j                  j                  |«       | j
                  s| j                  |«      sy| j
                  sJ ‚d| j
                  v ry| j
                  j                  d«      dk(  r©d| j
                  v r›d| j
                  vr�d| j
                  vrt        j                  j                  | j
                  j                  dt        d	«      «      «      }t        d
«      |z  }t        d«      }| j                  t        d«      |z  |› d|› �«       yt        j                  j                  «       }| j                  |«      }|j
                  s|j                  rd| j
                  vr| j!                  «        | j
                  €y|j                  r| j                  «        y|j"                  r| j#                  «        |j$                  r| j
                  j'                  «        	 |j(                  r| j+                  |j
                  «       |j
                  syd| j
                  v r1| j
                  d   dk7  rt        j                  j/                  |«       | j0                  j3                  | j
                  «      r3| j5                  «       ry| j7                  «       ry| j9                  «        yy# t        $ r Y �Œ¬w xY w# t,        $ r Y ŒÀw xY w# t:        $ r< | j                  t        d«      t        d«      «       t=        j>                  d«       Y yt        $ rñ}|j@                  t@        jB                  k(  r t        jD                  jG                  d«       ‚ |j@                  t@        jH                  k(  r:| j                  t        d«      t        d«      «       t=        j>                  d«       ‚ |j@                  t@        jJ                  k(  r:| j                  t        d«      |jL                  «       t=        j>                  d«       ‚ d}~ww xY w)zþPresent and report a particular crash.

        If confirm is True, ask the user what to do about it, and offer to file
        a bug for it.

        If confirm is False, the user will not be asked, and the crash is
        reported right away.
        NÚIgnorerz   r{   ÚSignalÚCoreDumpÚ
Stacktracerr   zunknown programz+Sorry, the program "%s" closed unexpectedlyzxYour computer does not have enough free memory to automatically analyze the problem and send a report to the developers.úProblem in %sú

Ú_MarkForUploadÚFalseúInvalid problem reportz2You are not allowed to access this problem report.r   zOut of memory, abortingÚErrorz@There is not enough disk space available to process this report.)'r»   r;   r<   rŸ   r>   r   rÍ   r   r   r†   rˆ   r•   Úui_error_messageÚallowed_to_reportÚui_present_report_detailsr­   Úcollect_infor°   r®   Úmark_ignorer¯   Úremember_send_reportr   Úmark_report_uploadrÀ   ÚacceptsÚhandle_duplicateÚcheck_unreportableÚfile_reportÚPermissionErrorrŠ   r‹   rg   ÚENOMEMr…   rÃ   ÚENOSPCÚEIOÚstrerror)rÆ   r»   ÚsubjectÚheadingÚfooterrß   Úresponserj   s           r   rÏ   zUserInterface.run_crash£  sq  € ð 'ˆÔðj	ðÜ× Ñ ×1Ñ1°+Ô>ð
 —;’; t×'7Ñ'7¸Ô'DØØ—;’;Ð�;à˜4Ÿ;™;Ñ&Øð —‘—‘ Ó.°'Ò9Ø §¡Ñ+Ø d§k¡kÑ1Ø ¨¯©Ñ3äŸ'™'×*Ñ*Ø—K‘K—O‘OÐ$4´aÐ8IÓ6JÓKó�ô ÐIÓJÈWÑT�Üð;ó�ð
 ×%Ñ%Ü�oÓ&¨Ñ0°W°I¸TÀ&ÀÐ2Jôð ä &× 0Ñ 0× BÑ BÓ DÐØ×5Ñ5Ð6GÓHˆHØ�Š (×"2Ò"2Ø#¨4¯;©;Ñ6Ø×%Ñ%Ô'à�{‰{Ð"àà×ÒØ—‘”ØØ×ÒØ—‘”Ø�ŠØ—‘×'Ñ'Ô)ðØ×$Ò$Ø×-Ñ-¨h¯o©oÔ>ð —?’?Øð ! D§K¡KÑ/Ø—K‘KÐ 0Ñ1°WÒ<ä× Ñ ×3Ñ3°KÔ@ð �|‰|×#Ñ# D§K¡KÔ0ð ×(Ñ(Ô*ØØ×*Ñ*Ô,ØØ× Ñ Õ"ð 1øôO ò ò ðûôn ò Ùðûô6 ò 	Ø×!Ñ!ÜÐ*Ó+ÜÐFÓGôô �H‰H�QŽKÜò 	Ø�{‰{œeŸl™lÒ*Ü—‘×$Ñ$Ð%>Ô?ð ð —‘¤§¡Ò,Ø×%Ñ%Ü�g“JÜð=óôô —‘˜”ð ð —‘¤§	¡	Ò)Ø×%Ñ%¤aÐ(@Ó&AÀ5Ç>Á>ÔRÜ—‘˜”Øûð	ús”   ŠK	 ©K( ÁK( Á$CK( Ä+A1K( ÆK( Æ:AK( Ç='K È$K( È1A4K( Ê&K( Ê7K( Ë		KËK( ËKËK( Ë	K%Ë"K( Ë$K%Ë%K( Ë(AP%Ì,P%Ì4C,P Ð P%c                 ó€   — t         j                  j                  | «       t         j                  j                  | «       y)z¼Finish processing a hanging application after the core pipe handler
        has handed the report back.

        This will signal to whoopsie that the report needs to be uploaded.
        N)r;   r<   rä   rŸ   )r¦   s    r   rÎ   zUserInterface.finish_hang  s,   € ô 	×Ñ×+Ñ+¨AÔ.Ü×Ñ×)Ñ)¨!Õ,r1   c                 ó
  — t        j                  d«      | _        | j                  j                  s%| j                  t        d«      t        d«      «       y	 | j                  j                  |«       | j                  j                  «        | j                  j                  dd«      }t         j                  j                  |«      | _        | j                  j#                  «        t         j                  j%                  «       }| j'                  |t)        |«      ¬«      }|j                  rXt         j                  j+                  | j                  |«       t-        j.                  t)        |«      t0        j2                  «       n-t-        j.                  t)        |«      t0        j4                  «       |j6                  r!| j9                  |«       | j7                  «        y# t        $ rš}t        |«      dk(  r:| j                  t        d«      t        d«      «       t        j                  d«       nGt        |«      d	k(  r9| j                  t        d
«      t        d«      «       t        j                  d«       Y d}~�Œd}~ww xY w)aï  Report an application hanging.

        This will first present a dialog containing the information it can
        collect from the running application (everything but the trace) with
        the option of terminating or restarting the application, optionally
        reporting that this error occurred.

        A SIGABRT will then be sent to the process and a series of
        noninteractive processes will collect the remaining information and
        mark the report for uploading.
        rÉ   zNo PID specifiedz;You need to specify a PID. See --help for more information.Fzinvalid processúInvalid PIDz(The specified process ID does not exist.r   znot accessiblezNot your PIDz0The specified process ID does not belong to you.Nrr   r   )Ú	modal_forT)r;   ÚReportr   rL   r   rÞ   r•   Úadd_proc_infor   r+   rŠ   r‹   r’   r   r<   r�   r¼   r‚   rß   rà   r   Úmark_hanging_processr   rf   ÚsignalÚSIGABRTÚSIGKILLr°   Úwait_for_pid)rÆ   r   rj   r†   rß   rñ   s         r   Úrun_hangzUserInterface.run_hang'  sÏ  € ô —m‘m FÓ+ˆŒà�y‰y�}Š}Ø×!Ñ!ÜÐ$Ó%ÜÐOÓPôð ð	Ø�K‰K×%Ñ% cÔ*ð 	�‰×$Ñ$Ô&Ø�{‰{�‰Ð/°Ó4ˆÜ!×+Ñ+×=Ñ=¸dÓCˆÔØ�‰×ÑÔ!Ü"×,Ñ,×>Ñ>Ó@ÐØ×1Ñ1Ð2CÌsÐSVËxÐ1ÓXˆØ�?Š?Ü×Ñ×1Ñ1°$·+±+¸sÔCÜ�G‰G”C˜“HœfŸn™nÕ-ä�G‰G”C˜“HœfŸn™nÔ-à×ÒØ×Ñ˜cÔ"Ø�L‰LŒNØøô7 ò 	Ü�5‹zÐ.Ò.Ø×%Ñ%Ü�mÓ$¤aÐ(RÓ&Sôô —‘˜•Ü�U“Ð/Ò/Ø×%Ñ%Ü�nÓ%ÜÐHÓIôô —‘˜”ÿùð	ús   ÁG Ç	JÇ(BI=É=Jc                 óØ   — 	 	 t        j                  t        | «      d«       t        j                  d«       Œ6# t        $ r(}|j                  t        j
                  k(  rY d}~y‚ d}~ww xY w)zƒwaitpid() does not work for non-child processes. Query the process
        state in a loop, waiting for "no such process."
        r   Nr   )r   rf   r   r>   rg   rh   ÚtimeÚsleepri   s     r   rü   zUserInterface.wait_for_pid[  sX   € ð
 ðÜ—‘œ˜C› !Ô$ô
 �J‰J�qŒMð øô ò Ø—;‘;¤%§+¡+Ò-ÜØûðús   ƒ8 ¸	A)ÁA$Á#A$Á$A)c                 ó^   — t        j                  t        | «      t        j                  «       y)z!Kill process with signal SIGSEGV.N)r   rf   r   rù   ÚSIGSEGV)r   s    r   Ú	kill_segvzUserInterface.kill_segvi  s   € ô 	�‰”�C“œ&Ÿ.™.Õ)r1   Nr£   r   c                 óì
  — | j                   j                  sN| j                   j                  s8|s6| j                  «       ry| j	                  t        d«      t        d«      «       yt        j                  d«      | _        | j                   j                  �r	 t        j                  d| j                   j                  › �t        j                  t        j                  z  t        j                  z  «      }t        j                  dt        j                  |¬«      }t        j                  |d	¬
«      5 }|j                  «       j!                  «       }ddd«       t#        d   «      }|t$        z  rd| j                   _        n1| j                  j'                  | j                   j                  |¬«       n| j                  j5                  «        | j                   j                  r3| j                   j                  j7                  «       | j                   _        | j                   j                  dk(  rt9        j:                  «       | _        n| j                   j                  | _        	 | j?                  |«       | jC                  «       ry| jE                  «        | jG                  «       ry	 | j                  d= | j                   jJ                  râ	 t        jL                  jO                  | j                   jJ                  «      }|jQ                  d«      r;tS        j                  |d«      5 }| j                  jU                  |«       ddd«       nat        t        jL                  jO                  | j                   jJ                  «      d«      5 }| j                  jU                  |«       ddd«       yd}	| jW                  |	«      }
|
j                  r| jY                  «        y# 1 sw Y   �Œ�xY w# t(        $ r' | j	                  t        d«      t        d«      «       Y yt*        t,        f$ rQ}t/        |dd«      t0        j2                  k(  rY d}~y| j	                  t        d«      t        d«      «       Y d}~yd}~ww xY w# t*        $ rŠ}dtA        |«      v rwdtA        |«      v rj| j<                  s(| j	                  t        d«      t        d«      |z  «       n1| j	                  t        d«      t        d«      | j<                  z  «       Y d}~y‚ d}~ww xY w# tH        $ r Y �Œhw xY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒŒxY w# t,        $ r.}| j	                  t        d«      tA        |«      «       Y d}~yd}~ww xY w)a@  Report a bug.

        If a pid is given on the command line, the report will contain runtime
        debug information. Either a package or a pid must be specified; if none
        is given, show a list of symptoms.

        If a symptom script is given, this will be run first (used by
        run_symptom()).
        TzNo package specifiedzHYou need to specify a package or a PID. See --help for more information.FÚBugr4   Ústat)Údir_fdrm   rn   Né   Úlinux)r   Úproc_pid_fdzPermission deniedzfThe specified process does not belong to you. Please run this program as the process owner or as root.rg   rô   z6The specified process ID does not belong to a program.r¡   zdoes not existrÜ   z7Symptom script %s did not determine an affected packagezPackage %s does not existÚProcCmdlinez.gzÚwbúCannot create report)-rL   r¡   r   Úrun_symptomsrÞ   r•   r;   rö   r   r   r7   r8   r9   r:   Úior„   r˜   r   Ú
PF_KTHREADr÷   ré   r   r>   Úgetattrrg   ÚENOENTÚadd_proc_environr.   r–   Úget_kernel_packager¼   rá   r+   rç   Úadd_extra_tagsræ   r   Úsaver†   Ú
expanduserÚendswithÚgziprž   rà   rè   )rÆ   r£   r
  Ú	stat_filer¦   r  Úflagsrj   Úsavefilerß   rñ   s              r   Úrun_report_bugzUserInterface.run_report_bugn  s\  € ð �y‰y× Ò ¨¯©¯ª¹~Ø× Ñ Ô"Øà×!Ñ!ÜÐ(Ó)Üð8óôð ä—m‘m EÓ*ˆŒð �9‰9�=‹=ð!Ü Ÿg™gØ˜TŸY™YŸ]™]˜OÐ,¬b¯k©k¼B¿I¹IÑ.EÌÏÉÑ.Vó�ô ŸG™G F¬B¯K©KÀÔL�	Ü—W‘W˜Y°Ô9ð ,¸QØŸ6™6›8Ÿ>™>Ó+�D÷,ä˜D ™G›�Øœ:Ò%à(/�D—I‘IÕ%à—K‘K×-Ñ-Ø ŸI™IŸM™M°{ð .ô øð. �K‰K×(Ñ(Ô*à�9‰9×ÒØ $§	¡	× 1Ñ 1× 7Ñ 7Ó 9ˆD�I‰IÔà�9‰9×Ñ Ò'Ü(×;Ñ;Ó=ˆDÕà#Ÿy™y×0Ñ0ˆDÔð	Ø×Ñ˜nÔ-ð" ×"Ñ"Ô$Øà×ÑÔà× Ñ Ô"Øð	Ø—‘˜MÐ*ð �9‰9�>Š>ð	MÜŸ7™7×-Ñ-¨d¯i©i¯n©nÓ=�Ø×$Ñ$ UÔ+ÜŸ™ 8¨TÓ2ð -°aØŸ™×)Ñ)¨!Ô,÷-ð -ô œbŸg™g×0Ñ0°·±·±Ó@À$ÓGð -È1ØŸ™×)Ñ)¨!Ô,÷-ð ð !%ÐØ×5Ñ5Ð6GÓHˆHØ�ŠØ× Ñ Ô"à÷u,ñ ,ûô #ò Ø×%Ñ%ÜÐ)Ó*ÜðMóôñ Ü¤Ð(ò 	Ü˜5 '¨4Ó0´E·L±LÒ@ô !Ø×%Ñ%Ü�mÓ$ÜÐNÓOôô ûð	ûô. ò 	ØœC ›JÑ&Ð+;¼sÀ5»zÑ+IØ×'Ò'Ø×)Ñ)ÜÐ2Ó3ÜÐSÓTØ(ñ)õð ×)Ñ)ÜÐ2Ó3ÜÐ5Ó6¸×9IÑ9IÑIôô Øûð	ûô6 ò 	Úð	ú÷-ñ -ú÷-ñ -ûäò MØ×%Ñ%¤aÐ(>Ó&?ÄÀUÃ×LÐLð ûðMús¹   ÂBO+ Ä1OÅA"O+ É%Q< Ê)T ËAT< Ì'T"ÍAT< Î	T/Î%T< ÏO(Ï#O+ Ï+-Q9ÐQ9Ð(Q4Ñ$Q4Ñ4Q9Ñ<	TÒA?T
Ô	T
Ô
TÔ	TÔTÔ"T,Ô'T< Ô/T9Ô4T< Ô<	U3Õ$U.Õ.U3c           
      óZ  — | j                   j                  | j                  j                  «      s%| j	                  t        d«      t        d«      «       y| j                   j                  | j                  j                  «      }|s| j                  t        d«      «      }|syt        j                  d«      | _
        | j                  j                  r&| j                  j                  j                  «       g}n/| j                   j                  | j                  j                  «      }d}|D ]Q  }|| _        || j                  d<   || j                  d<   	 t        j                   |«       | j1                  d¬«       d}ŒS |s%| j3                  t        d«      t        d«      «       y| j                  j5                  «        | j                  j7                  «        | j9                  «        | j                  d= 	 | j                  d= t=        | j                  «      dk(  r%| j3                  t        d«      t        d«      «       yd}| j?                  |«      }|j                  r?| j                   jA                  | j                  j                  | j                  d|d¬«       yy# t"        $ ro t$        j&                  j)                  t$        j&                  j+                  t        j                  j,                  d|› d	�«      «      st/        d
|› d�«       Y �ŒêY �Œ¯w xY w# t:        $ r Y �Œ#w xY w)z:Update an existing bug with locally collected information.zUpdating problem reportzžYou are not the reporter or subscriber of this problem report, or the report is a duplicate or already closed.

Please create a new report using "apport-bug".FaH  You are not the reporter of this problem report. It is much easier to mark a bug as a duplicate of another than to move your comments and attachments to a new bug.

Subsequently, we recommend that you file a new bug report using "apport-bug" and make a comment in this bug about the one you file.

Do you really want to proceed?r  ÚSourcePackagerw   Úsource_ú.pyzPackage z. not installed and no hook available, ignoringT)r¤   z$No additional information collected.ÚDater   zapport information)Úchange_descriptionÚattachment_comment)!rÀ   Ú
can_updaterL   Úupdate_reportrÞ   r•   Úis_reporterÚui_question_yesnor;   rö   r   r¡   r.   Úget_affected_packagesr¼   r–   Úget_versionr   r   r†   Úexistsrœ   ÚPACKAGE_HOOK_DIRÚprintrá   Úui_info_messageÚadd_user_infor  r  r   Úlenrà   Úupdate)rÆ   r'  ÚrÚpkgsÚinfo_collectedÚprß   rñ   s           r   Úrun_update_reportzUserInterface.run_update_reportí  sÉ  € ð �|‰|×&Ñ& t§y¡y×'>Ñ'>Ô?Ø×!Ñ!ÜÐ+Ó,ÜðPóôð à—l‘l×.Ñ.¨t¯y©y×/FÑ/FÓGˆáØ×&Ñ&ÜðPóó	ˆAñ Øô —m‘m EÓ*ˆŒØ�9‰9×ÒØ—I‘I×%Ñ%×+Ñ+Ó-Ð.‰Dà—<‘<×5Ñ5°d·i±i×6MÑ6MÓNˆDàˆØò 	"ˆAà ˆDÔØ+,ˆD�K‰K˜Ñ(Ø%&ˆD�K‰K˜	Ñ"ðÜ×%Ñ% aÔ(ð ×Ñ°ÐÔ6Ø!‰Nð#	"ñ& Ø× Ñ ÜÐ+Ó,¬aÐ0VÓ.Wôð à�‰×!Ñ!Ô#Ø�‰×$Ñ$Ô&Ø×ÑÔð �K‰K˜Ðð	Ø—‘˜OÐ,ô ˆt�{‰{Ó˜qÒ Ø× Ñ ÜÐ+Ó,¬aÐ0VÓ.Wôð ð !ÐØ×1Ñ1Ð2CÓDˆØ�?Š?Ø�L‰L×ÑØ—	‘	×'Ñ'Ø—‘Ø$Ø#.Ø#7ð  ô ð àøô[ ò Ü—w‘w—~‘~Ü—G‘G—L‘L¤§¡×!?Ñ!?À7È1È#ÈSÐAQÓRôô ˜H Q CÐ'UÐVÔWÚò	ðûô. ò 	Úð	ús%   ÅJ"Ç9L Ê"A1LÌLÌ	L*Ì)L*c           	      óN  — t        j                   t        j                  j                  t        d«      «      }g }|D ]ö  }t        j                  j                  |«      j                  d«      rŒ2i }	 t        |d¬«      5 }t        t        |j                  «       |d«      |«       ddd«       d|vr!t        j                  j                  d	|«       Œ•t        j                  j#                  t        j                  j                  |«      «      d
   }|j%                  |j'                  d|«      |f«       Œø |sy|j)                  «        |j%                  d«       | j+                  t-        d«      |D ��cg c]  \  }}|‘Œ	 c}}d«      }	|	�E||	d
      d   }
|
r7| j/                  t        j                  j                  t        |
dz   «      «       yyy# 1 sw Y   �Œ.xY w# t        $ r8 t        j                  j                  d|«       t        j                   «        Y �Œáw xY wc c}}w )zlReport a bug from a list of available symptoms.

        Return False if no symptoms are available.
        z*.pyr•   rm   rn   rp   Nzsymptom script %s is invalidr*   z0symptom script %s does not define run() functionr   ÚdescriptionF)zOther problemNz+What kind of problem do you want to report?r   r!  T)Úglobr   r†   rœ   Úsymptom_script_dirrˆ   r\   r7   rp   rƒ   r„   rŒ   r;   r…   rj   r�   rŽ   r‡   Úappendr   ÚsortÚui_question_choicer•   r  )rÆ   ÚscriptsÚsymptomsÚscriptr¥   r¦   Úsymptom_namer8  r!   ÚchÚsymptoms              r   r  zUserInterface.run_symptomsL  sÝ  € ô
 —)‘)œBŸG™GŸL™LÔ);¸VÓDÓEˆð ˆØò 	SˆFä�w‰w×Ñ Ó'×2Ñ2°3Ô7ØØˆDðÜ˜&¨7Ô3ð B°qäœ §¡£¨6°6Ó:¸DÔA÷Bð ˜DÑ Ü—‘×$Ñ$ØFÈôð ÜŸ7™7×+Ñ+¬B¯G©G×,<Ñ,<¸VÓ,DÓEÀaÑHˆLØ�O‰O˜TŸX™X m°\ÓBÀLÐQÕRð'	Sñ* Øà�‰ŒØ�‰Ð/Ô0à×$Ñ$ÜÐ;Ó<Ø2:×;Ñ.˜[¨$Š[Ó;Øó
ˆð ˆ>Ø˜r !™u‘o aÑ(ˆGÙØ×#Ñ#¤B§G¡G§L¡LÔ1CÀWÈuÁ_Ó$UÔVð ð à÷EBñ Bûô ò Ü—‘×$Ñ$Ð%CÀVÔLÜ×#Ñ#Ô%Úðüó( <s0   Á1GÁ>&GÂ$GÅ3H!ÇG	ÇGÇ=HÈHc                 óR  — t         j                  j                  t        | j                  j
                  dz   «      }t         j                  j                  |«      s<| j                  t        d«      t        d«      | j                  j
                  z  «       y| j                  |«       y)z#Report a bug with a symptom script.r!  zUnknown symptomzThe symptom "%s" is not known.N)
r   r†   rœ   r:  rL   rC  r+  rÞ   r•   r  )rÆ   r@  s     r   Úrun_symptomzUserInterface.run_symptom  sx   € ä—‘—‘Ô0°$·)±)×2CÑ2CÀeÑ2KÓLˆÜ�w‰w�~‰~˜fÔ%Ø×!Ñ!ÜÐ#Ó$ÜÐ2Ó3°d·i±i×6GÑ6GÑGôð à×Ñ˜FÕ#r1   c                 óœ  — | j                   j                  r| j                  «        y| j                   j                  r&| j	                  | j                   j
                  «       y| j                   j                  r| j                  «       S | j                   j                  �| j                  «       S | j                   j                  rt        t        «       y| j                   j                  r'	 | j                  | j                   j                  «       y| j                   j&                  �r't)        j*                  d«      dk(  r%| j!                  t#        d«      t#        d«      «       y| j-                  dt#        d	«      «       t/        j0                  d
dgdt.        j2                  t.        j2                  ¬«      }|j4                  dk(  rF	 t7        |j8                  j;                  «       d   «      | j                   _        | j                  «       S | j!                  t#        d«      t#        d«      dz   |j>                  jA                  «       z   «       y| jC                  «       S # t        $ r.}| j!                  t#        d«      t%        |«      «       Y d}~yd}~ww xY w# t<        $ r' | j!                  t#        d«      t#        d«      «       Y yw xY w)z¨Call appropriate run_* method according to command line arguments.

        Return True if at least one report has been processed, and False
        otherwise.
        TNrÜ   ÚXDG_SESSION_TYPEÚwaylandr  a<  The window option cannot be used on Wayland.

Please find the window's process ID and then run 'ubuntu-bug <process ID>'.

The process ID can be found by running the System Monitor application. In the Processes tab, scroll until you find the correct application. The process ID is the number listed in the ID column.r   z^After closing this message please click on an application window to report a problem about it.ÚxpropÚ_NET_WM_PIDF)r'   r-   Ústderrr   éÿÿÿÿz2xprop failed to determine process ID of the windowrÙ   )"rL   rC  rE  Úhangingrý   r   Úfilebugr  r&  r6  Úversionr-  Ú__version__Ú
crash_filerÏ   r>   rÞ   r•   r+   Úwindowr   Úgetenvr.  r)   r*   ÚPIPEr,   r   r-   r˜   r   rK  ÚdecoderÒ   )rÆ   rj   rI  s      r   Úrun_argvzUserInterface.run_argv‹  sZ  € ð �9‰9×ÒØ×ÑÔØØ�9‰9×ÒØ�M‰M˜$Ÿ)™)Ÿ-™-Ô(ØØ�9‰9×ÒØ×&Ñ&Ó(Ð(Ø�9‰9×"Ñ"Ð.Ø×)Ñ)Ó+Ð+Ø�9‰9×ÒÜ”+ÔØØ�9‰9×ÒðOØ—‘˜tŸy™y×3Ñ3Ô4ð Ø�9‰9×ÓÜ�y‰yÐ+Ó,°	Ò9Ø×%Ñ%ÜÐ,Ó-ÜðDó
ôð à× Ñ ØÜðHóôô —N‘NØ˜-Ð(ØÜ!—‘Ü!—‘ô	ˆEð ×Ñ 1Ò$ð Ü$'¨¯©×(:Ñ(:Ó(<¸RÑ(@Ó$A�D—I‘I”Mð ×*Ñ*Ó,Ð,à×!Ñ!ÜÐ(Ó)ÜÐFÓGØñà—,‘,×%Ñ%Ó'ñ(ôð à×ÑÓ!Ð!øôk ò OØ×%Ñ%¤aÐ(@Ó&AÄ3ÀuÃ:×NÐNØûðOûôJ "ò  Ø×)Ñ)ÜÐ0Ó1ÜÐNÓOôñ  ð ús*   Ã-%I! Ç	5J É!	JÉ*$JÊJÊ-KË
Kc           	      óZ  — t        j                  t        d«      ¬«      }|j                  ddt        d«      ¬«       |j                  ddg d	t        d
«      ¬«       |j                  ddt        ¬«       |j                  | dd «      }d|_        d|_        d|_        d|_	        d|_
        |S )z=Parse command line options when being invoked in update mode.z%(prog)s <report number>©Úusageú-pú	--packagezSpecify package name.©Úhelpú--tagr;  Útagsú@Add an extra tag to the report. Can be specified multiple times.©Úactionr   Údestr]  r&  Úreport_number)ÚmetavarÚtyper   NF)ÚargparseÚArgumentParserr•   Úadd_argumentr   Ú
parse_argsrC  rN  rQ  rO  rM  )r¸   ÚparserrL   s      r   Úparse_argv_updatezUserInterface.parse_argv_updateÞ  s²   € ô ×(Ñ(¬qÐ1KÓ/LÔMˆØ×Ñ˜D +´AÐ6MÓ4NÐÔOØ×ÑØØØØÜÐUÓVð 	ô 	
ð 	×Ñ˜O°_Ì3ÐÔOØ× Ñ   a b Ó*ˆàˆŒØˆŒØˆŒØˆŒØˆŒØˆr1   c           	      ó†
  — t        |«      dkD  r»dt        j                  v rqt        j                  j	                  t        j                  j                  |d   «      t        j                  j                  t        j                  d   «      «      |d<   |d   }|j                  d«      s|j                  d«      r| j                  |«      S t        |«      dkD  r"j                  d«      rt        j                  }nd}t        j                  t        d«      ¬«      }|j                  d	d
dd|xs t        d«      ¬«       |j                  dddt        d«      ¬«       |j                  ddt        d|xs t        d«      ¬«       |j                  ddd|xs t        d«      ¬«       |j                  dd|xs t        d«      ¬ «       |j                  d!d"t        |xs t        d#«      ¬$«       |j                  d%dt        d&«      ¬«       |j                  d'd(d)|xs& t        d*«      t        j                   j"                  z  ¬«       |j                  d+d)t        d,«      ¬«       |j                  d-d.g d/t        d0«      ¬1«       |j                  d2d3dt        d4«      ¬«       |j                  d5d6t        j                  ¬7«       |j%                  |d8d «      }|j&                  }|`|j(                  r`|j*                  |j,                  |j.                  |j0                  |j2                  |j4                  g}t7        |«      r|j9                  d9«       t        |«      d8k(  rj                  d«      r	d:|_        |S |€|S t        j                  j;                  t        j                  j	                  t<        |d;z   «      «      rd:|_        ||_        |S |j                  d<«      s|j                  d=«      r	||_        |S |j?                  «       rd:|_        ||_        |S d>|v �r|jA                  d?«      r«t        j                   jC                  |jE                  d>«      d@   «      }|s|j9                  |› dA�«       nM|jG                  dBdC«      r!|j9                  |› dD|dE   › dF|dB   › dG�«       n|j9                  |› dD|dE   › dH�«       tI        jJ                  d8«       n@tM        jN                  |«      }	|	s)|j9                  |› dI�«       tI        jJ                  d8«       d:|_        	|_(        |S d:|_        d:| _)        ||_(        |S )JzˆParse command line options.

        If a single argument is given without any options, this tries to "do
        what I mean".
        r   ÚAPPORT_INVOKED_ASz-update-bugz-collectz-bugNzI%(prog)s [options] [symptom|pid|package|program path|.apport/.crash file]rX  z-fz
--file-bugÚ
store_truerN  z´Start in bug filing mode. Requires --package and an optional --pid, or just a --pid. If neither is given, display a list of known symptoms. (Implied if a single argument is given.))rb  rc  r]  z-wz--windowz7Click a window as a target for filing a problem report.)rb  r]  r%   z--update-bugr&  z;Start in bug updating mode. Can take an optional --package.)rf  rc  r]  z-sz	--symptomÚSYMPTOMzWFile a bug report about a symptom. (Implied if symptom name is given as only argument.))re  r]  rZ  r[  z‡Specify package name in --file-bug mode. This is optional if a --pid is specified. (Implied if package name is given as only argument.)r\  z-Pz--pidzžSpecify a running program in --file-bug mode. If this is specified, the bug report will contain more information.  (Implied if pid is given as only argument.))rf  r]  z	--hangingz*The provided pid is a hanging application.ú-cz--crash-fileÚPATHz‚Report the crash from given .apport or .crash file instead of the pending ones in %s. (Implied if file is given as only argument.)z--savez™In bug filing mode, save the collected information into a file instead of reporting it. This file can then be reported later on from a different machine.r^  r;  r_  r`  ra  z-vz	--versionz Print the Apport version number.Úissueú?)Únargsr]  r   zL-u/--update-bug option cannot be used together with options for a new reportTr!  z.crashz.apportú/z	/snap/binrL  zv is provided by a snap. No contact address has been provided; visit the forum at https://forum.snapcraft.io/ for help.Úcontactr   z$ is provided by a snap published by Ú	developerz. Contact them via z
 for help.z`. No contact address has been provided; visit the forum at https://forum.snapcraft.io/ for help.z does not belong to a package.)*r0  r   r   r†   rœ   Údirnamerˆ   r  rl  rg  ÚSUPPRESSrh  r•   ri  r   r;   r<   Ú
report_dirrj  rs  r&  rN  rR  rC  r   rQ  r  Úanyrj   r+  r:  Úisdigitr\   r�   r˜   r   rŠ   r‹   r–   Úget_file_packager¡   r¾   )
rÆ   r¸   ÚcmdÚsuppressrk  rL   rs  Úargs_only_for_new_reportsr§   Úpkgs
             r   rÅ   zUserInterface.parse_argvô  s{  € ô ˆt‹9�qŠ=Ø"¤b§j¡jÑ0ÜŸ'™'Ÿ,™,Ü—G‘G—O‘O D¨¡GÓ,Ü—G‘G×$Ñ$¤R§Z¡ZÐ0CÑ%DÓEó��Q‘ð �q‘'ˆCØ�|‰|˜MÔ*¨c¯l©l¸:Ô.FØ×-Ñ-¨dÓ3Ð3äˆt‹9�qŠ=˜SŸ\™\¨&Ô1Ü×(Ñ(‰HàˆHä×(Ñ(ÜðJóô
ˆð 	×ÑØØØØØò ÜðOóð 	ô 	
ð 	×ÑØØØÜÐLÓMð	 	ô 	
ð 	×ÑØØÜØ Øò PÜÐNÓOð 	ô 	
ð 	×ÑØØØØò Üð/óð 	ô 		
ð 	×ÑØØØò Üð/óð	 	ô 		
ð 	×ÑØØÜØò Üð@óð 	ô 
	
ð 	×ÑØØÜÐ?Ó@ð 	ô 	
ð
 	×ÑØØØØò *Üð@óô
 ×Ñ×)Ñ)ñ*ð 	ô 	
ð 	×ÑØØÜð?óð 	ô 	
ð 	×ÑØØØØÜÐUÓVð 	ô 	
ð 	×ÑØØØÜÐ5Ó6ð	 	ô 	
ð 	×Ñ˜G¨3´X×5FÑ5FÐÔGà× Ñ   a b Ó*ˆØ—
‘
ˆØˆJð ×Òà—‘Ø—‘Ø—‘Ø—‘Ø—‘Ø—	‘	ð)Ð%ô Ð,Ô-Ø—‘ð5ôô ˆt‹9˜Š>˜cŸl™l¨6Ô2ØˆDŒLØˆKð ˆ=ØˆKô �7‰7�>‰>œ"Ÿ'™'Ÿ,™,Ô'9¸5À5¹=ÓIÔJØˆDŒLØ ˆDŒLðd ˆð_ �^‰^˜HÔ%¨¯©¸	Ô)BØ#ˆDŒOð\ ˆðW �]‰]Œ_ØˆDŒLØˆDŒHðR ˆðM �EŠ\Ø×Ñ Ô,ä×'Ñ'×1Ñ1°%·+±+¸cÓ2BÀ2Ñ2FÓG�ÙØ—L‘LØ ˜'ð "Að Bõð
 —X‘X˜i¨Ô,Ø—L‘LØ ˜'ð "Ø  Ñ-Ð.ð / Ø $ Y¡Ð0°
ð<õð —L‘LØ ˜'ð "Ø  Ñ-Ð.ð /DðEôô —‘˜•ä×0Ñ0°Ó7�ÙØ—L‘L E 7Ð*HÐ!IÔJÜ—H‘H˜Q”KØˆDŒLØˆDŒLð ˆð	  ˆDŒLØ#'ˆDÔ Ø ˆDŒLàˆr1   c                 ó¾   — | dk  rt        j                  d| dz  «      S | dk  rt        j                  d| dz  «      S t        j                  d| t        d«      z  «      S )zKFormat the given integer as humanly readable and i18n'ed file
        size.i@B z%.1f KBg     @�@i Êš;z%.1f MBg    €„.Az%.1f GB)ÚlocaleÚformat_stringÚfloat)Úsizes    r   Úformat_filesizezUserInterface.format_filesizeË  s_   € ð �'Š>Ü×'Ñ'¨	°4¸&±=ÓAÐAØ�*ÒÜ×'Ñ'¨	°4¸)Ñ3CÓDÐDÜ×#Ñ# I¨t´e¸JÓ6GÑ/GÓHÐHr1   c                 óþ   — | j                   sJ ‚d}| j                   D ]3  }| j                   |   sŒ	 || j                   |   j                  «       z  }Œ5 |S # t        $ r |t        | j                   |   «      z  }Y Œ^w xY w)z'Return the size of the complete report.r   ©r   Úget_on_disk_sizer   r0  ©rÆ   r‡  rb   s      r   Úget_complete_sizezUserInterface.get_complete_sizeÕ  s€   € à�{Š{Ðˆ{àˆØ—‘ò 	0ˆAØ�{‰{˜1‹~ð0Ø˜DŸK™K¨™N×;Ñ;Ó=Ñ=‘Dð	0ð ˆøô &ò 0ØœC §¡¨A¡Ó/Ñ/’Dð0ús   ± AÁ$A<Á;A<c                 ó
  — | j                   sJ ‚d}| j                   D ]9  }|dk7  sŒ	| j                   |   sŒ	 || j                   |   j                  «       z  }Œ; |S # t        $ r |t        | j                   |   «      z  }Y Œdw xY w)z&Return the size of the reduced report.r   rÖ   rŠ  rŒ  s      r   Úget_reduced_sizezUserInterface.get_reduced_sizeâ  s‡   € à�{Š{Ðˆ{ØˆØ—‘ò 	4ˆAØ�J‹Ø—;‘;˜q“>ð4Ø §¡¨A¡× ?Ñ ?Ó AÑA™ð		4ð ˆøô *ò 4Ø¤ D§K¡K°¡NÓ 3Ñ3šð4ús   · AÁ$BÂBc                 ó„   — | j                   rd| j                   vryt        j                  d«      €y| j                  «       S )zÐCheck whether to offer the "Examine locally" button.

        This will be true if the report has a core dump, apport-retrace is
        installed and a terminal is available (see ui_has_terminal()).
        rÖ   Fzapport-retrace)r   ÚshutilÚwhichÚui_has_terminal©rÆ   s    r   Úcan_examine_locallyz!UserInterface.can_examine_locallyð  s;   € ð �{Š{˜j°·±Ñ;Øä�<‰<Ð(Ó)Ð1Øà×#Ñ#Ó%Ð%r1   c           
      ó<  — | j                   rd| j                   v sJ ‚t        j                  «       dk(  rit        j                  «        t        j                  ddd| j                   j                  d| j                   d   «      «       t        j                  d«       yy)zReopen the crashed application.r  r   Úshrq  ÚRespawnCommandr   N)r   r   ÚforkÚsetsidÚexeclpr   rŠ   r‹   r”  s    r   r°   zUserInterface.restartþ  ss   € à�{Š{˜}°·±Ñ;Ð;Ð;ä�7‰7‹9˜Š>Ü�I‰IŒKÜ�I‰IØØØØ—‘—‘Ð 0°$·+±+¸mÑ2LÓMô	ô �H‰H�Q�Kð r1   c                 ó°  — | j                   sJ ‚| j                  t        d«      t        d«      t        d«      t        d«      | j                   z  gd«      }|€yt        j                  j                  d«      }d|› d	�}d
}d| j                   j                  dd«      z   dz   }|dz   |z   |dz   |z   |dz   |z   dz   |z   dœ}| j                  ||d      «       y)zLocally examine crash report.zJThis will launch apport-retrace in a terminal window to examine the crash.zRun gdb sessionz1Run gdb session without downloading debug symbolsz)Update %s with fully symbolic stack traceFNz~/.cache/apport/retracezapport-retrace -S system -C z -v zapport-retrace ú'z'\''z--gdb z	--output ú )r   r   é   r   )r»   r=  r•   r   r†   r  ÚreplaceÚui_run_terminal)rÆ   rñ   Ú	cache_dirÚretrace_with_downloadÚretrace_no_downloadÚfileargÚcmdss          r   r­   zUserInterface.examine  s
  € à×ÒÐÐØ×*Ñ*Üð)óô
 Ð#Ó$ÜÐEÓFäÐ=Ó>À×AQÑAQÑQð	ð ó
ˆð ÐØä—G‘G×&Ñ&Ð'@ÓAˆ	Ø">¸y¸kÈÐ NÐØ/ÐØ˜×(Ñ(×0Ñ0°°gÓ>Ñ>ÀÑDˆð % xÑ/°'Ñ9Ø" XÑ-°Ñ7Ø$ {Ñ2°WÑ<¸sÑBÀWÑLñ
ˆð 	×Ñ˜T (¨1¡+Ñ.Õ/r1   Úsend_reportc                 óT  — 	 t        j                  ddddddddd	t        |«      j                  «       g
«       t        j                  g d
¢«       y# t        t         j
                  f$ r>}t        d«      }| j                  t        d«      |› dt        |«      › �«       Y d}~yd}~ww xY w)z#Put whoopsie in auto or never mode.ú/usr/bin/gdbusÚcallú-yú-dúcom.ubuntu.WhoopsiePreferencesú-oú/com/ubuntu/WhoopsiePreferencesú-mz/com.ubuntu.WhoopsiePreferences.SetReportCrashes)
r©  rª  r«  r¬  r­  r®  r¯  r°  z<com.ubuntu.WhoopsiePreferences.SetAutomaticallyReportCrashesÚtruezLSaving crash reporting state failed. Can't set auto or never reporting mode.z*Can't remember send report status settingsrÙ   N)r)   Úcheck_outputr+   Úlowerr>   ÚCalledProcessErrorr•   rÞ   )rÆ   r§  rj   Úmsgs       r   rã   z"UserInterface.remember_send_report-  s·   € ð%	Ü×#Ñ#à$ØØØØ4ØØ5ØØEÜ˜Ó$×*Ñ*Ó,ðôô ×#Ñ#òõøô œ×6Ñ6Ð7ò 	Üð;óˆCð ×!Ñ!ÜÐ>Ó?Ø�%�tœC ›J˜<Ð(÷ñ ûð	ús   ‚AA ÁB'Á)4B"Â"B'c                 ó  — | j                   �d| j                   vry| j                   d   j                  «       j                  d«      rc	 t        j                  | j                   d   «      }t        |t        «      sJ ‚d|v sJ ‚	 	 t        j                  j                  d|«      | _        y	 t        j                  j                  d| j                   d   «      | _        y# t        t        t        f$ r,}d| j                   d   › d|› �| j                   d<   Y d}~y	d}~ww xY w# t        t        f$ r# d
| j                   d   › d�| j                   d<   Y yw xY w# t        t        f$ r# d
| j                   d   › d�| j                   d<   Y y	w xY w)z+Process reports' CrashDB field, if present.Nru   Tú{r   z=A package hook defines an invalid crash database definition:
ú
rt   Fz@A package hook wants to send this report to the crash database "z" which does not exist.)r   Úlstripr\   ÚastÚliteral_evalr   ÚdictÚAssertionErrorÚSyntaxErrorr   r;   rÀ   Úload_crashdbrÂ   r   rÁ   )rÆ   Úspecrj   s      r   Úcheck_report_crashdbz"UserInterface.check_report_crashdbV  sž  € à�;‰;Ð )°4·;±;Ñ">Øð �;‰;�yÑ!×(Ñ(Ó*×5Ñ5°cÔ:ð	Ü×'Ñ'¨¯©°IÑ(>Ó?�Ü! $¬Ô-Ð-Ð-Ø ‘~Ð%‘~ðÜ%Ÿ~™~×:Ñ:¸4ÀÓF�”ð( ðÜ%Ÿ~™~×9Ñ9¸$ÀÇÁÈIÑ@VÓW�”ð øô7 #¤K´Ð<ò ð%Ø%)§[¡[°Ñ%;Ð$<¸B¸u¸gðGð —‘Ð0Ñ1ô ûðûô  ¤Ð*ò ð"Ø"&§+¡+¨iÑ"8Ð!9ð :-ð.ð —‘Ð0Ò1ð$ ð'ûô  ¤Ð*ò ð"Ø"&§+¡+¨iÑ"8Ð!9ð :-ð.ð —‘Ð0Ñ1ñ
 ðús<   Á	:C Â%D" Â,2E ÃDÃ3"DÄDÄ"/EÅEÅ/F	ÆF	c           
      ó.  — | j                   sJ ‚d| j                   d<   | j                   j                  d«      dk(  rd| j                   v s,| j                   j                  d«      dk7  rd| j                   v r
|r |«        y| j                   j                  d«      dk(  rç| j                   j                  dd	«      }t        j                  j	                  |«      s;t        d
«      }|r|› d| j                   d   › d�}|| j                   d<   |r |«        yd| j                   v rct        j                  j	                  | j                   d   «      s7t        d
«      }|› d| j                   d   › d�| j                   d<   |r |«        yd| j                   v r¥d| j                   v r—t        | j                   d   «      }| j                   d= t        t        j                  | j                   d   «      j                  «      }||k7  r8d| j                   d<   t        d«      | j                   d   z  | j                   d<   y| j                  s,d| j                   vr|s| j                   j                  «        �n | j                  «        | j                  j                  | j                   «      rt        | «      }n
t        «       }d| j                   v�rt        j                   j#                  «       }	t$        j&                  j'                  t(        d| j                   | j*                  | j                  |||f¬«      }
|
j-                  «        |
j/                  «       r2| j1                  «        	 |j3                  «        |
j/                  «       rŒ2|
j;                  «        t        j                   j=                  «        t        j                   j?                  |	«       	 |
jA                  «        d| j                   v �r-d| j                   v �rd| j                   d   v rdg}nP| jU                  t        d«      t        d«      | j                   d   z  t        d «      | j                   d   z  gd!«      }|dgk(  rD| j                   d= d"| j                   v r| j                   d"= d#| j                   v r}| j                   d#= no|dgk(  rD| j                   d= d$| j                   v r| j                   d$= d%| j                   v r3| j                   d%= n%| jW                  «        t7        j8                  d«       d| j                   v rQd%| j                   v rC| j                   jY                  | j                   j[                  d%«      j]                  d&«      «       d| j                   v rËd$| j                   vr½d'| j                   vr¯d| j                   vr¡| j^                  r•t$        j`                  jc                  | j                  «      }|j                  d(d	«      r(t        d)«      |d*   |d+   |d(   fz  | j                   d<   n#t        d,«      |d*   |d+   fz  | j                   d<   d| j                   d<   d| j                   v s| je                  «       s| jW                  «        |r |«        y| j                   j                  d«      d-k(  s,| j                   j                  d«      d.k(  sd| j                   v rßt$        j&                  j'                  | j                   jf                  | j                  ji                  «       f¬/«      }|j-                  «        |j/                  «       r3| j1                  «        	 |j;                  d0«       |j/                  «       rŒ3	 |jA                  «        |jk                  «       r|jk                  «       | j                   d1<   | j                   j                  d«      d2k7  rØt$        j&                  j'                  | j                  jl                  | j                   f¬/«      }|j-                  «        |j/                  «       r3| j1                  «        	 |j;                  d0«       |j/                  «       rŒ3|jA                  «        |jk                  «       }|�#|d3u rd4| j                   d1<   n|| j                   d1<   t$        j&                  j'                  | j                   jn                  ¬5«      }|j-                  «        |j/                  «       r3| j1                  «        	 |j;                  d0«       |j/                  «       rŒ3|jA                  «        | jW                  «        d| j                   vr®d#| j                   vrd| j                   vs9| j                   j                  dd	«      jq                  d6«      sgd| j                   vrY| js                  «       sI| ju                  t        d7«      t        d8«      «       | jw                  «        t7        j8                  d«       |r |«        yy# t4        $ r t7        j8                  d«       Y �ŒÉw xY w# tB        tD        tF        jH                  f$ rB}t        d«      }|› dtK        |«      › �| j                   d<   d| j                   d<   Y d}~�Œ¹d}~wtL        $ r9 d| j                   vr't        d«      | j                   d<   d| j                   d<   Y �ŒýtN        $ rj}t$        jP                  jI                  dtK        |«      «       t        d«      dz   tS        |«      z   | j                   d<   d| j                   d<   Y d}~�Œjd}~ww xY w# t4        $ r t7        j8                  d«       Y �Œw xY w# tB        tD        tF        jH                  f$ r3}t        d«      }|› dtK        |«      › �| j                   d<   Y d}~�Œ;d}~ww xY w# t4        $ r t7        j8                  d«       Y �Œ—w xY w# t4        $ r t7        j8                  d«       Y �Œðw xY w)9aH  Collect additional information.

        Call all the add_*_info() methods and display a progress dialog during
        this.

        In particular, this adds OS, package and gdb information and checks bug
        patterns.

        If a symptom script is given, this will be run first (used by
        run_symptom()).
        ÚTruerÚ   rz   r{   r×   ÚDependenciesNrr   r   zIThis problem report applies to a program which is not installed any more.z (ú)rt   ÚInterpreterPathÚExecutableTimestamprÛ   zPThe problem happened with the program %s which changed since the crash occurred.rª   )Útargetr!   rL   r   ú7This problem report is damaged and cannot be processed.rÙ   z5This report is about a package that is not installed.z%szBAn error occurred while attempting to process this problem report:rs   rw   z(not installed)r   zcYou have two versions of this application installed, which one do you want to report a bug against?z%s snapz%s deb packageFÚPackageArchitecturer  Ú
SnapSourceÚSnapTagsrž  ÚSnapGitNamerw  zG%s is provided by a snap published by %s. Contact them via %s for help.r!   rx  zˆ%s is provided by a snap published by %s. No contact address has been provided; visit the forum at https://forum.snapcraft.io/ for help.ÚKernelCrashÚ
KernelOops©rÈ  rL   çš™™™™™¹?Ú_KnownReportr  TÚ1)rÈ  ÚKernelrÜ   z7Could not determine the package or source package name.)<r   r   r   r†   r+  r•   r   r  Úst_mtimer¼   r‚   Ú!ui_start_info_collection_progressrÀ   rå   r€   ÚNoninteractiveHookUIr   Úcopyr;   ÚREThreadrª   r»   ÚstartÚis_aliveÚ!ui_pulse_info_collection_progressÚprocess_eventÚKeyboardInterruptrŠ   r‹   rœ   Úclearr1  Ú	exc_raiser>   ÚEOFErrorÚzlibrj   Úreprr   rŒ   r…   r+   r=  Ú ui_stop_info_collection_progressÚadd_tagsÚpopr˜   r¾   r<   r�   rÁ  Úsearch_bug_patternsÚget_bugpattern_baseurlÚreturn_valueÚknownÚ	anonymizer\   Ú_is_snaprÞ   Úui_shutdown)rÆ   r£   r¤   Úon_finishedÚexe_pathrµ  Ú	orig_timeÚcur_timeÚhookuiÚorig_envÚicthreadrj   Úresr§   ÚbpthreadÚknown_threadÚvalÚanonymize_threads                     r   rá   zUserInterface.collect_info~  sa
  € ð  �{Š{Ðˆ{Ø(.ˆ�‰Ð$Ñ%ð �K‰K�O‰O˜MÓ*¨gÒ5¸,È$Ï+É+Ñ:Uà�K‰K�O‰O˜MÓ*¨gÒ5¸.ÈDÏKÉKÑ:WáÙ”Øð �;‰;�?‰?˜=Ó)¨WÒ4Ø—{‘{—‘Ð'7¸Ó<ˆHÜ—7‘7—>‘> (Ô+Üð8ó�ñ Ø ˜E  D§K¡KÐ0@Ñ$AÐ#BÀ!ÐD�CØ47�—‘Ð0Ñ1ÙÙ”MØà  D§K¡KÑ/Ü—w‘w—~‘~ d§k¡kÐ2CÑ&DÔEÜð<ó�Cð
 ˜%˜r $§+¡+Ð.?Ñ"@Ð!AÀÐCð —K‘KÐ 4Ñ5ñ #Ù#œØð ˜tŸ{™{Ñ*Ð/DÈÏÉÑ/SÜ˜DŸK™KÐ(=Ñ>Ó?ˆIØ—‘Ð1Ð2Üœ2Ÿ7™7 4§;¡;Ð/?Ñ#@ÓA×JÑJÓKˆHà˜HÒ$Ø07�—‘Ð,Ñ-äðCóð —k‘kÐ"2Ñ3ñ	4ð —‘Ð0Ñ1ð ð × Ò Ø ¨¯©Ñ3Ù"ð �K‰K×#Ñ#Ö%ð ×2Ñ2Ô4ð �|‰|×#Ñ# D§K¡KÔ0Ü ›‘ä-Ó/�à 4§;¡;Ò.äŸ:™:Ÿ?™?Ó,�Ü!Ÿ?™?×3Ñ3Ü.Ø.àŸ™Ø×(Ñ(Ø×(Ñ(ØØ&Ø*ðð 4ó �ð —‘Ô Ø×'Ñ'Ô)Ø×:Ñ:Ô<ð$Ø×,Ñ,Ô.ð ×'Ñ'Õ)ð —‘”ô —
‘
× Ñ Ô"Ü—
‘
×!Ñ! (Ô+ð<Ø×&Ñ&Ô(ð2 ˜Ÿ™Ò$¨°d·k±kÒ)AØ$¨¯©°IÑ(>Ñ>ð ˜#‘Cà×1Ñ1Üð.óô ˜i›L¨4¯;©;°vÑ+>Ñ>ÜÐ.Ó/°$·+±+¸iÑ2HÑHðð ó�Cð ˜1˜#’:ØŸ™ IÐ.Ø,°·±Ñ;Ø ŸK™KÐ(=Ð>Ø&¨$¯+©+Ñ5Ø ŸK™K¨Ñ8à˜Q˜C’ZØŸ™ FÐ+Ø# t§{¡{Ñ2Ø ŸK™K¨Ð5Ø! T§[¡[Ñ0Ø ŸK™K¨
Ñ3à×9Ñ9Ô;Ü—H‘H˜Q”Kð ˜Ÿ™Ñ$¨°t·{±{Ñ)BØ—‘×$Ñ$ T§[¡[§_¡_°ZÓ%@×%FÑ%FÀsÓ%KÔLð ˜$Ÿ+™+Ñ%à ¨¯©Ñ3¸ÈTÏ[É[Ñ8Xà(°·±Ñ;Ø×(Ò(ä×'Ñ'×1Ñ1°$×2BÑ2BÓC�Ø—8‘8˜I rÔ*Ü89ð9ó9ð ˜f™ t¨KÑ'8¸$¸y¹/ÐJñ9K�D—K‘KÐ 4Ò5ô
 9:ðDó9ð ˜f™ t¨KÑ'8Ð9ñ	9:�D—K‘KÐ 4Ñ5ð
 18�—‘Ð,Ñ-à# t§{¡{Ñ2¸$×:SÑ:SÔ:UØ×5Ñ5Ô7ÙÙ”MØð —‘—‘ Ó.°-Ò?Ø—;‘;—?‘? =Ó1°\ÒAØ §¡Ñ+ä!Ÿ?™?×3Ñ3ØŸ;™;×:Ñ:ØŸ,™,×=Ñ=Ó?ÐAð 4ó �ð —‘Ô Ø×'Ñ'Ô)Ø×:Ñ:Ô<ð$Ø Ÿ™ cÔ*ð ×'Ñ'Õ)ðRØ×&Ñ&Ô(ð
 ×(Ñ(Ô*Ø2:×2GÑ2GÓ2I�D—K‘K Ñ/ð �{‰{�‰˜}Ó-°Ò6Ü%Ÿ™×7Ñ7ØŸ<™<×-Ñ-°T·[±[°Nð  8ó  �ð ×"Ñ"Ô$Ø"×+Ñ+Ô-Ø×:Ñ:Ô<ð$Ø$×)Ñ)¨#Ô.ð #×+Ñ+Õ-ð ×&Ñ&Ô(Ø"×/Ñ/Ó1�Ø�?Ø˜d‘{Ø69˜Ÿ™ NÒ3à69˜Ÿ™ NÑ3ô  &Ÿ™×7Ñ7¸t¿{¹{×?TÑ?TÐ7ÓUÐØ×"Ñ"Ô$Ø"×+Ñ+Ô-Ø×6Ñ6Ô8ð Ø$×)Ñ)¨#Ô.ð #×+Ñ+Õ-ð ×&Ñ&Ô(à×1Ñ1Ô3ð $¨4¯;©;Ñ6ð (¨t¯{©{Ñ:Ø*°$·+±+Ñ=ð !ŸK™KŸO™O¨M¸2Ó>×IÑIÈ(ÔSØ%¨T¯[©[Ñ8àŸ-™-œ/Ø×)Ñ)ÜÐ2Ó3ÜÐSÓTôð ×$Ñ$Ô&Ü—H‘H˜Q”KáÙ�Mð øôs -ò $ÜŸ™ Ÿð$ûô  ¤¬4¯:©:Ð6ò <äÐUÓV�CØ;>¸%¸tÄDÈÃKÀ=Ð8Q�D—K‘KÐ 4Ñ5Ø4;�D—K‘KÐ 0×1ûÜ!ò @Ø+°4·;±;Ñ>Ü<=ØSó=˜Ÿ™Ð$8Ñ9ð 9@˜Ÿ™Ð$4Ñ5úÜ ò 
<Ü—N‘N×(Ñ(¨¬t°E«{Ô;äð;óð !ñ	!ô
 ˜e›*ñ%ð —K‘KÐ 4Ñ5ð 5<�D—K‘KÐ 0×1ûð
<ûôB -ò $ÜŸ™ Ÿð$ûô  ¤¬4¯:©:Ð6ò RäÐUÓV�CØ;>¸%¸tÄDÈÃKÀ=Ð8Q�D—K‘KÐ 4×5ûðRûô" -ò $ÜŸ™ Ÿð$ûô$ )ò  Ü—H‘H˜Q—Kð úsŒ   Í#h Ïi  Ým Ý:m9 áo äo2 èh=è<h=é mé7jêAmëmë'Amímím6í5m6í9o
î(oïo
ïo/ï.o/ï2pðpc                 óZ   — | j                   sJ ‚d| j                   v xs d| j                   v S )NrË  rs   )r   r”  s    r   rì  zUserInterface._is_snap«  s+   € Ø�{Š{Ðˆ{Ø˜tŸ{™{Ð*ÒC¨f¸¿¹Ð.CÐCr1   c                 ó  — 	 	 t        d|gd¬«       y# t        $ r t        j                  |dd¬«      rY yd}Y nw xY wn# t        $ r}d|› �}Y d}~nd}~ww xY wt        d	«      }t        d
«      |z  }| j                  |||z   «       y)zjOpen the given URL in a new browser window.

        Display an error dialog if everything fails.
        zxdg-openTrJ   Nr   )ÚnewÚ	autoraiser   r¸  zUnable to start web browserz'Unable to start web browser to open %s.)rd   r>   Ú
webbrowserr7   rŒ   r•   rÞ   )rÆ   ÚurlÚerror_detailsrj   r¨   Úmessages         r   Úopen_urlzUserInterface.open_url¯  s—   € ð

	)ð#Ü  *¨cÐ!2ÀÕFØøÜò #ä—?‘? 3¨A¸Õ>ÙØ "’ð	#úð øÜò 	)Ø   ˜L�Mûð	)úô Ð/Ó0ˆÜÐ=Ó>ÀÑDˆØ×Ñ˜e W¨}Ñ%<Õ=s-   ƒ “!;´? ¶;¸? º;»? ¿	AÁAÁAc           	      ó  ‡ ‡— ‰ j                   sJ ‚‰ j                  j                  ‰ j                   «      sy‰ j                   j                  d«      ‰ j                   j                  d«      k(  r	 ‰ j                   d= 	 ‰ j                   d= d‰ _        ˆ fd„}t        j                  «       Šˆfd„}t        ‰ j                   «      D ]!  }|j                  d«      sŒ‰ j                   |= Œ# ‰ j                  «        t        j                  j                  ‰ j                  j                  ‰ j                   ||f¬«      }|j                  «        	 |j                  «       rv‰ j!                  ‰ j
                  «       	 ‰j                  d	d
¬«      \  }}}‰ j#                  ||«       |j%                  «        |j'                  «        |j                  «       rŒv|j'                  «        |jA                  «       }
‰ jC                  «        ‰ j                  jE                  ‰ j                   |
«      }|r‰ jG                  |«       yy# t        $ r Y �ŒÌw xY w# t        $ r Y �ŒÎw xY w# t        j(                  $ r Y Œ±w xY w# t*        $ r t-        j.                  d«       Y Œ´t0        j2                  t4        j6                  j8                  f$ r>}t;        d«      }	‰ j=                  t;        d«      |	› dt?        |«      › �«       Y d}~yd}~ww xY w)zOUpload the current report and guide the user to the reporting
        web page.NrÊ  ÚArchitectureÚStacktraceAddressSignaturec                 ó,   •— t        | «      |z  ‰_        y ©N)r†  r¿   )ÚsentÚtotalrÆ   s     €r   Úprogress_callbackz4UserInterface.file_report.<locals>.progress_callbackß  s   ø€ Ü#(¨£;°Ñ#6ˆDÕ r1   c                 óv   •— t        j                  «       }‰j                  | ||f«       |j                  «        y r  )Ú	threadingÚEventÚputÚwait)r¨   r(   Úmessage_displayedÚmessage_queues      €r   Úmessage_callbackz3UserInterface.file_report.<locals>.message_callbackä  s2   ø€ Ü )§¡Ó 1ÐØ×Ñ˜u dÐ,=Ð>Ô?Ø×"Ñ"Õ$r1   r•   rÐ  TrÑ  )ÚblockÚtimeoutr   zHCannot connect to crash database, please check your Internet connection.zNetwork problemrÙ   )$r   rÀ   rå   r   r   r¿   ÚqueueÚSimpleQueueÚlistr\   Úui_start_upload_progressr;   rÙ  ÚuploadrÚ  rÛ  Úui_set_upload_progressr.  Úsetrà  ÚEmptyrÞ  rŠ   r‹   ÚsmtplibÚSMTPConnectErrorÚurllibrj   ÚURLErrorr•   rÞ   r+   ré  Úui_stop_upload_progressÚget_comment_urlr  )rÆ   r
  r  rb   Úupthreadr¨   r(   Úmsg_displayedrj   rµ  Úticketrÿ  r  s   `           @r   rè   zUserInterface.file_reportÄ  s¦  ù€ ð �{Š{Ðˆ{ð �|‰|×#Ñ# D§K¡KÔ0Øà�;‰;�?‰?Ð0Ó1°T·[±[·_±_À^Ó5TÒTðØ—K‘KÐ 5Ð6ð	Ø—‘Ð8Ð9ð  $ˆÔô	7ô ×)Ñ)Ó+ˆô	%ô �d—k‘kÓ"ò 	#ˆAØ�|‰|˜CÕ Ø—K‘K ‘Nð	#ð 	×%Ñ%Ô'Ü—?‘?×+Ñ+Ø—<‘<×&Ñ&Ø—+‘+Ð0Ð2BÐCð ,ó 
ˆð 	�‰Ôð	Ø×#Ñ#Ô%Ø×+Ñ+¨D×,@Ñ,@ÔAðØ1>×1BÑ1BØ"¨Cð 2Có 2Ñ.�E˜4 ð ×(Ñ(¨°Ô5Ø!×%Ñ%Ô'Ø×&Ñ&Ô(ð ×#Ñ#Õ%ð ×ÑÔ ð ×&Ñ&Ó(ˆØ×$Ñ$Ô&à�l‰l×*Ñ*¨4¯;©;¸Ó?ˆÙØ�M‰M˜#Õð øô{ ò Úðûô ò 	Úð	ûôH —{‘{ò Ùðûô !ò 	Ü�H‰H�QŽKÜ×(Ñ(¬&¯,©,×*?Ñ*?Ð@ò 	Üð:óˆCð ×!Ñ!¤!Ð$5Ó"6¸3¸%¸tÄCÈÃJÀ<Ð8PÔQÜûð	úsm   Á/H< Á=I Å+I5 Å7A	I Ç I5 ÇI5 È<	I	ÉI	É	IÉIÉI2É/I5 É1I2É2I5 É5K?Ê,K?Ë4K:Ë:K?c           	      ó†  — 	 t        j                  «       | _        t        |d«      5 }| j                  j	                  |d¬«       ddd«       d| j                  vrt        d«      ‚	 d| j                  v r&| j                  d   j!                  «       d   | _        yt         j$                  j'                  | j                  j)                  dd«      «      | _        y# 1 sw Y   Œ–xY w# t        $ r. d| _        | j                  t        d«      t        d«      «       Y y	t        $ r6}d| _        | j                  t        d
«      |j                  «       Y d}~y	d}~wt        t
        t        t        j                  f$ rE}d| _        t        d«      }| j                  t        d
«      |› dt        |«      › �«       Y d}~y	d}~ww xY w)zîLoad report from given path and do some consistency checks.

        This might issue an error message and return False if the report cannot
        be processed, otherwise self.report is initialized and True is
        returned.
        ÚrbÚ
compressed)ÚbinaryNrz   z+Report does not contain "ProblemType" fieldzMemory exhaustionzEYour system does not have enough memory to process this crash report.FrÜ   rÉ  rÙ   rw   r   rr   r   T)r;   rö   r   r7   Úloadr   ÚMemoryErrorrÞ   r•   r>   rí   Ú	TypeErrorr½  râ  rj   rã  r˜   r¼   r<   r�   r   )rÆ   r†   r¦   rj   rµ  s        r   rÍ   zUserInterface.load_report  s‘  € ð	Ü Ÿ-™-›/ˆDŒKÜ�d˜DÓ!ð 9 QØ—‘× Ñ  ¨<Ð Ô8÷9à D§K¡KÑ/Ü Ð!NÓOÐOð 0ð0 ˜Ÿ™Ñ#Ø#Ÿ{™{¨9Ñ5×;Ñ;Ó=¸aÑ@ˆDÔð ô	  &×/Ñ/×AÑAØ—‘—‘Ð 0°"Ó5ó ˆDÔð ÷C9ð 9ûô ò 		ØˆDŒKØ×!Ñ!ÜÐ%Ó&Üð5óôñ Üò 	ØˆDŒKØ×!Ñ!¤!Ð$<Ó"=¸u¿~¹~ÔNÜûÜœ:¤~´t·z±zÐBò 	ØˆDŒKÜÐMÓNˆCØ×!Ñ!ÜÐ*Ó+°¨u°D¼¸e»¸Ð-Fôô ûð	ús@   ‚%C& §CÁ!C& ÃC#ÃC& Ã&4G ÄG Ä$,EÅ&G Å;;F;Æ;G c                 óê  — | j                   sJ ‚| j                  j                  | j                   «      syd| j                   v r±t        | j                   d   t        «      r+| j                   d   j                  d«      | j                   d<   d| j                   v r-t        d«      | j                   d   j                  «       d   z  }nd}| j                  |t        d«      | j                   d   z  «       y	y)
znCheck if the current report is unreportable.

        If so, display an info message and return True.
        Frt   úUTF-8rw   rØ   r   r   z#The problem cannot be reported:

%sT)	r   rÀ   rå   r   ÚbytesrU  r•   r˜   r.  )rÆ   r¨   s     r   rç   z UserInterface.check_unreportable?  sÝ   € ð
 �{Š{Ðˆ{Ø�|‰|×#Ñ# D§K¡KÔ0ØØ 4§;¡;Ñ.Ü˜$Ÿ+™+Ð&:Ñ;¼UÔCØ48·K±KØ(ñ5ç‘&˜“/ð —‘Ð0Ñ1ð ˜DŸK™KÑ'Ü˜/Ó*¨T¯[©[¸Ñ-C×-IÑ-IÓ-KÈAÑ-NÑN‘à�Ø× Ñ ØÜÐ9Ó:Ø—+‘+Ð2Ñ3ñ4ôð
 Ør1   c           	      ó„  — | j                   sJ ‚d| j                   v r<t        j                  j                  | j                   d   «      r| j                   d   }n*	 t        j
                  j                  | j                  «      }|syt        j                  dd¬«      }	 |j                  |d¬«       |j#                  d
«      syt%        |j'                  d
«      «      }d|vry|S # t        $ r Y yw xY w# t        j                  $ r9}t        j                  j                  d|› dt!        |«      › d	�«       Y d}~yd}~ww xY w)zŠReturn a .desktop info dictionary for the current report.

        Return None if report cannot be associated to a .desktop file.
        ÚDesktopFileNF)ÚinterpolationÚstrictr.  rn   z	Warning! z is broken: r¸  zDesktop Entryr!   )r   r   r†   r+  r;   r<   Úfind_package_desktopfiler¼   r   ÚconfigparserÚConfigParserr„   rÝ   rŠ   rK  rž   r+   Úhas_sectionr¼  r[   )rÆ   Údesktop_fileÚcprj   rÐ   s        r   Úget_desktop_entryzUserInterface.get_desktop_entryX  s  € ð
 �{Š{Ðˆ{Ø˜DŸK™KÑ'¬B¯G©G¯N©N¸4¿;¹;À}Ñ;UÔ,VØŸ;™; }Ñ5‰LðÜ%×/Ñ/×HÑHØ×$Ñ$ó �ñ Øä×&Ñ&°TÀ%ÔHˆð	Ø�G‰G�L¨7ˆGÔ3ð �~‰~˜oÔ.ØÜ�b—h‘h˜Ó/Ó0ˆØ˜ÑØØˆøô# ò Ùðûô ×!Ñ!ò 	Ü�J‰J×Ñ˜y¨¨°lÄ3ÀuÃ:À,ÈbÐQÔRÜûð	ús*   Á)C$ ÂC3 Ã$	C0Ã/C0Ã3D?Ä/D:Ä:D?c                 ó”  — | j                   sJ ‚| j                  j                  | j                   «      syd| j                   vry| j                   d   j                  d«      rC| j	                  t        d«      t        d«      «       | j                  | j                   d   «       y| j	                  t        d«      t        d«      «       y)zœCheck if current report matches a bug pattern.

        If so, tell the user about it, open the existing bug in a browser, and
        return True.
        FrÒ  ÚhttpzProblem already knownz¯This problem was already reported in the bug report displayed in the web browser. Please check if you can add any further information that might be helpful for the developers.z;This problem was already reported to developers. Thank you!T)r   rÀ   rå   r\   r.  r•   r  r”  s    r   ræ   zUserInterface.handle_duplicatex  s¹   € ð �{Š{Ðˆ{Ø�|‰|×#Ñ# D§K¡KÔ0ØØ §¡Ñ,Øð �;‰;�~Ñ&×1Ñ1°&Ô9Ø× Ñ ÜÐ)Ó*ÜðAóôð �M‰M˜$Ÿ+™+ nÑ5Ô6ð ð × Ñ ÜÐ)Ó*ÜÐOÓPôð
 r1   c                 ó¬   — | j                   sJ ‚| j                  j                  r0| j                   j                  | j                  j                  «       yy)z6Add extra tags to report specified with --tags on CLI.N)r   rL   r_  rå  r”  s    r   r  zUserInterface.add_extra_tagsš  s8   € à�{Š{Ðˆ{Ø�9‰9�>Š>Ø�K‰K× Ñ  §¡§¡Õ0ð r1   rß   rõ   c                 ó   — t        d«      ‚)a	  Show details of the bug report.

        Return the action and options as an Action object:

        - Valid attributes are: report the crash ('report'), restart
          the crashed application ('restart'), or ignore further crashes
          ('ignore').
        ú.this function must be overridden by subclasses©ÚNotImplementedError)rÆ   rß   rõ   s      r   rà   z'UserInterface.ui_present_report_details¤  s   € ô "Ð"RÓSÐSr1   c                 ó   — t        d«      ‚)z:Show an information message box with given title and text.r?  r@  ©rÆ   r¨   r(   s      r   r.  zUserInterface.ui_info_message±  ó   € ä!Ð"RÓSÐSr1   c                 ó   — t        d«      ‚)z4Show an error message box with given title and text.r?  r@  rC  s      r   rÞ   zUserInterface.ui_error_messageµ  rD  r1   c                 ó   — t        d«      ‚)z•Open a indefinite progress bar for data collection.

        This tells the user to wait while debug information is being
        collected.
        r?  r@  r”  s    r   rÖ  z/UserInterface.ui_start_info_collection_progress¹  ó   € ô "Ð"RÓSÐSr1   c                 ó   — t        d«      ‚)zaAdvance the data collection progress bar.

        This function is called every 100 ms.
        r?  r@  r”  s    r   rÜ  z/UserInterface.ui_pulse_info_collection_progressÁ  ó   € ô
 "Ð"RÓSÐSr1   c                 ó   — t        d«      ‚)z,Close debug data collection progress window.r?  r@  r”  s    r   rä  z.UserInterface.ui_stop_info_collection_progressÈ  rD  r1   c                 ó   — t        d«      ‚)z{Open progress bar for data upload.

        This tells the user to wait while debug information is being uploaded.
        r?  r@  r”  s    r   r  z&UserInterface.ui_start_upload_progressÌ  rI  r1   Úprogressc                 ó   — t        d«      ‚)zîUpdate data upload progress bar.

        Set the progress bar in the debug data upload progress window to the
        given ratio (between 0 and 1, or None for indefinite progress).

        This function is called every 100 ms.
        r?  r@  )rÆ   rL  s     r   r  z$UserInterface.ui_set_upload_progressÓ  s   € ô "Ð"RÓSÐSr1   c                 ó   — t        d«      ‚)z(Close debug data upload progress window.r?  r@  r”  s    r   r!  z%UserInterface.ui_stop_upload_progressÝ  rD  r1   c                  ó   — y)zdCalled right before terminating the program.

        This can be used for for cleaning up.
        NrH   r”  s    r   rí  zUserInterface.ui_shutdowná  s   � r1   c                 ó   — t        d«      ‚)zpCheck for a terminal window.

        Check if a terminal application is available and can be launched.
        r?  r@  r”  s    r   r“  zUserInterface.ui_has_terminalç  rI  r1   c                 ó   — t        d«      ‚)z”Run command in a terminal window.

        Run given command in a terminal window; raise an
        exception if terminal cannot be opened.
        r?  r@  )rÆ   Úcommands     r   r¡  zUserInterface.ui_run_terminalî  rG  r1   c                 ó   — t        d«      ‚)ú”Show a yes/no question.

        Return True if the user selected "Yes", False if selected "No" or
        "None" on cancel/dialog closing.
        r?  r@  ©rÆ   r(   s     r   r(  zUserInterface.ui_question_yesnoû  rG  r1   c                 ó   — t        d«      ‚)ám  Show an question with predefined choices.

        options is a list of strings to present. If multiple is True, they
        should be check boxes, if multiple is False they should be radio
        buttons.

        Return list of selected option indexes, or None if the user cancelled.
        If multiple == False, the list will always have one element.
        r?  r@  ©rÆ   r(   ÚoptionsÚmultiples       r   r=  z UserInterface.ui_question_choice  s   € ô "Ð"RÓSÐSr1   c                 ó   — t        d«      ‚)úmShow a file selector dialog.

        Return path if the user selected a file, or None if cancelled.
        r?  r@  rU  s     r   Úui_question_filezUserInterface.ui_question_file  rI  r1   r  )NFN)TN)<r±   r²   r³   r´   r  r+   rÇ   rÒ   rÏ   ÚstaticmethodrÎ   rý   rü   r  rG   r  r6  r  rE  rV  r   rg  Ú	Namespacerl  rÅ   rˆ  r�  r�  r•  r°   r­   rã   rÁ  rá   rì  r  rè   rÍ   rç   r:  ræ   r  r   r¬   rà   r.  rÞ   rÖ  rÜ  rä  r  r†  r  r!  rí  r“  r¡  r(  r=  r]  rH   r1   r   r·   r·   U  s  „ ñð*˜T #™Yó *ò>"òHxðt ñ-ó ð-ò2ðh ñó ðð ñ*ó ð*ñ}¨S°4©Zð }À4ó }ð~] 4ó ]ò~1òf
$òM"ðf ð ¨¡ð °(×2DÑ2Dò ó ðð*U˜t C™yð U¨X×-?Ñ-?ó Uðn ñIó ðIòòò&òò0ðB'°ð '¸ó 'òR&ðR JNókòZ	Dò>ò*Mò^*òXò2ò@ òD1ð GKñTØ!%ðTØ9<¸t¹ðTà	óTòTòTòTòTòTòTðT¨u°t©|ð TÀó TòTòòTòTòTò
TóTr1   r·   c                   ó<   — e Zd ZdZd„ Zd„ Zd„ Zd
d„Zd„ Zd„ Z	d„ Z
y	)r€   ag  Interactive functions which can be used in package hooks.

    This provides an interface for package hooks which need to ask interactive
    questions. Directly passing the UserInterface instance to the hooks needs
    to be avoided, since we need to call the UI methods in a different thread,
    and also don't want hooks to be able to poke in the UI.
    c                 ó    — || _         t        j                  «       | _        t        j                  «       | _        d| _        d| _        d| _        y)zSCreate a HookUI object.

        ui is the UserInterface instance to wrap.
        N)r¢   r  r  Ú_request_eventÚ_response_eventÚ_request_fnÚ_request_argsÚ	_response)rÆ   r¢   s     r   rÇ   zHookUI.__init__   sB   € ð
 ˆŒô (Ÿo™oÓ/ˆÔÜ(Ÿ™Ó0ˆÔØˆÔØ!ˆÔØˆ�r1   c                 ó(   — | j                  dd|«      S )z¼Show an information with OK/Cancel buttons.

        This can be used for asking the user to perform a particular action,
        such as plugging in a device which does not work.
        r.  r   ©Ú_trigger_ui_requestrU  s     r   ÚinformationzHookUI.information2  s   € ð ×'Ñ'Ð(9¸2¸tÓDÐDr1   c                 ó&   — | j                  d|«      S )rT  r(  rh  rU  s     r   ÚyesnozHookUI.yesno:  s   € ð ×'Ñ'Ð(;¸TÓBÐBr1   c                 ó*   — | j                  d|||«      S )rW  r=  rh  rX  s       r   ÚchoicezHookUI.choiceB  s   € ð ×'Ñ'Ð(<¸dÀGÈXÓVÐVr1   c                 ó&   — | j                  d|«      S )r\  r]  rh  rU  s     r   ÚfilezHookUI.fileN  s   € ð
 ×'Ñ'Ð(:¸DÓAÐAr1   c                 óz  — | j                   j                  «       rJ ‚| j                  j                  «       rJ ‚| j                  �J ‚d| _        || _        || _        | j                   j                  «        | j                  j                  «        d| _        | j                  j                  «        | j                  S )z5Called by HookUi functions in info collection thread.N)	rb  Úis_setrc  rd  rf  re  r  r  rß  )rÆ   ÚfnrL   s      r   ri  zHookUI._trigger_ui_requestY  s¥   € ð ×&Ñ&×-Ñ-Ô/Ð/Ð/Ø×'Ñ'×.Ñ.Ô0Ð0Ð0Ø×ÑÐ'Ð'Ð'àˆŒØˆÔØ!ˆÔØ×Ñ×ÑÔ!Ø×Ñ×!Ñ!Ô#àˆÔØ×Ñ×"Ñ"Ô$à�~‰~Ðr1   c                 ót  — | j                   j                  d«       | j                   j                  «       sy| j                  j                  «       rJ ‚| j                   j	                  «         t        | j                  | j                  «      | j                  Ž | _	        | j                  j                  «        y)z;Called by GUI thread to check and process hook UI requests.rÑ  N)rb  r  rr  rc  rß  r  r¢   rd  re  rf  r  r”  s    r   rÝ  zHookUI.process_eventk  sŽ   € ð 	×Ñ× Ñ  Ô%Ø×"Ñ"×)Ñ)Ô+Øà×'Ñ'×.Ñ.Ô0Ð0Ð0Ø×Ñ×!Ñ!Ô#Ø;œ §¡¨$×*:Ñ*:Ó;¸T×=OÑ=OÐPˆŒØ×Ñ× Ñ Õ"r1   N©F)r±   r²   r³   r´   rÇ   rj  rl  rn  rp  ri  rÝ  rH   r1   r   r€   r€     s.   „ ñòò$EòCó
WòBòó$
#r1   r€   c                   óN   ‡ — e Zd ZdZˆ fd„Zdefd„Zd„ Zd„ Zd
d„Z	d„ Z
d	„ Zˆ xZS )r×  z8HookUI variant that does not ask the user any questions.c                 ó$   •— t         ‰| �  d «       y r  )ÚsuperrÇ   )rÆ   Ú	__class__s    €r   rÇ   zNoninteractiveHookUI.__init__{  s   ø€ Ü‰Ñ˜Õr1   r   c                 ó4   — | j                   j                  › d�S )Nz())ry  r±   r”  s    r   Ú__repr__zNoninteractiveHookUI.__repr__~  s   € Ø—.‘.×)Ñ)Ð*¨"Ð-Ð-r1   c                  ó   — y r  rH   rU  s     r   rj  z NoninteractiveHookUI.information�  ó   € Ør1   c                  ó   — y r  rH   rU  s     r   rl  zNoninteractiveHookUI.yesno„  r}  r1   c                  ó   — y r  rH   rX  s       r   rn  zNoninteractiveHookUI.choice‡  r}  r1   c                  ó   — y r  rH   rU  s     r   rp  zNoninteractiveHookUI.fileŠ  r}  r1   c                 ó.   — t        j                  d«       y )NrÑ  )rÿ   r   r”  s    r   rÝ  z"NoninteractiveHookUI.process_event�  s   € ä�
‰
�3�r1   ru  )r±   r²   r³   r´   rÇ   r+   r{  rj  rl  rn  rp  rÝ  Ú__classcell__)ry  s   @r   r×  r×  x  s0   ø„ ÙBôð.˜#ó .òòóòör1   r×  r  )NF)Br´   rg  rº  r5  Údataclassesrg   r   r9  r  r  r„  Úos.pathr   rX   r  r   r‘  rù   r  r)   rŠ   r  rÿ   r�   Úurllib.errorr  rþ  râ  Úcollections.abcr   r•   Útypingr   Úapport.crashdbr;   Úapport.fileutilsÚapport.loggingÚapport.REThreadÚapport.packaging_implr   r–   Úapport.user_groupr   rP  r   r   r:  r  r   r+   r   r    r0   r¼  rC   rG   rI   r  rd   rk   rª   Ú	dataclassr¬   r·   r€   r×  rH   r1   r   ú<module>r�     sŒ  ðñó& Û 
Û Û Û Û Û Û Û 	Û Û Û 
Û Û 	Û Û Û Û Û 
Û Û Û Û Û Û Ý $Ý  Ý ã Û Û Û Ý 3Ý 8à€ð —Z‘Z—^‘^Ð$9Ð;WÓXÐ Ø€
òñ	�cð 	 C¨$¡Jð 	¸#À¹*ó 	ð	' sð 	'°ð 	'¸¸t¹ó 	'ð˜Cð  D¨¨c¨¡Nó ð8P�Tó Pð .3ò&Ø
ˆs‰)ð&Ø&*ð&Ø>Að&à	ó&òRð NSóN$ðb ×Ñ÷ð ó ð÷Tñ T÷D6^#ñ ^#ôB˜6õ r1   