£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    =_jf              N   @   s8  d Z ddlmZ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ZddlZddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ydd	lmZ W n ek
r   dZY nX ydd
lmZ W n ek
r   dZY nX e
jdkrddlZndZe
jd dkZdddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZgNZejd[kZejd\kZe
jd]Ze
jd^Z e Z!e
jd_Z"e
jd`Z#e
jdaZ$e"pe#pe$Z%e
jdbZ&e
jdcZ'ddZ(deZ)dfZ*dgZ+dhZ,diZ-djZ.dkZ/dlZ0dmZ1dnZ2doZ3dpZ4dqZ5drZ6dsZ7dtZ8duZ9dvZ:dwZ;dxZ<dyZ=dzZ>d{Z?d|Z@d}ZAedkrd~ZBdZCdZDn G dd dejEZFeG HeFjI edkrdZJdZKn G dd dejEZLeG HeLjI e
M ZNesdZOn2ye
P ZOW n$ eQk
rH   er@dndZOY nX edHddddddgZRedDddddgZSedBddddddgZTedCddddddgZUedEddddddddgZVedIdddddgZWed@dddddddgZXedFdddddgZYedGddddgZZedAddddgZ[eddddgZ\edddddgZ]eddddgZ^edddgZ_ed8ddddgZ`ed=ddgZaed>dddgZbed?dddgZced:dddgZded;ddddgZeed<ddgZfed9ddgZged7ddddddgZhedddgZieeegeegfeegegfegegfeegegfegegfeegeegfegeegfegeegfdלZjedk	rejHegegfegegfd؜ edk	rejHdegeegfi G ddۄ dekZlG dd݄ delZmG dd߄ demZnG dd delZoG dd delZpdddPZqddM Zrdd ZsddL ZtddO ZuerddQ ZvddN ZwddR ZxddS ZydddVZzddK Z{G dd dZ|ddT Z}e| Z~e~je}_e~je}_dd Zdd ZdddUZdd Zerdd Zndd Zere
jfddYZdd dXZdde
jfddZZeeddr*ddlZddW Zn
ddW ZdS (	  z9Common objects shared by __init__.py and _ps*.py modules.    )divisionprint_functionN)defaultdict)
namedtuple)AF_INET)
SOCK_DGRAM)SOCK_STREAM)AF_INET6)AF_UNIX)      r   FREEBSDBSDLINUXNETBSDOPENBSDMACOSOSXPOSIXSUNOSWINDOWS
CONN_CLOSECONN_CLOSE_WAITCONN_CLOSINGCONN_ESTABLISHEDCONN_FIN_WAIT1CONN_FIN_WAIT2CONN_LAST_ACKCONN_LISTEN	CONN_NONECONN_SYN_RECVCONN_SYN_SENTCONN_TIME_WAITNIC_DUPLEX_FULLNIC_DUPLEX_HALFNIC_DUPLEX_UNKNOWNSTATUS_DEADSTATUS_DISK_SLEEPSTATUS_IDLESTATUS_LOCKEDSTATUS_RUNNINGSTATUS_SLEEPINGSTATUS_STOPPEDSTATUS_SUSPENDEDSTATUS_TRACING_STOPSTATUS_WAITINGSTATUS_WAKE_KILLSTATUS_WAKINGSTATUS_ZOMBIESTATUS_PARKEDENCODINGENCODING_ERRSr	   pconn	pcputimespctxswpgidspiopionice	popenfilepthreadpuidssconn	scpustatssdiskio	sdiskpart
sdiskusagesnetiosnicaddr	snicstatssswapsuser	conn_tmapdeprecated_methodisfile_strictmemoizeparse_environ_blockpath_exists_strictusage_percentsupports_ipv6sockfam_to_enumsocktype_to_enumwrap_numbersbytes2humanconn_to_ntupledebughiliteterm_supports_colorsprint_colorposixntlinuxdarwinfreebsdZopenbsdZnetbsd)sunossolarisaixrunningsleepingz
disk-sleepstoppedztracing-stopzombiedeadz	wake-killwakingidlelockedwaiting	suspendedparkedESTABLISHEDSYN_SENTSYN_RECV	FIN_WAIT1	FIN_WAIT2	TIME_WAITCLOSE
CLOSE_WAITLAST_ACKLISTENCLOSINGNONE      c               @   s   e Zd ZdZdZdZdS )	NicDuplexry   rz   r   N)__name__
__module____qualname__r#   r$   r%    r   r   A/opt/alt/python37/lib64/python3.7/site-packages/psutil/_common.pyr{      s   r{   c               @   s   e Zd ZdZdZdS )BatteryTimer   r   N)r|   r}   r~   POWER_TIME_UNKNOWNPOWER_TIME_UNLIMITEDr   r   r   r   r      s   r   replacesurrogateescapetotalusedfreepercentsinsout
read_countwrite_count
read_byteswrite_bytes	read_time
write_timedevice
mountpointfstypeoptsmaxfilemaxpath
bytes_sent
bytes_recvpackets_sentpackets_recverrinerroutdropindropoutnameterminalhoststartedpidfdfamilytypeladdrraddrstatusaddressnetmask	broadcastptpisupduplexspeedmtuctx_switches
interruptssoft_interruptssyscallsscpufreqcurrentminmaxshwtemplabelhighcriticalsbatterysecsleftpower_pluggedsfanusersystemchildren_userchildren_systempathid	user_timesystem_timereal	effectivesavedioclassvalue	voluntaryinvoluntaryaddripport)alltcptcp4udpudp4inetinet4inet6)tcp6udp6unixc               @   s*   e Zd ZdZdZd	ddZdd ZeZdS )
ErrorzQBase exception class. All other psutil exceptions inherit
    from this one.
    psutil c             C   s   t | | || _d S )N)	Exception__init__msg)selfr   r   r   r   r     s    zError.__init__c             C   s   d| j j| jf }| S )Nzpsutil.%s %s)	__class__r|   r   strip)r   retr   r   r   __repr__  s    zError.__repr__N)r   )r|   r}   r~   __doc__r   r   __str__r   r   r   r   r     s
   
