
    Xh$                        d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	 d dl
Z
d dlZddlmZ  G d de          Z G d d	e          Z G d
 d          Z G d de          Z G d de          Zd ZdefdZdefdZdefdZd ZdS )    N)ABCabstractmethod)DictListOptional   )knobsc                       e Zd ZddZedee         fd            Zeddefd            Zededee	eef                  fd            Z
eded	e	eef         fd
            ZdS )CacheManagerFc                     d S N selfkeyoverridedumps       f/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/triton/runtime/cache.py__init__zCacheManager.__init__           returnc                     d S r   r   r   filenames     r   get_filezCacheManager.get_file       r   Tc                     d S r   r   r   datar   binarys       r   putzCacheManager.put   r   r   r   c                     d S r   r   r   s     r   	get_groupzCacheManager.get_group   r   r   groupc                     d S r   r   )r   r   r%   s      r   	put_groupzCacheManager.put_group   r   r   NFFT)__name__
__module____qualname__r   r   r   strr   r"   r   r$   r'   r   r   r   r   r      s            HSM    ^  #    ^ # (4S>*B    ^ # d38n    ^  r   r   c                       e Zd ZddZdefdZdefdZdee         fdZ	dedee
eef                  fdZded	e
eef         defd
ZddefdZdS )FileCacheManagerFc                    || _         d | _        |rt          j        j        | _        t          j                            | j        | j                   | _        t          j                            | j        d          | _        t          j	        | j        d           d S |rGt          j        j
        | _        t          j                            | j        | j                   | _        d S t          j        j        | _        | j        rvt          j                            | j        | j                   | _        t          j                            | j        d          | _        t          j	        | j        d           d S t          d          )NlockTexist_ok$Could not create or locate cache dir)r   	lock_pathr	   cachedump_dir	cache_dirospathjoinmakedirsoverride_dirdirRuntimeErrorr   s       r   r   zFileCacheManager.__init__$   s"    	K"[1DNW\\$.$(CCDNW\\$.&AADNK666666 	K"[5DNW\\$.$(CCDNNN #[_DN~ K!#dndh!G!G!#dnf!E!EDNT::::::"#IJJJr   r   c                 L    t           j                            | j        |          S r   )r9   r:   r;   r8   r   s     r   
_make_pathzFileCacheManager._make_path9   s    w||DNH555r   c                     | j         st          d          t          j                            |                     |                    S )Nr4   )r8   r?   r9   r:   existsrA   r   s     r   has_filezFileCacheManager.has_file<   s<    ~ 	GEFFFw~~dooh77888r   c                 Z    |                      |          r|                     |          S d S r   )rD   rA   r   s     r   r   zFileCacheManager.get_fileA   s-    =="" 	??8,,,4r   r   c                    d| }|                      |          sd S |                     |          }t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   |                    dd           }|d S i }|                                D ])\  }}	t          j        	                    |	          r|	||<   *|S N__grp__child_paths)
rD   rA   openjsonloadgetitemsr9   r:   rC   )
r   r   grp_filenamegrp_filepathfgrp_datarI   resultcps
             r   r$   zFileCacheManager.get_groupG   s   +++}}\** 	4|44, 	$1y||H	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ll=$774%%'' 	 	DAqw~~a   q	s   A""A&)A&r%   c                     | j         st          d          t          j        d|i          }d| }|                     ||d          S )Nr4   rI   rH   Fr!   )r8   r?   rK   dumpsr"   r   r   r%   grp_contentsrO   s        r   r'   zFileCacheManager.put_groupY   sU    ~ 	GEFFFz=%"899+++xxl5xAAAr   Tc                    | j         st          d          t          |t                    }|st	          |          }| j        J |                     |          }t	          t          j                              }t          j
                    }t          j                            | j         d| d|           }t          j        |d           t          j                            ||          }|rdnd}	t          ||	          5 }
|
                    |           d d d            n# 1 swxY w Y   t          j        ||           t          j        |           |S )Nr4   ztmp.pid__Tr2   wbw)r8   r?   
