
    :)diT                        d dl Z d dlZd dlZd dlZd dlmZ d dlZd dlmZ d dl	Z	ddl
mZmZmZ ddlmZ ddlmZ  G d	 d
ej                  Z G d dej                  Z G d dej                  Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )    N)BitArray)log   )EfuseDefineBlocksEfuseDefineFieldsEfuseDefineRegisters   )base_fields)utilc                   ,     e Zd Zd Zd fd	Zd Z xZS )
EfuseBlockc                     dS )N     selfs    d/var/www/menimich/repos/protonApp/venv/lib/python3.11/site-packages/espefuse/efuse/esp32c5/fields.pylen_of_burn_unitzEfuseBlock.len_of_burn_unit   s	     u    Fc                 x    |                                  t                                          |||           d S )N	skip_read)read_coding_schemesuper__init__)r   parentparamr   	__class__s       r   r   zEfuseBlock.__init__   s:    !!###)<<<<<r   c                    |                      d          d d d         }t          |          |                                 k     r,|                                 t          |          z
  }|d|z  z   }|                                 | j        j        j        k    rIt          j        d          }|	                    d |D                       }t          j        d|          }n+t          j        dd	t          |          d
z  z  z   |          }|S )NF	from_read       c                     g | ]}|S r   r   ).0xs     r   
<listcomp>z2EfuseBlock.apply_coding_scheme.<locals>.<listcomp>,   s    %6%6%6Aa%6%6%6r   z<IIIIIIIIIII<I   )get_rawlenr   get_coding_schemer   REGSCODING_SCHEME_RSreedsoloRSCodecencodestructunpack)r   dataadd_empty_bytesrsencoded_datawordss         r   apply_coding_schemezEfuseBlock.apply_coding_scheme"   s    ||e|,,TTrT2t99t,,...."3355D		AO7_45D!!##t{'7'HHH !"%%B99%6%6%6%6%677LM.,??EE M#D		Q)?"@$GGEr   F)__name__
__module____qualname__r   r   r;   __classcell__r   s   @r   r   r      s[          
= = = = = =      r   r   c                   v     e Zd ZdZ	 	 	 	 d fd	Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd ZddZd Z xZS )	EspEfuseszQ
    Wrapper object to manage the efuse fields in a connected ESP bootloader
    FNc                     t                                          ||||           t                       _        t	          |           _        t           _         j                                         _	         j        
                                 _        |j        dk    rt          j        d|j         d          s: j                                        d         }d}||z  rt          j        d           fd j        j        D              _        s                                   fd j        j        D              _         xj         fd	 j        j        D             z  c_        r( xj         fd
 j        j        D             z  c_        d S                                  dk    r& xj         fd j        j        D             z  c_         xj         fd j        j        D             z  c_        d S )NzESP32-C5z8Expected the 'esp' param for ESP32-C5 chip but got for 'z'.flagsr+   z>Secure Download Mode is enabled. The tool can not read eFuses.c                 d    g | ],}t          j                            |                     -S )r   )r   Blocksget)r&   blockr   skip_connects     r   r(   z&EspEfuses.__init__.<locals>.<listcomp>T   sF     
 
 
 tT[__U33|LLL
 
 
r   c                 F    g | ]}t                               |          S r   
EfuseFieldconvertr&   efuser   s     r   r(   z&EspEfuses.__init__.<locals>.<listcomp>Z   s)    WWW5z))$66WWWr   c                 F    g | ]}t                               |          S r   rL   rO   s     r   r(   z&EspEfuses.__init__.<locals>.<listcomp>[   s6     
 
 
05JtU++
 
 
r   c                 F    g | ]}t                               |          S r   rL   rO   s     r   r(   z&EspEfuses.__init__.<locals>.<listcomp>_   s9        ""4//  r   r   c                 F    g | ]}t                               |          S r   rL   rO   s     r   r(   z&EspEfuses.__init__.<locals>.<listcomp>e   9           &&tU33     r   c                 F    g | ]}t                               |          S r   rL   rO   s     r   r(   z&EspEfuses.__init__.<locals>.<listcomp>i   s6       49
""4//  r   )r   r   r   rG   r   Fieldsr   r/   get_burn_block_data_namesBURN_BLOCK_DATA_NAMESget_blocks_for_keysBLOCKS_FOR_KEYS	CHIP_NAMEesptool
FatalError_espget_security_infoBLOCKSblocksget_coding_scheme_warningsEFUSESefuses	KEYBLOCKSBLOCK2_CALIBRATION_EFUSESget_block_versionCALC)	r   esprJ   debugdo_not_confirmextend_efuse_tablerE   -GET_SECURITY_INFO_FLAG_SECURE_DOWNLOAD_ENABLEr   s	   ` `     r   r   zEspEfuses.__init__;   s    	lE>CUVVV'))'(:;;(	%)[%J%J%L%L"#{>>@@=J&&$\3=\\\    	I//11':E<B9DD (T  
 
 
 
 
+
 
 
  	.++---WWWWDKDVWWW 
 
 
 
9=9N
 
 
 	
  	KK    ![B   KKKK
 %%''1,,        !%!F       KK    =A[=M   KKKKr   c                      j         D ]1}|j        k    s t          fd|j        D                       r|c S 2d} j        j        D ]U}|j        k    s t          fd|j        D                       r( xj          fd j        j        D             z  c_         d}V|r9 j         D ]1}|j        k    s t          fd|j        D                       r|c S 2t          )z*Return the efuse field with the given namec              3   $   K   | ]
}|k    V  d S Nr   r&   r'   
efuse_names     r   	<genexpr>z(EspEfuses.__getitem__.<locals>.<genexpr>p   s'      *P*Pq1
?*P*P*P*P*P*Pr   Fc              3   $   K   | ]
}|k    V  d S rp   r   rq   s     r   rs   z(EspEfuses.__getitem__.<locals>.<genexpr>t   s8       / /$%Z/ / / / / /r   c                 F    g | ]}t                               |          S r   rL   rO   s     r   r(   z)EspEfuses.__getitem__.<locals>.<listcomp>w   rT   r   Tc              3   $   K   | ]
}|k    V  d S rp   r   rq   s     r   rs   z(EspEfuses.__getitem__.<locals>.<genexpr>~   s'      .T.T1qJ.T.T.T.T.T.Tr   )rd   nameany	alt_namesrV   rf   KeyError)r   rr   e
new_fieldsrP   s   ``   r   __getitem__zEspEfuses.__getitem__m   sS    	 	AQV##s*P*P*P*PAK*P*P*P'P'P# $
[: 	" 	"EzZ''3 / / / /)./ / / , ,'         !%!F       "
 	[  ''3.T.T.T.T.T.T.T+T+T'HHH (r   c                 (    | j         j        | _        d S rp   )r/   r0   coding_schemer   s    r   r   zEspEfuses.read_coding_scheme   s    !Y7r   c                    t          j        d           | j        d                             | j        d         j        dd           t          j        d                    d|                     | j        j                                       t          j        d                    d|                     | j        j	                                       d S )	N r   	err__regsT)rj   z{:27} 0x{:08x}EFUSE_RD_RS_ERR0_REGEFUSE_RD_RS_ERR1_REG)
r   printra   print_blockerr_bitarrayformatread_regr/   r   r   r   s    r   print_status_regszEspEfuses.print_status_regs   s    	"A""4;q>#>SW"XXX	##&di6T(U(U 	
 	
 	

 		##&di6T(U(U 	
 	
 	
 	
 	
r   c                 ~    |                                   |                                  |                                  d S rp   )set_efuse_timingclear_pgm_registerswait_efuse_idler   s    r   efuse_controller_setupz EspEfuses.efuse_controller_setup   s>      """r   c                 X    |                      |           |                     d          S )NT)silent)efuse_programrb   r   rI   s     r   write_efuseszEspEfuses.write_efuses   s-    5!!!..d.;;;r   c                     |                                   t          | j        j        | j        j        dz   d          D ]}|                     |d           d S )Nr   r+   r   )r   ranger/   EFUSE_PGM_DATA0_REG	write_reg)r   rs     r   r   zEspEfuses.clear_pgm_registers   sf    I)49+H2+Mq
 
 	! 	!A NN1a    	! 	!r   c                    t          j                     | j        j        z   }t          j                     |k     r~| j        j        | j        j        z  }|                     | j        j                  |z  dk    r(|                     | j        j                  |z  dk    rd S t          j                     |k     ~t          j        d          )Nr   z:Timed out waiting for eFuse controller command to complete)	timer/   EFUSE_BURN_TIMEOUTEFUSE_PGM_CMDEFUSE_READ_CMDr   EFUSE_CMD_REGr\   r]   )r   deadlinecmdss      r   r   zEspEfuses.wait_efuse_idle   s    9;;!==ikkH$$9*TY-EED}}TY455<AA==!899D@AEE F ikkH$$  H
 
 	
r   c                 Z   |                                   |                     | j        j        | j        j                   |                     | j        j        | j        j        |dz  z             |                                   |                                  |                                  d S )Nr	   )	r   r   r/   EFUSE_CONF_REGEFUSE_WRITE_OP_CODEr   r   r   
efuse_readr   s     r   r   zEspEfuses.efuse_program   s    ty/1NOOOty.	0G5TU:0VWWW  """r   c                 \   |                                   |                     | j        j        | j        j                   	 |                     | j        j        | j        j        d           |                                   d S # t          j        $ r | j	        j
        }	 |                     | j	                  | _	        n# t          j        $ r t          j        d           | d                                         sl| d                             d          rPt          j        d           t          j        d           t          j        d	           t          j        d
            w xY wt          j        d           | j	        j
        r|st          j        d           | d                                         sl| d                             d          rPt          j        d           t          j        d           t          j        d	           t          j        d
            w xY w)Ni  )delay_after_uszCan not re-connect to the chip.DIS_DOWNLOAD_MODEFr    ztThis is the correct behavior as we are actually burning DIS_DOWNLOAD_MODE which disables the connection to the chip.zDIS_DOWNLOAD_MODE is enabled.zSuccessful.r   z'Established a connection with the chip.z Secure download mode is enabled.ENABLE_SECURITY_DOWNLOADz:espefuse can not continue to work in Secure download mode.z$ENABLE_SECURITY_DOWNLOAD is enabled.)r   r   r/   r   EFUSE_READ_OP_CODEr   r   r\   r]   r^   secure_download_modereconnect_chipr   r   rH   sysexit)r   secure_download_mode_befores     r   r   zEspEfuses.efuse_read   s9   ty/1MNNN$	NN	')ARV       """""! 	 	 	*.)*H' //	::		%   	;<<</04466 	 4'<##&&	  IW   I=>>>Im,,,HQKKK I?@@@y- 
 6Q 
 	<===67;;==  $.C##&&  IT   IDEEEIm,,,HQKKK?	s'    A B H+B?>H+?B+E**CH+c                    |                                  }|dvrt          j        d|           |                     | j        j        | j        j        d           |                     | j        j        | j        j        d           |                     | j        j        | j        j	        d           |                     | j        j
        | j        j        d           dS )z'Set timing registers for burning efuses)(   0   z3The eFuse supports only xtal=40M and 48M (xtal was    r   i 0  i  N)get_crystal_freqr\   r]   
update_regr/   EFUSE_DAC_CONF_REGEFUSE_DAC_NUM_MEFUSE_DAC_CLK_DIV_MEFUSE_WR_TIM_CONF1_REGEFUSE_PWR_ON_NUM_MEFUSE_WR_TIM_CONF2_REGEFUSE_PWR_OFF_NUM_M)r   apb_freqs     r   r   zEspEfuses.set_efuse_timing   s     ((**8##$PhPP   		4di6OQUVVVI($)*G	
 	
 	
 	I,di.JF	
 	
 	
 	I,di.KU	
 	
 	
 	
 	
r   c           
          d}d}d} j         D ]F}|j        dk    r fdt          d          D             }d|j        _        t          |          D ],}|j                            t          d|                      -|j                            d          |_	        |j	        dk    |_
        n^ j        j        |j                 \  }}	}
}|	|
|||k    r|}                     |          }|d|z  z  dk    |_
        ||
z	  |	z  |_	        ||j
        z  }|s;|j
        s|j	        r-t          j        d	|j         d
|j	         d|j
         d           H j        s|r|s                                  |S )z3Check if the coding scheme has detected any errors.r   Fc                 Z    g | ]'}                     j        j        |d z  z             (S )r+   )r   r/   EFUSE_RD_REPEAT_ERR0_REG)r&   offsr   s     r   r(   z8EspEfuses.get_coding_scheme_warnings.<locals>.<listcomp>   sC        MM$)"Dtax"OPP  r      zuint:32=TNr   zError(s) in BLOCKz	 [ERRORS: FAIL:])ra   idr   r   posreversed	overwriter   count
num_errorsfailr/   BLOCK_ERRORSr   r   r   rj   r   )r   r   old_addr_reg	reg_valueret_failrI   r:   wordaddr_regerr_num_maskerr_num_offsfail_bits   `           r   rb   z$EspEfuses.get_coding_scheme_warnings   s   	[ 	 	Ex1}}    %a   *+"&$UOO N ND&00:KT:K:K1L1LMMMM#(#5#;#;D#A#A "-2

AEAWHB>,h  '<+?8CS|++#+L $h 7 7I&!x-8A=
$-$=#M 
"H uz U-= 	```5;K``SXS]```   J 	%( 	%F 	%""$$$r   c                     dS )Nr   r   r   s    r   summaryzEspEfuses.summary  s    rr   )FFFNr<   )r=   r>   r?   __doc__r   r}   r   r   r   r   r   r   r   r   r   rb   r   r@   rA   s   @r   rC   rC   6   s         0 0 0 0 0 0d  *8 8 8
 
 
  
< < <! ! !
 
 
  * * *X
 
 
(" " " "H      r   rC   c                   $    e Zd Zed             ZdS )rM   c                     	 t          t          t          t          t          t
          d                    |j        t                    | |          S )N)mac
keypurposet_sensoradc_tprecovery_bootloaderbootloader_anti_rollback)	EfuseMacFieldEfuseKeyPurposeFieldEfuseTempSensorEfuseAdcPointCalibrationEfuseBtldrRecoveryFieldEfuseBtldrAntiRollbackFieldrH   
class_typerM   )r   rP   s     r   rN   zEfuseField.convert#  sJ    , .'.#:(C
 
 #e

+
+FE; ; 	;r   N)r=   r>   r?   staticmethodrN   r   r   r   rM   rM   "  s-        ; ; \; ; ;r   rM   c                       e Zd ZddZd ZdS )r   Tc                     | j         d                             |          }| j         d         j        dk    sJ | j         d                             |          }| j         d         j        dk    sJ |dz  |z   S )N#RECOVERY_BOOTLOADER_FLASH_SECTOR_HI   #RECOVERY_BOOTLOADER_FLASH_SECTOR_LO	   r   rH   bit_lenr   r!   hi_bitslo_bitss       r   rH   zEfuseBtldrRecoveryField.get0  s    +CDHHSS{@AIQNNNN+CDHHSS{@AIQNNNN1''r   c           
         | j         d         }|                    |dz	  dz             t          j        d|j         d|                                 d|                    d                      | j         d	         }|                    |d
z             t          j        d|j         d|                                 d|                    d                      d S )Nr   r   r   	    - ''  -> Fr    r   i  r   saver   r   rw   get_bitstringr   	new_valuerP   s      r   r   zEfuseBtldrRecoveryField.save7  s    AB

INa'(((	g
gge&9&9&;&;ggATAT_dATAeAegg	
 	
 	
 AB

9u$%%%	g
gge&9&9&;&;ggATAT_dATAeAegg	
 	
 	
 	
 	
r   NTr=   r>   r?   rH   r   r   r   r   r   r   /  s7        ( ( ( (

 

 

 

 

r   r   c                       e Zd ZddZd ZdS )r   Tc                     | j         d                             |          }| j         d         j        dk    sJ | j         d                             |          }| j         d         j        dk    sJ |dz  |z   S )N*BOOTLOADER_ANTI_ROLLBACK_SECURE_VERSION_HIr   *BOOTLOADER_ANTI_ROLLBACK_SECURE_VERSION_LOr   r   r   s       r   rH   zEfuseBtldrAntiRollbackField.getE  s    +JKOO
 
 {GHPTUUUUU+JKOO
 
 {GHPTUUUUU1''r   c           
         | j         d         }|                    |dz	  dz             t          j        d|j         d|                                 d|                    d                      | j         d	         }|                    |d
z             t          j        d|j         d|                                 d|                    d                      d S )Nr   r   r   r   r   r   Fr    r     r   r   s      r   r   z EfuseBtldrAntiRollbackField.saveP  s    HI

INa'(((	g
gge&9&9&;&;ggATAT_dATAeAegg	
 	
 	
 HI

9s?###	g
gge&9&9&;&;ggATAT_dATAeAegg	
 	
 	
 	
 	
r   Nr   r   r   r   r   r   r   D  s7        	( 	( 	( 	(

 

 

 

 

r   r   c                       e Zd ZddZdS )r   Tc                 n    |                      |          }|d         rdnd}||dd          j        z  dz  S )Nr   r"   r   g?r   uint)r   r!   valuesigs       r   rH   zEfuseTempSensor.get^  sA    ""9--!H#bb!U122Y^#c))r   Nr   r=   r>   r?   rH   r   r   r   r   r   ]  s(        * * * * * *r   r   c                       e Zd ZddZdS )r   Tc                 r    d}|                      |          }|d         rdnd}||dd          j        z  |z  S )Nr+   r   r"   r   r  )r   r!   	STEP_SIZEr  r	  s        r   rH   zEfuseAdcPointCalibration.gete  sF    	""9--!H#bb!U122Y^#i//r   Nr   r
  r   r   r   r   r   d  s(        0 0 0 0 0 0r   r   c                   2     e Zd Zd Zd ZddZ fdZ xZS )r   c                    |t          j        d          | j        dk    rdnd}|                    d          |dz
  k    rt          j        d| d          |                    dd	                              d
d          d         }|                                 r|                    d
d          d         n|}t          |          |dz  k    rt          j        d| d|dz   d          t          j	        |          }|                                 s7t           j
                            |d          dz  rt          j        d          |S )Nz1Required MAC Address in AA:CD:EF:01:02:03 format!	MAC_EUI64      :r   zMAC Address needs to be a z1-byte hexadecimal format separated by colons (:)!r    r   r	   z-byte hexadecimal number (z hexadecimal characters)!z!Custom MAC must be a unicast MAC!)r\   r]   rw   r   replacesplitis_field_calculatedr-   binascii	unhexlifyr   byte)r   new_value_str	num_byteshexadbindatas        r   check_formatzEfuseMacField.check_formatm  s    $C   k11AAq	s##y1}44$+Y + + +   %%c2..44S!<<Q?*.*B*B*D*DOC##A&&%u::Q&&$=Y = =M= = =  
 $U++'')) 	N |  !,,t3 N()LMMMr   c                     | j                             | j                  \  }}|dk    s|rd| j         d| d| d}nd}d|z   dz   S )	Nr   Blockz has ERRORS:r   .OK())r   get_block_errorsrI   )r   errsr   outputs       r   checkzEfuseMacField.check  sb    [11$*==
d1999HTZHHTHHHHHFFFV|c!!r   Tc                 0   | j         dk    r|                     |          d d d         }n| j         dk    r|                     |          }n| j         dk    rp| j        d                             |                                          }| j        d                             |          }|                    |d           |j        }n|                     |          }d                    t          j	        |d          | 
                                g          S )	N
CUSTOM_MACr"   MACr  MAC_EXT   r  r  )rw   r,   r   r   copyinsertbytesjoinr   hexifyr)  )r   r!   r   mac_exts       r   rH   zEfuseMacField.get  s    9$$,,y))$$B$/CCY%,,y))CCY+%%+e$229==BBDDCk),::9EEGJJw###)CC,,y))CxxS#..

=>>>r   c                     d }| j         dk    rD|                     |          } || |           t                                          |           d S t	          j        d| j          d          )Nc           
      ~    t          j        d| j         d| j         d|                                  d|            d S )Nz    - 'z' (z) r   )r   r   rw   descriptionr   )r{   r   s     r   print_fieldz'EfuseMacField.save.<locals>.print_field  sQ    IX!&XXQ]XXaoo6G6GXXYXX    r   r+  zBurning z is not supported.)rw   convert_to_bitstringr   r   r\   r]   )r   r   r8  bitarray_macr   s       r   r   zEfuseMacField.save  s    	 	 	
 9$$44Y??LKl+++GGLL##### $%M	%M%M%MNNNr   r   )r=   r>   r?   r  r)  rH   r   r@   rA   s   @r   r   r   l  ss          8" " "? ? ? ?O O O O O O O O Or   r   c                       e Zd ZU dZeeeedz  edz  ef         Zg dZe	e         e
d<   g Ze	e         e
d<    eddez            D ]JZed eD             vr:e                    d	e eddd
f           e                    de eddd
f           Ke                    ddez  dz
  ddd
f           e                    ddez  dz
  ddd
f           eez  Zd eD             Zd eD             Zd Zd Zd ZddZd Z fdZ xZS )r   r   N))USERr   NNno_need_rd_protect)ECDSA_KEY_P256r   NReverseneed_rd_protect)	ECDSA_KEYr   Nr?  r@  )RESERVEDr   NNr=  )XTS_AES_128_KEYr+   Nr?  r@  )HMAC_DOWN_ALLr   NNr@  )HMAC_DOWN_JTAGr  NNr@  )HMAC_DOWN_DIGITAL_SIGNATUREr  NNr@  )HMAC_UPr  NNr@  )SECURE_BOOT_DIGEST0r   DIGESTNr=  )SECURE_BOOT_DIGEST1
   rI  Nr=  )SECURE_BOOT_DIGEST2   rI  Nr=  )KM_INIT_KEYr$   NNr@  )XTS_AES_128_PSRAM_KEY   Nr?  r@  )ECDSA_KEY_P192   Nr?  r@  )ECDSA_KEY_P384_L   Nr?  r@  )ECDSA_KEY_P384_H   Nr?  r@  )ECDSA_KEY_P384VIRTUALNr@  KEY_PURPOSESCUSTOM_KEY_PURPOSESr   r   c                     g | ]
}|d          S )r   r   r&   ps     r   r(   zEfuseKeyPurposeField.<listcomp>  s    111qad111r   CUSTOM_r=  CUSTOM_DIGEST_rI  
CUSTOM_MAXCUSTOM_DIGEST_MAXc                     g | ]
}|d          S )r   r   r&   rw   s     r   r(   zEfuseKeyPurposeField.<listcomp>  s    :::Ta:::r   c                 6    g | ]}|d          dk    |d         S )r	   rI  r   r   rd  s     r   r(   zEfuseKeyPurposeField.<listcomp>  s*    SSSttAw(?R?R47?R?R?Rr   c                 .   |}| j         D ]%}|d         |k    rt          |d                   } n&|                                r9t          |          d | j         D             vrt	          j        d| d          nt	          j        d| d          |S )Nr   r   c                 6    g | ]}|d          dk    |d          S )r   r   r   r]  s     r   r(   z5EfuseKeyPurposeField.check_format.<locals>.<listcomp>  s%    #P#P#PQqtaxxAaDxxxr   'z&' can not be set (value out of range).z' unknown name.)rZ  strisdigitintr\   r]   )r   r  raw_valpurpose_names       r   r  z!EfuseKeyPurposeField.check_format  s       - 	 	LA-//l1o.. 0 ?? 	C7||#P#P$2C#P#P#PPP()\W)\)\)\]]] Q $%A%A%A%ABBBr   c                 N    | j         D ]}|d         |k    r|d         dk    c S d S )Nr   r   r?  rZ  r   new_key_purposekeys      r   need_reversez!EfuseKeyPurposeField.need_reverse  sG    $ 	+ 	+C1v((1v**** )	+ 	+r   c                 N    | j         D ]}|d         |k    r|d         dk    c S d S )Nr   r+   r@  ro  rp  s      r   r@  z$EfuseKeyPurposeField.need_rd_protect  sH    $ 	3 	3C1v((1v!22222 )	3 	3r   Tc                 l    | j         D ]+}|d         |                     |          k    r
|d         c S ,dS )Nr   r   FORBIDDEN_STATE)rZ  r,   )r   r!   r^  s      r   rH   zEfuseKeyPurposeField.get  sG    " 	 	Att||I....t /  r   c                 F    | j         D ]}|d         |k    r
|d         c S d S )Nr   r   ro  )r   rl  rr  s      r   get_namezEfuseKeyPurposeField.get_name  s?    $ 	 	C1v  1v !	 	r   c                     t          |                     t          |                              }t                                          |          S rp   )rk  r  ri  r   r   )r   r   rl  r   s      r   r   zEfuseKeyPurposeField.save  s:    d''I7788ww||G$$$r   r   )r=   r>   r?   key_purpose_lentupleri  rk  KeyPurposeTyperZ  list__annotations__r[  r   r   appendKEY_PURPOSES_NAMEDIGEST_KEY_PURPOSESr  rs  r@  rH   rx  r   r@   rA   s   @r   r   r     s        O3S4ZtS@AN* * *L$~&   ( 13n-222eAqO+,, j j11L11111&&"D$H\']^^^&&(=(=(=r8TSg'hiiiqO/Cq.H$PTVjklll 3a?6Ja5OQY[_auvwww''L::\:::SS|SSS  + + +
3 3 3
! ! ! !  
% % % % % % % % %r   r   )r  r4   r   r   	bitstringr   r\   esptool.loggerr   r1   mem_definitionr   r   r   r   r
   r   EfuseBlockBaser   EspEfusesBaserC   EfuseFieldBaserM   r   r   r   r   r   r   r   r   r   <module>r     sT     



                V V V V V V V V V V                +   <i i i i i) i i iX
; 
; 
; 
; 
;+ 
; 
; 
;
 
 
 
 
j 
 
 
*
 
 
 
 
* 
 
 
2* * * * *j * * *0 0 0 0 0z 0 0 0@O @O @O @O @OJ @O @O @OHI% I% I% I% I%: I% I% I% I% I%r   