r   c               @   s   e Zd ZdZdZdddZdS )NoSuchProcesszXException raised when a process with a certain PID doesn't
    or no longer exists.
    r   Nc             C   sX   t | | || _|| _|| _|d krT|r@d| jt| jf }n
d| j }d| | _d S )Nz(pid=%s, name=%s)z(pid=%s)zprocess no longer exists )r   r   r   r   r   repr)r   r   r   r   detailsr   r   r   r   '  s    
zNoSuchProcess.__init__)NN)r|   r}   r~   r   r   r   r   r   r   r   !  s   r   c               @   s   e Zd ZdZdZdddZdS )ZombieProcessa1  Exception raised when querying a zombie process. This is
    raised on macOS, BSD and Solaris only, and not always: depending
    on the query the OS may be able to succeed anyway.
    On Linux all zombie processes are querable (hence this is never
    raised). Windows doesn't have zombie processes.
    r   Nc             C   s~   t | | || _|| _|| _|| _|d krzd| g}|rN|dt| j  |rb|d| j  dd| }d| | _d S )Nzpid=%szname=%szppid=%sz(%s)z, z'process still exists but it's a zombie )	r   r   r   ppidr   r   appendr   join)r   r   r   r   r   argsr   r   r   r   r   =  s    
zZombieProcess.__init__)NNN)r|   r}   r~   r   r   r   r   r   r   r   4  s   r   c               @   s   e Zd ZdZdZdddZdS )AccessDeniedz@Exception raised when permission to perform an action is denied.r   Nc             C   sj   t | | || _|| _|| _|d krf|d k	rJ|d k	rJd|t|f | _n|d k	r`d| j | _nd| _d S )Nz(pid=%s, name=%s)z(pid=%s)r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   Q  s    zAccessDenied.__init__)NNN)r|   r}   r~   r   r   r   r   r   r   r   M  s   r   c               @   s   e Zd ZdZdZdddZdS )TimeoutExpiredzWRaised on Process.wait(timeout) if timeout expires and process
    is still alive.
    r   Nc             C   sn   t | d|  || _|| _|| _|d k	rN|d k	rN|  jd|t|f 7  _n|d k	rj|  jd| j 7  _d S )Nztimeout after %s secondsz (pid=%s, name=%s)z	 (pid=%s))r   r   secondsr   r   r   r   )r   r   r   r   r   r   r   r   e  s    zTimeoutExpired.__init__)NN)r|   r}   r~   r   r   r   r   r   r   r   _  s   r   c             C   sD   yt | | d }W n tk
r(   dS X |dk	r<t||}|S dS )z5Calculate percentage usage of 'used' against 'total'.d   g        N)floatZeroDivisionErrorround)r   r   round_r   r   r   r   rO   u  s    
c                s2   t  fdd} fdd}i  ||_|S )a  A simple memoize decorator for functions supporting (hashable)
    positional arguments.
    It also provides a cache_clear() function for clearing the cache:

    >>> @memoize
    ... def foo()
    ...     return 1
        ...
    >>> foo()
    1
    >>> foo.cache_clear()
    >>>
    c                 sH   | t t| f}y | S  tk
rB   | | } |< |S X d S )N)	frozensetsorteditemsKeyError)r   kwargskeyr   )cachefunr   r   wrapper  s    zmemoize.<locals>.wrapperc                  s       dS )zClear cache.N)clearr   )r  r   r   cache_clear  s    zmemoize.<locals>.cache_clear)	functoolswrapsr	  )r  r  r	  r   )r  r  r   rL     s
    	c                s6   t   fdd}dd }dd }||_||_|S )a  A memoize decorator which is disabled by default. It can be
    activated and deactivated on request.
    For efficiency reasons it can be used only against class methods
    accepting no arguments.

    >>> class Foo:
    ...     @memoize
    ...     def foo()
    ...         print(1)
    ...
    >>> f = Foo()
    >>> # deactivated (default)
    >>> foo()
    1
    >>> foo()
    1
    >>>
    >>> # activated
    >>> foo.cache_activate(self)
    >>> foo()
    1
    >>> foo()
    >>> foo()
    >>>
    c                sP   y| j   }W n< tk
r&    | S  tk
rJ    |  }| j  < Y nX |S )N)_cacheAttributeErrorr  )r   r   )r  r   r   r    s    z'memoize_when_activated.<locals>.wrapperc             S   s
   i | _ dS )zjActivate cache. Expects a Process instance. Cache will be
        stored as a "_cache" instance attribute.N)r  )procr   r   r   cache_activate  s    z.memoize_when_activated.<locals>.cache_activatec             S   s"   y| ` W n tk