isinstancebytesr-   r5   rA   uuiduuid4r9   getpidr:   r;   r<   rJ   writereplace
removedirs)r   r    r   r!   filepathrnd_idpidtemp_dir	temp_pathmoderQ   s              r   r"   zFileCacheManager.put`   su   ~ 	GEFFFD%(( 	t99D~)))??8,,TZ\\""ikk7<<0I30I0I0I0IJJ
Ht,,,,GLL844	&tt3)T"" 	aGGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
9h'''
hs   D''D+.D+Nr(   r)   )r*   r+   r,   r   r-   rA   boolrD   r   r   r   r$   r'   r"   r   r   r   r/   r/   "   s       K K K K*6c 6 6 6 69D 9 9 9 9
HSM    # (4S>*B    $B# Bd38n B B B B B #      r   r/   c                   z    e Zd ZdZdefdZedee         deee	f         fd            Z
edede	fd	            Zd
S )RemoteCacheBackendzL
    A backend implementation for accessing a remote/distributed cache.
    r   c                     d S r   r   )r   r   s     r   r   zRemoteCacheBackend.__init__   r   r   	filenamesr   c                     d S r   r   )r   rq   s     r   rM   zRemoteCacheBackend.get   r   r   r   r    c                     d S r   r   r   r   r    s      r   r"   zRemoteCacheBackend.put   r   r   N)r*   r+   r,   __doc__r-   r   r   r   r   r`   rM   r"   r   r   r   ro   ro   {   s         C     T#Y 4U
+;    ^ C u    ^  r   ro   c                   t    e Zd Zd ZdedefdZdee         deeef         fdZdede	deee	f         fdZ
d	S )
RedisRemoteCacheBackendc                     dd l }|| _        t          j        j         j        | _        |                    t          j        j         j        t          j        j         j                  | _	        d S )Nr   )hostport)
redis_keyr	   r6   
key_format_key_fmtRedisry   rz   _redis)r   r   r{   s      r   r   z RedisRemoteCacheBackend.__init__   sU    	)4kk"'"' " 
 
r   r   r   c                 D    | j                             | j        |          S )N)r   r   )r~   formatr|   r   s     r   _get_keyz RedisRemoteCacheBackend._get_key   s    }##	H#EEEr   rq   c                       j                              fd|D                       }d t          ||          D             S )Nc                 :    g | ]}                     |          S r   )r   ).0rQ   r   s     r   
<listcomp>z/RedisRemoteCacheBackend.get.<locals>.<listcomp>   s%    #H#H#HDMM!$4$4#H#H#Hr   c                     i | ]
\  }}|||S r   r   )r   r   rS   s      r   
<dictcomp>z/RedisRemoteCacheBackend.get.<locals>.<dictcomp>   s%    ggg%5XvTZTf&TfTfTfr   )r   mgetzip)r   rq   resultss   `  r   rM   zRedisRemoteCacheBackend.get   sK    +""#H#H#H#Hi#H#H#HIIggY9P9Pggggr   r    c                 b    | j                             |                     |          |           d S r   )r   setr   rt   s      r   r"   zRedisRemoteCacheBackend.put   s*    h//66666r   N)r*   r+   r,   r   r-   r   r   r   rM   r`   r"   r   r   r   rw   rw      s        
 
 
F F F F F FhT#Y h4S> h h h h7C 7u 7c5j1A 7 7 7 7 7 7r   rw   c                       e Zd ZddZdedefdZdedee         fdZddedefd	Z	dedee
eef                  fd
Zdede
eef         fdZdS )RemoteCacheManagerFc                     t           j        j        }|st          d           ||          | _        || _        || _        t          |||          | _        d S )NzdUnable to instantiate RemoteCacheManager, TRITON_REMOTE_CACHE_BACKEND doesn't point to a valid class)r   r   )	r	   r6   remote_manager_classr?   _backend	_override_dumpr/   _file_cache_manager)r   r   r   r   remote_cache_clss        r   r   zRemoteCacheManager.__init__   sn     ;; 	xvx x x((--!
 $4C(QU#V#V#V   r   r   r    c                 <    | j                             ||d          S )NTrW   )r   r"   rt   s      r   _materializezRemoteCacheManager._materialize   s     '++D(4+HHHr   r   c                    | j         s| j        r| j                            |          S | j                            |g          }t          |          dk    rd S |                                \  \  }}|                     ||          S )Nr   )	r   r   r   r   r   rM   lenrN   r   )r   r   r   r\   r    s        r   r   zRemoteCacheManager.get_file   s    : 	? 	?+44X>>>
 -##XJ//w<<14]]__
	D  4000r   Tc                 (   | j         s| j        r| j                            |||          S t	          |t
                    s"t          |                              d          }| j                            ||           | 	                    ||          S )NrW   utf-8)
r   r   r   r"   r_   r`   r-   encoder   r   r   s       r   r"   zRemoteCacheManager.put   s    : 	O 	O+//hv/NNN$&& 	-t99##G,,D(D)))  4000r   c                    | j         s| j        r| j                            |          S d| }|                     |          }|d S t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   |                    dd           }d }|Mi }| j	                            |          
                                D ]\  }}	|                     ||	          ||<   |S rG   )r   r   r   r$   r   rJ   rK   rL   rM   r   rN   r   )
r   r   rO   rP   rQ   rR   rI   rS   
child_pathr    s
             r   r$   zRemoteCacheManager.get_group   s=   : 	@ 	@+55h???+++}}\224, 	$1y||H	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ll=$77 "F$(M$5$5k$B$B$H$H$J$J I I 
D%)%6%6z4%H%Hz""s   A77A;>A;r%   c           	         | j         s| j        r| j                            ||          S t	          j        dt          t          |                                                    i          }d| }| 	                    ||          S )NrI   rH   )
r   r   r   r'   rK   rX   sortedlistkeysr"   rY   s        r   r'   zRemoteCacheManager.put_group   s}    : 	G 	G+55hFFFz=&ejjll9K9K2L2L"MNN+++xxl333r   Nr(   r)   )r*   r+   r,   r   r-   r`   r   r   r   r"   r   r$   r'   r   r   r   r   r      s        W W W WIS I I I I I1 1# 1 1 1 11 1# 1s 1 1 1 1# (4S>*B    .4# 4d38n 4 4 4 4 4 4r   r   c                     t          j        t                              |                                         d                              d          S )Nr   =)base64	b32encoder`   fromhexdecoderstrip)r   s    r   _base32r      s;    EMM#..//66w??FFsKKKr   r   c                 b    t           j        j        pt          } |t	          |                     S r   r	   r6   manager_classr/   r   r   clss     r   get_cache_managerr      s(    
+
#
7'7C3ws||r   c                 f    t           j        j        pt          } |t	          |           d          S )NT)r   r   r   s     r   get_override_managerr      s-    
+
#
7'7C3ws||d++++r   c                 f    t           j        j        pt          } |t	          |           d          S )NT)r   r   r   s     r   get_dump_managerr      s-    
+
#
7'7C3ws||$''''r   c                 p   d |                                 D             }|  dd                    |                                           d| d| }|D ]}| d|                    |           }t	          j        |                    d                                                    }t          |          S )Nc                 6    i | ]\  }}||d          dk    rdn|S )r   *ptrr   )r   kvs      r   r   z%make_so_cache_key.<locals>.<dictcomp>  s.    NNNDAqQqTS[[EEaNNNr   - r   )	rN   r;   valuesrM   hashlibsha256r   	hexdigestr   )version_hash	signature	constantsidskwargsr   kws          r   make_so_cache_keyr     s    NNIOO<M<MNNNI
K
KBGGI$4$4$6$677
K
K)
K
Kc
K
KC ( (''vzz"~~''
.G,,
-
-
7
7
9
9C3<<r   )rK   r9   ra   abcr   r   typingr   r   r   r   r   r   r	   r   r/   ro   rw   r   r   r   r   r   r   r   r   r   <module>r      s    				  # # # # # # # # ' ' ' ' ' ' ' ' ' '            3   ,V V V V V| V V Vr       "7 7 7 7 70 7 7 7,J4 J4 J4 J4 J4 J4 J4 J4ZL L L
l    
, , , , ,
(\ ( ( ( (
    r   