r   Y nX dS )zDeactivate and clear cache.N)r  r  )r  r   r   r   cache_deactivate  s    z0memoize_when_activated.<locals>.cache_deactivate)r
  r  r  r  )r  r  r  r  r   )r  r   memoize_when_activated  s    r  c          
   C   sV   yt | }W n6 tk
rD } z|jtjtjfkr4 dS d}~X Y nX t|jS dS )zSame as os.path.isfile() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    FN)osstatOSErrorerrnoEPERMEACCESS_ISREGst_mode)r   sterrr   r   r   rK     s    c          
   C   sN   yt |  W n6 tk
rD } z|jtjtjfkr4 dS d}~X Y nX dS dS )zSame as os.path.exists() but does not swallow EACCES / EPERM
    exceptions, see:
    http://mail.python.org/pipermail/python-dev/2012-June/120787.html
    FNT)r  r  r  r  r  r  )r   r  r   r   r   rN     s    c           	   C   s`   t jrtdkrdS y2t  tt j} t|  | d W dQ R X dS  t jk
rZ   dS X dS )z2Return True if IPv6 is supported on this platform.NF)z::1r   T)sockethas_ipv6r	   r   
contextlibclosingbinderror)sockr   r   r   rP     s    c             C   sz   i }d}t }xh| d|}||kr$P | d||}||krj| || }| |d | }|rb| }|||< |d }qW |S )zCParse a C environ block of environment variables into a dictionary.r    =rz   )r   findupper)datar   posWINDOWS_next_pos	equal_posr  r   r   r   r   rM     s     c             C   s0   t dkr| S y
t| S  tk
r*   | S X dS )zConvert a numeric socket family value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)enumr  AddressFamily
ValueError)numr   r   r   rQ   "  s    
c             C   s0   t dkr| S y
t| S  tk
r*   | S X dS )zConvert a numeric socket type value to an IntEnum member.
    If it's not a known member, return the numeric value itself.
    N)r,  r  
SocketKindr.  )r/  r   r   r   rR   /  s    
c             C   s   |t jtfkr&|rt| }|r&t| }|t jkrJ|ttfkrJ||t}nt}t|}t|}|dkrxt	| |||||S t
| ||||||S dS )z2Convert a raw connection tuple to a proper ntuple.N)r  r   r	   r   r   getr   rQ   rR   r6   r?   )r   famtype_r   r   r   
status_mapr   r   r   r   rU   <  s    c                s    fdd}|S )zA decorator which can be used to mark a method as deprecated
    'replcement' is the method name which will be called instead.
    c                s:   d| j f  | jd kr | _t|  fdd}|S )Nz8%s() is deprecated and will be removed; use %s() insteadc                s    t j tdd t| ||S )Nry   )category
stacklevel)warningswarnDeprecationWarninggetattr)r   r   r  )r   replacementr   r   innerY  s    z/deprecated_method.<locals>.outer.<locals>.inner)r|   r   r
  r  )r  r<  )r;  )r   r   outerS  s    
z deprecated_method.<locals>.outerr   )r;  r=  r   )r;  r   rJ   O  s    c               @   sB   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZdd Z	d
S )_WrapNumberszNWatches numbers so that they don't overflow and wrap
    (reset to zero).
    c             C   s    t  | _i | _i | _i | _d S )N)	threadingLocklockr  	remindersreminder_keys)r   r   r   r   r   f  s    
z_WrapNumbers.__init__c             C   sT   || j kst|| jkst|| jks*t|| j |< tt| j|< tt| j|< d S )N)r  AssertionErrorrB  rC  r   intset)r   
input_dictr   r   r   r   	_add_dictl  s    
z_WrapNumbers._add_dictc             C   sd   | j | }t| t|  }x<|D ]4}x"| j| | D ]}| j| |= q<W | j| |= q(W dS )zIn case the number of keys changed between calls (e.g. a
        disk disappears) this removes the entry from self.reminders.
        N)r  rF  keysrC  rB  )r   rG  r   old_dict	gone_keysgone_keyremkeyr   r   r   _remove_dead_reminderst  s    

z#_WrapNumbers._remove_dead_remindersc          	   C   s  || j kr| || |S | || | j | }i }x| D ]}|| }y|| }W n tk
rt   |||< w>Y nX g }xvtt|D ]f}	||	 }
||	 }||	f}|
|k r| j| |  |7  < | j| | 	| |
|
| j| |   qW t|||< q>W || j |< |S )zkCache dict and sum numbers which overflow and wrap.
        Return an updated copy of `input_dict`
        )r  rH  rN  rI  r  rangelenrB  rC  addr   tuple)r   rG  r   rJ  new_dictr  input_tuple	old_tuplebitsiinput_value	old_valuerM  r   r   r   run  s2    


z_WrapNumbers.runNc          	   C   sh   | j X |dkr0| j  | j  | j  n*| j|d | j|d | j|d W dQ R X dS )z>Clear the internal cache, optionally only for function 'name'.N)rA  r  r  rB  rC  pop)r   r   r   r   r   r	    s    

z_WrapNumbers.cache_clearc          	   C   s"   | j  | j| j| jfS Q R X dS )z5Return internal cache dicts as a tuple of 3 elements.N)rA  r  rB  rC  )r   r   r   r   
cache_info  s    z_WrapNumbers.cache_info)N)
r|   r}   r~   r   r   rH  rN  rZ  r	  r\  r   r   r   r   r>  a  s   '
r>  c          	   C   s   t j t | |S Q R X dS )zGiven an `input_dict` and a function `name`, adjust the numbers
    which "wrap" (restart from zero) across different calls by adding
    "old value" to "new value" and return an updated dict.
    N)_wnrA  rZ  )rG  r   r   r   r   rS     s    c             K   s   t | df|S )Nrb)open)fnamer  r   r   r   open_binary  s    ra  c             K   s*   t r|dt |dt t| df|S )zOn Python 3 opens a file in text mode by using fs encoding and
    a proper en/decoding errors handler.
    On Python 2 this is just an alias for open(name, 'rt').
    encodingerrorsrt)PY3
setdefaultr4   r5   r_  )r`  r  r   r   r   	open_text  s    rg  %(value).1f%(symbol)sc             C   s   d}i }x0t |dd D ]\}}d|d d > ||< qW x>t|dd D ]*}| || krLt| ||  }|t  S qLW |t|d | d S )zUsed by various scripts. See:
    http://goo.gl/zeJZl

    >>> bytes2human(10000)
    '9.8K'
    >>> bytes2human(100001221)
    '95.4M'
    )	BKMGTPEZYrz   N
   r   )symbolr   )	enumeratereversedr   localsdict)nformatsymbolsprefixrW  srs  r   r   r   r   rT     s    	c               C   s   t jd jS )z+Return updated psutil.PROCFS_PATH constant.r   )sysmodulesPROCFS_PATHr   r   r   r   get_procfs_path  s    r  c             C   s   | j ttdS )N)rb  rc  )decoder4   r5   )r|  r   r   r   r    s    r  c             C   s   | S )Nr   )r|  r   r   r   r    s    c             C   s^   t jdkrdS y2dd l}|  s$t|  |ddks>tW n tk
rT   dS X dS d S )Nr[   Tr   colorsF)r  r   cursesisattyrD  	setuptermtigetnumr   )filer  r   r   r   rX     s    
Fc             C   s   t  s
| S g }tddddddddd	d
	}d|d< y|| }W n( tk
rd   tdt|  Y nX || |r~|d dd|| f S )z*Return an highlighted version of 'string'.329133933435363730)	greenredbrownyellowblueviolet	lightbluegreydarkgrey29Nz#invalid color %r; choose between %s1z[%sm%s[0m;)rX   rw  r  r.  listrI  r   r   )r|  colorboldattrr  r   r   r   rW     s    

c          	   C   s  t  st| |d ntr.tt| |||d nddl}d}|jjj}|jjj}t	ddddd}||d< y|| }W n, t
k
r   td	|t| f Y nX |r|dkr|d
7 }|tjkrdnd}	|j|_||	}
||
| zt| |d W d||
| X dS )z$Print a colorized version of string.)r  r   N   ry   r      )r  r  r  r  z#invalid color %r; choose between %r   ii)rX   printr   rW   ctypeswindllKernel32GetStdHandleSetConsoleTextAttributerw  r  r.  r  rI  r}  stderrc_ulongrestype)r|  r  r  r  r  DEFAULT_COLORr  r  r  	handle_idhandler   r   r   rY      s0    


ZPSUTIL_DEBUGc             C   s6   t t  j\}}}}}td||| f tjd dS )z@If PSUTIL_DEBUG env var is set, print a debug message to stderr.zpsutil-debug [%s:%s]> %s)r  N)inspectgetframeinfocurrentframef_backr  r}  r  )r   r`  lineno	func_namelinesindexr   r   r   rV   F  s    c             C   s   d S )Nr   )r   r   r   r   rV   M  s    )N)N)rh  )NF)r   
__future__r   r   r  r  r
  r  r  r  r}  r?  r7  collectionsr   r   r   r   r   r	   ImportErrorr
   version_infor,  re  __all__r   r   r   platform
startswithr   r   r   r   r   r   r   r   AIXr*   r+   r'   r,   r.   r2   r&   r0   r1   r(   r)   r/   r-   r3   r   r!   r    r   r   r"   r   r   r   r   r   r   r#   r$   r%   IntEnumr{   globalsupdate__members__r   r   r   getfilesystemencodingr4   r5   getfilesystemencodeerrorsr  rG   rC   rA   rB   rD   rH   r?   rE   rF   r@   r   r   r   r   r7   r<   r=   r>   r9   r:   r;   r8   r6   r   rI   r   r   r   r   r   r   rO   rL   r  rK   rN   rP   rM   rQ   rR   rU   rJ   r>  rS   r]  r	  r\  ra  rg  rT   r  r  stdoutrX   rW   rY   boolgetenvr  rV   r   r   r   r   <module>   s|  



	

	







	




	 9W	
	"