§
    ¦A¾j0u  ã                   óP  — 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Z	dZ
dZdZdZdZdZdZdZd	Zd
Zd ZdZdZdZeeeedœZdZd„ Zed dddœed ddœed ddœed ddddddddddddœiZd„ ZedededediZd„ Zd „ Zd!„ Z d"„ Z!d#a"d$a#ea$d a%da&da'd%„ Z(d&„ Z)d'„ Z* G d(„ d)e+¦  «        Z, G d*„ d+e-¦  «        Z.i fd,„Z/d-„ Z0 G d.„ d/e1¦  «        Z2 G d0„ d1e2¦  «        Z3e4d2k    rB	  e0¦   «          dS # e2$ r-Z5 e6e5ej7        ¬3¦  «          ej8        d¦  «         Y dZ5[5dS dZ5[5ww xY wdS )4é    Ni   s   ëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿé   é   é0   é   Úv1Úv2z1.5é   é   )Ú
bootloaderÚpartition_tableÚappÚdatai 0  c                 óˆ   — 	 t           |          S # t          $ r( 	 t          | d¦  «        cY S # t          $ r | cY cY S w xY ww xY w)zUConvert a string which might be numeric or the name of a partition type to an integerr   )ÚTYPESÚKeyErrorÚintÚ	TypeError©Úptypes    ú\/home/lighthouse/esp32-dev/.cache/esp-idf-v5.5.4/components/partition_table/gen_esp32part.pyÚget_ptype_as_intr   4   sm   € ðÝ�UŒ|ÐøÝð ð ð ð	Ý�u˜a‘=”=Ð Ð Ð øÝð 	ð 	ð 	ØˆLˆLˆLˆLˆLð	øøøðøøøs$   ‚ �
Aš,©A¬=¸A¼=½A)ÚprimaryÚotaÚrecovery)r   r   é    )ÚfactoryÚtesté   é   é   é€   é�   é‚   éƒ   é�   )r   ÚphyÚnvsÚcoredumpÚnvs_keysÚefuseÚ	undefinedÚesphttpdÚfatÚspiffsÚlittlefsÚtee_otac                 ó®   — 	 t           t          | ¦  «                 |         S # t          $ r( 	 t          |d¦  «        cY S # t          $ r |cY cY S w xY ww xY w)zXConvert a string which might be numeric or the name of a partition subtype to an integerr   )ÚSUBTYPESr   r   r   r   )r   Úsubtypes     r   Úget_subtype_as_intr4   _   s|   € ðÝÕ(¨Ñ/Ô/Ô0°Ô9Ð9øÝð ð ð ð	Ý�w ‘?”?Ð"Ð"Ð"øÝð 	ð 	ð 	ØˆNˆNˆNˆNˆNð	øøøðøøøs)   ‚" ¢
A­?¼A¿AÁAÁAÁAé   c                 óX   — t                                | t           t                   ¦  «        S ©N)Ú	ALIGNMENTÚgetÚ	DATA_TYPEr   s    r   Úget_alignment_offset_for_typer;   r   s   € Ý�=Š=˜¥	­)Ô 4Ñ5Ô5Ð5ó    c                 óh   — | t           k    r&t          t          k    rdS t          t          k    rdS dS dS )Nr5   r   r	   )ÚAPP_TYPEÚsecureÚ	SECURE_V1Ú	SECURE_V2r   s    r   Úget_alignment_size_for_typerB   v   s=   € Ø•ÒÐÝ•YÒÐð �7Ý•yÒ Ð ð �6ð �6àˆ3r<   c                 óˆ   — | dk    rt           S | dk    rt          S | dk    rt          S | dk    rt          S t	          d¦  «        ‚)Nr   r   r   r   zInvalid partition type)r>   r:   ÚBOOTLOADER_TYPEÚPARTITION_TABLE_TYPEÚ
InputErrorr   s    r   Úget_partition_typerG   ‡   sQ   € Ø�‚~€~ÝˆØ�‚€ÝÐØ�ÒÐÝÐØÐ!Ò!Ð!Ý#Ð#Ý
Ð-Ñ
.Ô
.Ð.r<   c                 óð  — | D ]ò}	 d„ |                      d¦  «        D ¦   «         }t                               ¦   «         D ]W\  }}t          |d         d¦  «        |                     ¦   «         v r(|t          |d         ¦  «        k    rt          d¦  «        ‚ŒXt          |d         d¦  «        t          t          |d                           |d         <   ŒÏ# t          $ r}t          d|z  ¦  «        ‚d }~ww xY wd S )	Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS © ©Ústrip)Ú.0Úlines     r   ú
<listcomp>z&add_extra_subtypes.<locals>.<listcomp>–   s    € ÐBÐBÐB t�d—j’j‘l”lÐBÐBÐBr<   ú,r   r   r   z*Found duplicate value in partition subtyper	   z!Error parsing custom subtypes: %s)	Úsplitr2   Úitemsr   ÚvaluesrG   Ú
ValueErrorr   rF   )ÚcsvÚline_noÚfieldsr3   Úsubtype_valuesÚerrs         r   Úadd_extra_subtypesrZ   “   s  € Øð Hð Hˆð	HØBÐB¨w¯}ª}¸SÑ/AÔ/AÐBÑBÔBˆFÝ+3¯>ª>Ñ+;Ô+;ð Sð SÑ'�˜Ý�v˜a”y "Ñ%Ô%¨×)>Ò)>Ñ)@Ô)@Ð@Ð@ÀWÕPbÐciÐjkÔclÑPmÔPmÒEmÐEmÝ$Ð%QÑRÔRÐRøÝ47¸¸q¼	À2Ñ4FÔ4F�H•U˜6 !œ9Ô%Ô& v¨a¤yÑ1Ð1øÝð 	Hð 	Hð 	HÝÐ@À3ÑFÑGÔGÐGøøøøð	HøøøðHð Hs   †CCÃ
C3ÃC.Ã.C3FTc                 ó6   — t           st          | ¦  «         dS dS )zPrint status message to stderrN)ÚquietÚcritical©Úmsgs    r   Ústatusr`   §   s#   € åð Ý�‰Œˆˆˆðð r<   c                 ó‚   — t           j                             | ¦  «         t           j                             d¦  «         dS )z Print critical message to stderrú
N)ÚsysÚstderrÚwriter^   s    r   r]   r]   ­   s4   € å„J×Ò�SÑÔÐÝ„J×Ò�TÑÔÐÐÐr<   c           
      óè   — t           j        dt           j        dt           j        dt           j        dt           j        di}|                     ¦   «         D ]\  }}|                      |¦  «        r|c S ŒdS )z9Detect the encoding by checking for BOM (Byte Order Mark)z	utf-8-sigzutf-16zutf-32úutf-8)ÚcodecsÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BEÚBOM_UTF32_LEÚBOM_UTF32_BErR   Ú
startswith)Úfirst_bytesÚBOMSÚbomÚencodings       r   Úget_encodingrs   ³   sx   € õ 	Œ˜ÝÔ˜XÝÔ˜XÝÔ˜XÝÔ˜Xð€Dð Ÿš™œð ð ‰ˆˆXØ×!Ò! #Ñ&Ô&ð 	ØˆOˆOˆOð	àˆ7r<   c                   ó    ‡ — e Zd Zˆ fd„Zed„ ¦   «         Zed„ ¦   «         Zˆ fd„Zd„ Zd„ Z	d„ Z
d„ Zd	ed
dfd„Zed„ ¦   «         Zd„ Zdd„Zˆ xZS )ÚPartitionTablec                 óX   •— t          t          | ¦  «                             | ¦  «         d S r7   )Úsuperru   Ú__init__)ÚselfÚ	__class__s    €r   rx   zPartitionTable.__init__Ã   s'   ø€ Ý�n˜dÑ#Ô#×,Ò,¨TÑ2Ô2Ð2Ð2Ð2r<   c                 ó:  — |                      ¦   «         }|dd…         t          j        k    }|r&t          d¦  «         |                      |¦  «        dfS |                     t          |¦  «        ¦  «        }t          d¦  «         |                      |¦  «        dfS )Nr   r   z!Parsing binary partition input...TzParsing CSV input...F)ÚreadÚPartitionDefinitionÚMAGIC_BYTESr`   Úfrom_binaryÚdecoders   Úfrom_csv)ÚclsÚfÚbin_dataÚdata_is_binaryÚstr_datas        r   Ú	from_filezPartitionTable.from_fileÆ   s’   € à—6’6‘8”8ˆØ! ! A #œÕ*=Ô*IÒIˆØð 	3ÝÐ6Ñ7Ô7Ð7Ø—?’? 8Ñ,Ô,¨dÐ2Ð2à—?’?¥<°Ñ#9Ô#9Ñ:Ô:ˆÝÐ%Ñ&Ô&Ð&Ø�|Š|˜HÑ%Ô% uÐ,Ð,r<   c                 ó¦  — t          ¦   «         }|                     ¦   «         }d„ }t          t          |¦  «        ¦  «        D ]Ê} |||         ¦  «                             ¦   «         }|                     d¦  «        st          |¦  «        dk    rŒN	 |                     t                               ||dz   ¦  «        ¦  «         Œ�# t          $ r}t          d|dz   |fz  ¦  «        ‚d }~wt          $ r t          d|dz   |fz  ¦  «         ‚ w xY wt          t          z   }|D �]1}	|	j        t          k    o |	j        t"          |	j                 d         k    }
|	j        t$          k    o |	j        t"          |	j                 d         k    }|
s|rŒj|	j        �[|	j        |k     rP|	|d         k    r%t          d|	j        |	j        t          |fz  ¦  «        ‚t          d	|	j        |	j        |fz  ¦  «        ‚|	j        €/t+          |	j        ¦  «        }||z  dk    r||||z  z
  z  }||	_        |	j        dk     r|	j         |	j        z
  |	_        |	j        |	j        z   }�Œ3|S )
Nc                 ó¼   — t           j                             | ¦  «        } t          j        d| ¦  «        }|r%t          d|                     d¦  «        z  ¦  «        ‚| S )Nz!(?<!\\)\$([A-Za-z_][A-Za-z0-9_]*)zunknown variable '%s'r	   )ÚosÚpathÚ
expandvarsÚreÚmatchrF   Úgroup)rƒ   Úms     r   Úexpand_varsz,PartitionTable.from_csv.<locals>.expand_vars×   sU   € Ý”×"Ò" 1Ñ%Ô%ˆAÝ”Ð=¸qÑAÔAˆAØð GÝ Ð!8¸1¿7º7À1¹:¼:Ñ!EÑFÔFÐFØˆHr<   ú#r   r	   z]Error at line %d: %s
Please check extra_partition_subtypes.inc file in build/config directoryz(Unexpected error parsing CSV line %d: %sr   z›CSV Error at line %d: Partitions overlap. Partition sets offset 0x%x. But partition table occupies the whole sector 0x%x. Use a free offset 0x%x or higher.zbCSV Error at line %d: Partitions overlap. Partition sets offset 0x%x. Previous partition ends 0x%x)ru   Ú
splitlinesÚrangeÚlenrL   rn   Úappendr}   r�   rF   Ú	Exceptionr]   Úoffset_part_tableÚPARTITION_TABLE_SIZEÚtyperD   r3   r2   rE   ÚoffsetrV   r;   Úsize)r‚   Úcsv_contentsÚresÚlinesr‘   rV   rN   rY   Úlast_endÚeÚis_primary_bootloaderÚis_primary_partition_tableÚpad_tos                r   r�   zPartitionTable.from_csvÒ   s®  € åÑÔˆØ×'Ò'Ñ)Ô)ˆð	ð 	ð 	õ �S ™ZœZÑ(Ô(ð 	ð 	ˆGØ�;˜u Wœ~Ñ.Ô.×4Ò4Ñ6Ô6ˆDØ�Š˜sÑ#Ô#ð ¥s¨4¡y¤y°A¢~ ~Øð	Ø—
’
Õ.×7Ò7¸¸gÈ¹kÑJÔJÑKÔKÐKÐKøÝð ð ð Ý ØtØ ‘{ CÐ(ñ)ñô ð øøøøõ ð ð ð ÝÐCÀwÐQRÁ{ÐTXÐFYÑYÑZÔZÐZØðøøøõ
 %Õ';Ñ;ˆØð 	)ñ 	)ˆAØ$%¤F­oÒ$=Ð$jÀ!Ä)ÍxÐXYÔX^ÔO_Ð`iÔOjÒBjÐ!Ø)*¬Õ3GÒ)GÐ)tÈAÌIÕYaÐbcÔbhÔYiÐjsÔYtÒLtÐ&Ø$ð Ð(Bð àØŒxÐ#¨¬°8Ò(;Ð(;Ø˜˜Aœ’;�;Ý$ð<à?@¼yÈ!Ì(ÕTeÐgoÐ>pñqñô ð õ %ð7Ø:;¼)ÀQÄXÈxÐ9XñYñô ð ð ŒxÐÝ6°q´vÑ>Ô>�Ø˜fÑ$¨Ò)Ð)Ø ¨(°VÑ*;Ñ <Ñ<�HØ#�”ØŒv˜ŠzˆzØœ&˜ 1¤8Ñ+�”Ø”x !¤&Ñ(ˆH‰Hàˆ
s   Â1CÃ
D
ÃC$Ã$&D
c                 óÊ   •— t          |t          ¦  «        r&| D ]}|j        |k    r|c S Œt          d|z  ¦  «        ‚t	          t
          | ¦  «                             |¦  «        S )zJAllow partition table access via name as well as by
        numeric index.zNo partition entry named '%s')Ú
isinstanceÚstrÚnamerT   rw   ru   Ú__getitem__)ry   ÚitemÚxrz   s      €r   r©   zPartitionTable.__getitem__  sr   ø€ õ �d�CÑ Ô ð 	AØð ð �Ø”6˜T’>�>Ø�H�H�Hð "åÐ<¸tÑCÑDÔDÐDå�¨Ñ.Ô.×:Ò:¸4Ñ@Ô@Ð@r<   c              #   ó†   K  — t          |¦  «        }t          ||¦  «        }| D ]}|j        |k    r|j        |k    r|V — ŒdS )zGReturn a partition by type & subtype, returns
        None if not foundN)r   r4   rš   r3   )ry   r   r3   Úps       r   Úfind_by_typezPartitionTable.find_by_type  sY   è è € õ ! Ñ'Ô'ˆÝ$ U¨GÑ4Ô4ˆàð 	ð 	ˆAØŒv˜Šˆ 1¤9°Ò#7Ð#7Ø���øØˆr<   c                 ó.   — | D ]}|j         |k    r|c S Œd S r7   ©r¨   )ry   r¨   r­   s      r   Úfind_by_namezPartitionTable.find_by_name#  s/   € Øð 	ð 	ˆAØŒv˜Š~ˆ~Ø���ð àˆtr<   c                 óœ  ‡— | D ]}|                      ¦   «          Œd„ | D ¦   «         Št          ˆfd„‰D ¦   «         ¦  «        }t          |¦  «        dk    rƒt          d¦  «         t	          | d„ ¬¦  «        D ]R}t          |                     |j        g¦  «        ¦  «        dk    r$t          d|                     ¦   «         z  ¦  «         ŒSt          d¦  «        ‚d }t	          | d	„ ¬¦  «        D ]ñ}|j	        t          t          z   k     rŒ|j        t          k    o |j        t          |j                 d
         k    }|j        t           k    o |j        t          |j                 d
         k    }|s(|s&t          d|j	        t          t          z   fz  ¦  «        ‚|�G|j	        |j	        |j        z   k     r/t          d|j	        |j	        |j	        |j        z   dz
  fz  ¦  «        ‚|}Œòd„ | D ¦   «         }t          |¦  «        dk    r8|D ]&}t          d|                     ¦   «         z  ¦  «         Œ't          d¦  «        ‚t          |¦  «        dk    rL|d         j        dk    r;|d         }t          d|                     ¦   «         z  ¦  «         t          d¦  «        ‚d„ | D ¦   «         }t          |¦  «        dk    r8|D ]&}t          d|                     ¦   «         z  ¦  «         Œ't          d¦  «        ‚t          |¦  «        dk    rL|d         j        dk    r=|d         }t          d|                     ¦   «         z  ¦  «         t          d¦  «        ‚d S d S )Nc                 ó   — g | ]	}|j         ‘Œ
S rJ   r°   ©rM   r­   s     r   rO   z)PartitionTable.verify.<locals>.<listcomp>/  s   € Ð&Ð&Ð&˜A�”Ð&Ð&Ð&r<   c              3   óN   •K  — | ]}‰                      |¦  «        d k    ¯|V — Œ dS ©r	   N)Úcount)rM   ÚnÚnamess     €r   ú	<genexpr>z(PartitionTable.verify.<locals>.<genexpr>0  s7   øè è € Ð@Ð@˜q¨U¯[ª[¸©^¬^¸aÒ-?Ð-?˜Ð-?Ð-?Ð-?Ð-?Ð@Ð@r<   r   z-A list of partitions that have the same name:c                 ó   — | j         S r7   r°   ©r«   s    r   ú<lambda>z'PartitionTable.verify.<locals>.<lambda>5  s   € °´€ r<   )Úkeyz%szPartition names must be uniquec                 ó   — | j         S r7   ©r›   r¼   s    r   r½   z'PartitionTable.verify.<locals>.<lambda><  s   € ¨A¬H€ r<   r   z#Partition offset 0x%x is below 0x%xz$Partition at 0x%x overlaps 0x%x-0x%xr	   c                 ó€   — g | ];}|j         t          d          k    ¯|j        t          t                   d         k    ¯9|‘Œ<S )r   r   ©rš   r   r3   r2   r:   r´   s     r   rO   z)PartitionTable.verify.<locals>.<listcomp>K  sA   € ÐuÐuÐu A°´½5À¼=Ò1HÐ1HÈQÌYÕZbÕclÔZmÐnsÔZtÒMtÐMt˜aÐMtÐMtÐMtr<   znFound multiple otadata partitions. Only one partition can be defined with type="data"(1) and subtype="ota"(0).i    z)otadata partition must have size = 0x2000c                 ó€   — g | ];}|j         t          d          k    ¯|j        t          t                   d         k    ¯9|‘Œ<S )r   r0   rÂ   r´   s     r   rO   z)PartitionTable.verify.<locals>.<listcomp>Z  sG   € ð 
ð 
ð 
Ø˜qœv­¨v¬Ò6Ð6¸1¼9ÍÕQZÔH[Ð\eÔHfÒ;fÐ;fˆAÐ;fÐ;fÐ;fr<   zyFound multiple TEE otadata partitions. Only one partition can be defined with type="data"(1) and subtype="tee_ota"(0x90).z-TEE otadata partition must have size = 0x2000)ÚverifyÚsetr•   r]   ÚsortedÚintersectionr¨   Úto_csvrF   r›   r˜   r™   rš   rD   r3   r2   rE   rœ   )ry   r­   Ú
duplicatesÚlastr¢   r£   Úotadata_duplicatesr¹   s          @r   rÄ   zPartitionTable.verify)  sÀ  ø€ àð 	ð 	ˆAØ�HŠH‰JŒJˆJˆJð 'Ð& Ð&Ñ&Ô&ˆÝÐ@Ð@Ð@Ð@ EÐ@Ñ@Ô@Ñ@Ô@ˆ
õ ˆz‰?Œ?˜aÒÐÝÐDÑEÔEÐEÝ˜DÐ&6Ð&6Ð7Ñ7Ô7ð 2ð 2�Ý�z×.Ò.°´¨xÑ8Ô8Ñ9Ô9¸QÒ>Ð>Ý˜T Q§X¢X¡Z¤ZÑ0Ñ1Ô1Ð1øÝÐ=Ñ>Ô>Ð>ð ˆÝ˜Ð"4Ð"4Ð5Ñ5Ô5ð 	ð 	ˆAØŒxÕ+Õ.BÑBÒBÐBØ()¬µ/Ò(AÐ(nÀaÄiÕS[Ð\]Ô\bÔScÐdmÔSnÒFnÐ%Ø-.¬VÕ7KÒ-KÐ-xÐPQÔPYÕ]eÐfgÔflÔ]mÐnwÔ]xÒPxÐ*Ø-ð Ð1Kð Ý$Ø=ÀÄÕK\Õ_sÑKsÐ@tÑtñô ð ð Ð A¤H¨t¬{¸T¼YÑ/FÒ$FÐ$FÝ Ø:¸a¼hÈÌÐUYÔU`ÐcgÔclÑUlÐopÑUpÐ=qÑqñô ð ð ˆDˆDð vÐu¨ÐuÑuÔuÐÝÐ!Ñ"Ô" QÒ&Ð&Ø'ð .ð .�Ý˜ §¢¡¤Ñ,Ñ-Ô-Ð-Ð-Ýð7ñô ð õ
 Ð!Ñ"Ô" aÒ'Ð'Ð,>¸qÔ,AÔ,FÈ&Ò,PÐ,PØ" 1Ô%ˆAÝ�T˜QŸXšX™ZœZÑ(Ñ)Ô)Ð)ÝÐHÑIÔIÐIð
ð 
Øð
ñ 
ô 
Ðõ Ð!Ñ"Ô" QÒ&Ð&Ø'ð .ð .�Ý˜ §¢¡¤Ñ,Ñ-Ô-Ð-Ð-Ýð>ñô ð õ
 Ð!Ñ"Ô" aÒ'Ð'Ð,>¸qÔ,AÔ,FÈ&Ò,PÐ,PØ" 1Ô%ˆAÝ�T˜QŸXšX™ZœZÑ(Ñ)Ô)Ð)ÝÐLÑMÔMÐMð (Ð'Ð,PÐ,Pr<   c                 ót   — 	 t          | d¬¦  «        d         }n# t          $ r Y dS w xY w|j        |j        z   S )zpReturn the size that partitions will occupy in flash
        (ie the offset the last partition ends at)
        T)Úreverser   )rÆ   Ú
IndexErrorr›   rœ   )ry   rÊ   s     r   Ú
flash_sizezPartitionTable.flash_sizej  sQ   € ð	Ý˜$¨Ð-Ñ-Ô-¨aÔ0ˆDˆDøÝð 	ð 	ð 	Ø�1�1ð	øøøàŒ{˜TœYÑ&Ð&s   ‚ š
(§(Úflash_size_bytesÚreturnNc                 ót   — |                       ¦   «         }||k     rd}t          d||z  |||z  fz  ¦  «        ‚dS )zhCheck that partition table fits into the given flash size.
        Raises InputError otherwise.
        é   z³Partitions tables occupies %.1fMB of flash (%d bytes) which does not fit in configured flash size %dMB. Change the flash size in menuconfig under the 'Serial Flasher Config' menu.N)rÏ   rF   )ry   rÐ   Ú
table_sizeÚmbs       r   Úverify_size_fitszPartitionTable.verify_size_fitst  s]   € ð —_’_Ñ&Ô&ˆ
Ø˜jÒ(Ð(ØˆBÝðoà ‘? JÐ0@À2Ñ0EÐFñGñô ð ð )Ð(r<   c                 ó   — t          j        ¦   «         } | ¦   «         }t          dt          |¦  «        d¦  «        D �]}|||dz   …         }t          |¦  «        dk    rt	          d¦  «        ‚|dk    r|c S t
          r~|d d…         t          d d…         k    rc|dd …         |                     ¦   «         k    rŒt	          d|                     ¦   «         ›dt          j
        |dd …         ¦  «        ›d	�¦  «        ‚|                     |¦  «         |                     t                               |¦  «        ¦  «         �Œt	          d
¦  «        ‚)Nr   r   z5Partition table length must be a multiple of 32 bytess    ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr   r   z(MD5 checksums don't match! (computed: 0xz, parsed: 0xú)z1Partition table is missing an end-of-table marker)ÚhashlibÚmd5r”   r•   rF   Úmd5sumÚMD5_PARTITION_BEGINÚdigestÚ	hexdigestÚbinasciiÚhexlifyÚupdater–   r}   r   )r‚   ÚbrÚ   ÚresultÚor   s         r   r   zPartitionTable.from_binary�  sK  € åŒk‰mŒmˆØ�‘”ˆÝ�q�#˜a™&œ& "Ñ%Ô%ð 	Añ 	AˆAØ�Q˜˜R™�Z”=ˆDÝ�4‰yŒy˜BŠˆÝ Ð!XÑYÔYÐYØ�|Ò#Ð#Ø���Ýð 	!˜$˜r ˜rœ(Õ&9¸"¸1¸"Ô&=Ò=Ð=Ø˜˜˜”9 §
¢
¡¤Ò,Ð,Øå$˜*àŸ=š=™?œ?˜?˜?­HÔ,<¸TÀ"À#À#¼YÑ,GÔ,GÐ,GÐ,GðIñô ð ð
 —
’
˜4Ñ Ô Ð Ø�MŠMÕ-×9Ò9¸$Ñ?Ô?Ñ@Ô@Ð@Ñ@ÝÐLÑMÔMÐMr<   c                 ó\  — d                      d„ | D ¦   «         ¦  «        }t          r1|t          t          j        |¦  «                             ¦   «         z   z  }t          |¦  «        t          k    rt          dt          |¦  «        z  ¦  «        ‚|dt          t          |¦  «        z
  z  z  }|S )Nr<   c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r7   )Ú	to_binary)rM   r¡   s     r   rº   z+PartitionTable.to_binary.<locals>.<genexpr>™  s*   è è € Ð6Ð6¨A˜!Ÿ+š+™-œ-Ð6Ð6Ð6Ð6Ð6Ð6r<   z2Binary partition table length (%d) longer than maxó   ÿ)	ÚjoinrÛ   rÜ   rÙ   rÚ   rÝ   r•   ÚMAX_PARTITION_LENGTHrF   )ry   rã   s     r   rç   zPartitionTable.to_binary˜  s¡   € Ø—’Ð6Ð6°Ð6Ñ6Ô6Ñ6Ô6ˆÝð 	IØÕ)­G¬K¸Ñ,?Ô,?×,FÒ,FÑ,HÔ,HÑHÑHˆFÝˆv‰;Œ;Õ.Ò.Ð.ÝÐQÕTWÐX^ÑT_ÔT_Ñ_Ñ`Ô`Ð`Ø�'Õ1µC¸±K´KÑ?Ñ@Ñ@ˆØˆr<   Fc                 ó^   ‡— ddg}|ˆfd„| D ¦   «         z  }d                      |¦  «        dz   S )Nz# ESP-IDF Partition Tablez*# Name, Type, SubType, Offset, Size, Flagsc                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rJ   )rÈ   )rM   r«   Úsimple_formattings     €r   rO   z)PartitionTable.to_csv.<locals>.<listcomp>£  s&   ø€ Ð;Ð;Ð;°�—’Ð+Ñ,Ô,Ð;Ð;Ð;r<   rb   )ré   )ry   rí   Úrowss    ` r   rÈ   zPartitionTable.to_csv¡  sB   ø€ Ø+Ð-YÐZˆØÐ;Ð;Ð;Ð;°dÐ;Ñ;Ô;Ñ;ˆØ�yŠy˜‰Œ Ñ%Ð%r<   ©F)Ú__name__Ú
__module__Ú__qualname__rx   Úclassmethodr‡   r�   r©   r®   r±   rÄ   rÏ   r   rÖ   r   rç   rÈ   Ú__classcell__©rz   s   @r   ru   ru   Â   s0  ø€ € € € € ð3ð 3ð 3ð 3ð 3ð ð	-ð 	-ñ „[ð	-ð ð7ð 7ñ „[ð7ðr	Að 	Að 	Að 	Að 	Að
ð 
ð 
ðð ð ð?Nð ?Nð ?NðB'ð 'ð 'ð°ð ¸ð ð ð ð ð ðNð Nñ „[ðNð,ð ð ð&ð &ð &ð &ð &ð &ð &ð &r<   ru   c                   óH  — e Zd ZdZdddœZ ee¦  «        D ]Zeez   e	e
d                  dez  <   Œ ee¦  «        D ]Zeez   e	e
d                  dez  <   Œd„ Zed	„ ¦   «         Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdZed„ ¦   «         Zd„ Z d„ Z!dd„Z"dS )r}   s   ªPr   r	   )Ú	encryptedÚreadonlyr   zota_%dztee_%dc                 óh   — d| _         d | _        d | _        d | _        d | _        d| _        d| _        d S )NÚ F)r¨   rš   r3   r›   rœ   r÷   rø   ©ry   s    r   rx   zPartitionDefinition.__init__¶  s7   € ØˆŒ	ØˆŒ	ØˆŒØˆŒØˆŒ	ØˆŒØˆŒˆˆr<   c                 ó¢  — |dz   }d„ |                      d¦  «        D ¦   «         }t          ¦   «         }||_        |d         |_        |                     |d         ¦  «        |_        |                     |d         ¦  «        |_        |                     |d         |j        |j        ¦  «        |_	        | 
                    |d         |j        ¦  «        |_        |j        €t          d
¦  «        ‚|d                               d¦  «        }|D ]B}|| j        v rt          ||d¦  «         Œt          |¦  «        dk    rt          d|z  ¦  «        ‚ŒC|S )zParse a line from the CSVz,,,,c                 ó6   — g | ]}|                      ¦   «         ‘ŒS rJ   rK   )rM   rƒ   s     r   rO   z0PartitionDefinition.from_csv.<locals>.<listcomp>Ã  s    € Ð@Ð@Ð@ �!—'’'‘)”)Ð@Ð@Ð@r<   rP   r   r	   r   r
   r   NzSize field can't be emptyr   ú:Tz*CSV flag column contains unknown flag '%s')rQ   r}   rV   r¨   Ú
parse_typerš   Úparse_subtyper3   Úparse_addressr›   Ú
parse_sizerœ   rF   ÚFLAGSÚsetattrr•   )r‚   rN   rV   Úline_w_defaultsrW   rž   ÚflagsÚflags           r   r�   zPartitionDefinition.from_csv¿  sF  € ð  ™-ˆØ@Ð@ _×%:Ò%:¸3Ñ%?Ô%?Ð@Ñ@Ô@ˆå!Ñ#Ô#ˆØˆŒØ˜!”9ˆŒØ—>’> &¨¤)Ñ,Ô,ˆŒØ×'Ò'¨¨q¬	Ñ2Ô2ˆŒØ×&Ò& v¨a¤y°#´(¸C¼KÑHÔHˆŒ
Ø—>’> &¨¤)¨S¬XÑ6Ô6ˆŒØŒ8ÐÝÐ8Ñ9Ô9Ð9à�q”	—’ Ñ$Ô$ˆØð 	Xð 	XˆDØ�s”yÐ Ð Ý˜˜T 4Ñ(Ô(Ð(Ð(Ý�T‘”˜Q’�Ý Ð!MÐQUÑ!VÑWÔWÐWð ð ˆ
r<   c                 ó¢   — | j         |j         k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S r7   ©r¨   rš   r3   r›   rœ   ©ry   Úothers     r   Ú__eq__zPartitionDefinition.__eq__Ø  s[   € àŒI˜œÒ#ð (Ø”	˜UœZÒ'ð(à” ¤Ò-ð(ð ”˜uœ|Ò+ð(ð ”	˜UœZÒ'ð	
r<   c                 óv   — d„ }d| j         | j        | j        pd || j        ¦  «         || j        ¦  «        fz  S )Nc                 ó   — | �d| z  ndS )Nú0x%xÚNonerJ   r¼   s    r   Ú	maybe_hexz/PartitionDefinition.__repr__.<locals>.maybe_hexâ  s   € Ø!" �6˜A‘:�:°FÐ:r<   z-PartitionDefinition('%s', 0x%x, 0x%x, %s, %s)r   r	  )ry   r  s     r   Ú__repr__zPartitionDefinition.__repr__á  sX   € ð	;ð 	;ð 	;ð ?ØŒIØŒIØŒLÐ˜AØˆI�d”kÑ"Ô"ØˆI�d”iÑ Ô ðB
ñ 
ð 	
r<   c                 óP   — d| j         | j        | j        | j        pd| j        pdfz  S )Nz Part '%s' %d/%d @ 0x%x size 0x%xéÿÿÿÿr	  rû   s    r   Ú__str__zPartitionDefinition.__str__í  s6   € Ø1ØŒIØŒIØŒLØŒKÐ˜2ØŒIˆO˜ð5
ñ 
ð 	
r<   c                 ó    — | j         |j         z
  S r7   rÀ   r
  s     r   Ú__cmp__zPartitionDefinition.__cmp__ö  s   € ØŒ{˜Uœ\Ñ)Ð)r<   c                 ó"   — | j         |j         k     S r7   rÀ   r
  s     r   Ú__lt__zPartitionDefinition.__lt__ù  ó   € ØŒ{˜Uœ\Ò)Ð)r<   c                 ó"   — | j         |j         k    S r7   rÀ   r
  s     r   Ú__gt__zPartitionDefinition.__gt__ü  r  r<   c                 ó"   — | j         |j         k    S r7   rÀ   r
  s     r   Ú__le__zPartitionDefinition.__le__ÿ  ó   € ØŒ{˜eœlÒ*Ð*r<   c                 ó"   — | j         |j         k    S r7   rÀ   r
  s     r   Ú__ge__zPartitionDefinition.__ge__  r  r<   c                 óV   — |dk    rt          d¦  «        ‚t          |t          ¦  «        S )Nrú   z!Field 'type' can't be left empty.)rF   Ú	parse_intr   ©ry   Ústrvals     r   rÿ   zPartitionDefinition.parse_type  s*   € Ø�RŠ<ˆ<ÝÐ@ÑAÔAÐAÝ˜¥Ñ'Ô'Ð'r<   c                 óä   — |dk    r=| j         t          d         k    rt          d¦  «        ‚t          t                   d         S t          |t                               | j         i ¦  «        ¦  «        S )Nrú   r   z*App partition cannot have an empty subtyper+   )rš   r   rF   r2   r:   r#  r9   r$  s     r   r   z!PartitionDefinition.parse_subtype
  s[   € Ø�RŠ<ˆ<ØŒy�E %œLÒ(Ð(Ý Ð!MÑNÔNÐNÝ�IÔ& {Ô3Ð3Ý˜¥§¢¨d¬i¸Ñ!<Ô!<Ñ=Ô=Ð=r<   c                 ó´   — |t           k    r%t          €t          d¦  «        ‚t          t          z
  S |t          k    rt
          S |dk    rd S t          |¦  «        S )NúPPrimary bootloader offset is not defined. Please use --primary-bootloader-offsetrú   )rD   Úprimary_bootloader_offsetrF   r˜   rE   r™   r#  )ry   r%  r   s      r   r  zPartitionDefinition.parse_size  s\   € Ø•OÒ#Ð#Ý(Ð0Ý Ð!sÑtÔtÐtÝ$Õ'@Ñ@Ð@ØÕ(Ò(Ð(Ý'Ð'Ø�RŠ<ˆ<Ø�4Ý˜Ñ Ô Ð r<   c                 óh  — |t           k    rh|t          |         d         k    rt          €t          d¦  «        ‚t          S |t          |         d         k    rt          €t          d¦  «        ‚t          S |t
          k    r|t          |         d         k    rt          S |dk    rd S t          |¦  «        S )Nr   r(  r   zRRecovery bootloader offset is not defined. Please use --recovery-bootloader-offsetrú   )rD   r2   r)  rF   Úrecovery_bootloader_offsetrE   r˜   r#  )ry   r%  r   Úpsubtypes       r   r  z!PartitionDefinition.parse_address  s´   € Ø•OÒ#Ð#Ø�8 Eœ?¨9Ô5Ò5Ð5Ý,Ð4Ý$Ð%wÑxÔxÐxÝ0Ð0Ø�8 Eœ?¨:Ô6Ò6Ð6Ý-Ð5Ý$Ølñô ð õ 2Ð1ØÕ(Ò(Ð(¨X½À%¼ÈÔ9SÒ-SÐ-SÝ$Ð$Ø�RŠ<ˆ<Ø�4Ý˜Ñ Ô Ð r<   c           
      ó°  — | j         €t          | d¦  «        ‚| j        €t          | d¦  «        ‚| j        €t          | d¦  «        ‚| j        €t          | d¦  «        ‚t          | j         ¦  «        }| j        |z  rt          | d| j        |fz  ¦  «        ‚| j         t          k    r8t          | j         ¦  «        }| j        |z  rt          | d| j        |fz  ¦  «        ‚| j        t          v rGt           
                    | j        d¦  «        | j         k    rt          d| j        | j         fz  ¦  «         g }d	„ t                               ¦   «         D ¦   «         D ]}||z  }Œ| j        |v rft           
                    | j         i ¦  «         
                    | j        d¦  «        | j        k    r$t          d
| j        | j         | j        fz  ¦  «         t          t                   d         t          t                   d         g}| j         t          d         k    r;| j        |v r2| j        du r)t          | d| j        ›d| j         ›d| j        ›d�¦  «        ‚| j         t          d         k    rk| j        t          t                   d         k    rL| j        t           k     r>| j        du r7t          | d| j        | j         | j        | j        t           fz  ¦  «        ‚d S d S d S d S )NzType field is not setzSubtype field is not setzOffset field is not setzSize field is not setz"Offset 0x%x is not aligned to 0x%xz Size 0x%x is not aligned to 0x%xrú   zˆWARNING: Partition has name '%s' which is a partition type, but does not match this partition's type (0x%x). Mistake in partition table?c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S r7   )Úkeys)rM   Úts     r   rº   z-PartitionDefinition.verify.<locals>.<genexpr>E  s*   è è € Ð:Ð: 1�a—f’f‘h”hÐ:Ð:Ð:Ð:Ð:Ð:r<   zšWARNING: Partition has name '%s' which is a partition subtype, but this partition has non-matching type 0x%x and subtype 0x%x. Mistake in partition table?r   r(   r   Tú'z' partition of type z and subtype z- is always read-write and cannot be read-onlyr'   Fz�'%s' partition of type %s and subtype %s of this size (0x%x) must be flagged as 'readonly' (the size of read/write NVS has to be at least 0x%x))rš   ÚValidationErrorr3   r›   rœ   r;   r>   rB   r¨   r   r9   r]   r2   rS   r:   rø   ÚNVS_RW_MIN_PARTITION_SIZE)ry   Úoffset_alignÚ
size_alignÚall_subtype_namesr¹   Úalways_rw_data_subtypess         r   rÄ   zPartitionDefinition.verify.  s  € ØŒ9ÐÝ! $Ð(?Ñ@Ô@Ð@ØŒ<ÐÝ! $Ð(BÑCÔCÐCØŒ;ÐÝ! $Ð(AÑBÔBÐBØŒ9ÐÝ! $Ð(?Ñ@Ô@Ð@Ý4°T´YÑ?Ô?ˆØŒ;˜Ñ%ð 	lÝ! $Ð(LÐPTÔP[Ð]iÐOjÑ(jÑkÔkÐkØŒ9�Ò Ð Ý4°T´YÑ?Ô?ˆJØŒy˜:Ñ%ð jÝ% dÐ,NÐRVÔR[Ð]gÐQhÑ,hÑiÔiÐiàŒ9�ÐÐ¥%§)¢)¨D¬I°rÑ":Ô":¸d¼iÒ"GÐ"GÝð;Ø>B¼iÈÌÐ=SñTñô ð ð ÐØ:Ð:­¯ªÑ(9Ô(9Ð:Ñ:Ô:ð 	'ð 	'ˆEØ Ñ&ÐÐØŒ9Ð)Ð)Ð)­h¯lªl¸4¼9ÀbÑ.IÔ.I×.MÒ.MÈdÌiÐY[Ñ.\Ô.\Ð`dÔ`lÒ.lÐ.lÝðWà”9˜dœi¨¬Ð6ñ7ñô ð õ $,­IÔ#6°uÔ#=½xÍ	Ô?RÐS]Ô?^Ð"_ÐØŒ9�˜fœÒ%Ð%¨$¬,Ð:QÐ*QÐ*QÐVZÔVcÐgkÐVkÐVkÝ!Ø�à”9�9�9˜dœi˜i˜i¨¬¨¨ð7ñô ð ð Œ9�˜fœÒ%Ð%¨$¬,½(Å9Ô:MÈeÔ:TÒ*TÐ*TØŒyÕ4Ò4Ð4¸¼È%Ð9OÐ9OÝ%Øð8à”y $¤)¨T¬\¸4¼9ÕF_Ð`ñañô ð ð &Ð%Ð*TÐ*TØ4Ð4Ð9OÐ9Or<   s   <2sBBLL16sLc                 ó†  — t          |¦  «        dk    rt          dt          |¦  «        z  ¦  «        ‚ | ¦   «         }t          j        | j        |¦  «        \  }|_        |_        |_        |_        |_	        }d|j	        v r,|j	        d |j	         
                    d¦  «        …         |_	        |j	                             ¦   «         |_	        || j        k    rt          d|z  ¦  «        ‚| j                             ¦   «         D ]'\  }}|d|z  z  rt          ||d¦  «         |d|z   z  }Œ(|dk    rt!          d|z  ¦  «         |S )	Nr   zCPartition definition length must be exactly 32 bytes. Got %d bytes.ó    z1Invalid magic bytes (%r) for partition definitionr	   Tr   zNWARNING: Partition definition had unknown flag(s) 0x%08x. Newer binary format?)r•   rF   ÚstructÚunpackÚSTRUCT_FORMATrš   r3   r›   rœ   r¨   Úindexr€   r~   r  rR   r  r]   )r‚   râ   rž   Úmagicr  r  Úbits          r   r   zPartitionDefinition.from_binarya  sD  € åˆq‰6Œ6�RŠ<ˆ<ÝÐbÕehÐijÑekÔekÑkÑlÔlÐlØˆc‰eŒeˆÝPVÔP]Ð^aÔ^oÐqrÑPsÔPsÑMˆ�”˜#œ+ s¤z°3´8¸S¼XÀuØ�c”hÐÐØ”xÐ 9 #¤(§.¢.°Ñ"9Ô"9Ð 9Ô:ˆCŒHØ”8—?’?Ñ$Ô$ˆŒØ�C”OÒ#Ð#ÝÐPÐSXÑXÑYÔYÐYØœŸšÑ*Ô*ð 	%ð 	%‰IˆD�#Ø˜˜S™Ñ!ð %Ý˜˜T 4Ñ(Ô(Ð(Ø˜1 ™8˜Ñ$�øØ�AŠ:ˆ:ÝÐeÐhmÑmÑnÔnÐnØˆ
r<   c                 óN   ‡ — ˆ fd„‰ j                              ¦   «         D ¦   «         S )Nc                 ó4   •— g | ]}t          ‰|¦  «        ¯|‘ŒS rJ   )Úgetattr©rM   r  ry   s     €r   rO   z6PartitionDefinition.get_flags_list.<locals>.<listcomp>u  s(   ø€ ÐJÐJÐJ˜µg¸dÀDÑ6IÔ6IÐJ�ÐJÐJÐJr<   )r  r/  rû   s   `r   Úget_flags_listz"PartitionDefinition.get_flags_listt  s)   ø€ ØJÐJÐJÐJ ¤§¢Ñ!2Ô!2ÐJÑJÔJÐJr<   c           
      óþ   ‡ — t          ˆ fd„‰                      ¦   «         D ¦   «         ¦  «        }t          j        ‰ j        ‰ j        ‰ j        ‰ j        ‰ j        ‰ j	        ‰ j
                             ¦   «         |¦  «        S )Nc              3   ó8   •K  — | ]}d ‰j         |         z  V — ŒdS r¶   )r  rC  s     €r   rº   z0PartitionDefinition.to_binary.<locals>.<genexpr>x  s/   øè è € ÐNÐN°�Q˜$œ* TÔ*Ñ*ÐNÐNÐNÐNÐNÐNr<   )ÚsumrD  r:  Úpackr<  r~   rš   r3   r›   rœ   r¨   Úencode)ry   r  s   ` r   rç   zPartitionDefinition.to_binaryw  sy   ø€ ÝÐNÐNÐNÐN¸×8KÒ8KÑ8MÔ8MÐNÑNÔNÑNÔNˆÝŒ{ØÔØÔØŒIØŒLØŒKØŒIØŒI×ÒÑÔØñ	
ô 	
ð 		
r<   Fc                 ó2  ‡ ‡— ˆfd„}ˆfd„}ˆ fd„}d                      ‰ j         |‰ j        t          ¦  «         |‰ j        t
                               ‰ j        i ¦  «        ¦  «         |‰ j        d¦  «         |‰ j        d¦  «         |¦   «         g¦  «        S )Nc                 óP   •— ‰s|rdD ]\  }}| |z  dk    rd| |z  |fz  c S Œd| z  S )N))rÓ   ÚM)é   ÚKr   z%d%sr  rJ   )ÚaÚinclude_sizesÚvalÚsuffixrí   s       €r   Úaddr_formatz/PartitionDefinition.to_csv.<locals>.addr_format…  s[   ø€ Ø$ð ;¨ð ;Ø#Bð ;ð ;‘K�C˜Ø˜3‘w !’|�|Ø%¨¨c©°6Ð(:Ñ:Ð:Ð:Ð:ð $à˜A‘:Ðr<   c                 ó^   •— |                      ¦   «         D ]\  }}‰du r
| |k    r|c S Œd| z  S )NFz%d)rR   )r0  ÚkeywordsÚkÚvrí   s       €r   Úlookup_keywordz2PartitionDefinition.to_csv.<locals>.lookup_keywordŒ  sF   ø€ Ø ŸšÑ(Ô(ð ð ‘��1Ø$¨Ð-Ð-°!°q²&°&Ø�H�H�HøØ˜!‘8ˆOr<   c                  óR   •— d                      ‰                      ¦   «         ¦  «        S )zcolon-delimited list of flagsrþ   )ré   rD  rû   s   €r   Úgenerate_text_flagsz7PartitionDefinition.to_csv.<locals>.generate_text_flags’  s!   ø€ à—8’8˜D×/Ò/Ñ1Ô1Ñ2Ô2Ð2r<   rP   FT)	ré   r¨   rš   r   r3   r2   r9   r›   rœ   )ry   rí   rS  rX  rZ  s   ``   r   rÈ   zPartitionDefinition.to_csv„  sÑ   øø€ ð	ð 	ð 	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð	3ð 	3ð 	3ð 	3ð 	3ð �xŠxà”	Ø�˜tœy­%Ñ0Ô0Ø�˜tœ|­X¯\ª\¸$¼)ÀRÑ-HÔ-HÑIÔIØ�˜DœK¨Ñ/Ô/Ø�˜DœI tÑ,Ô,Ø#Ð#Ñ%Ô%ðñ	
ô 	
ð 		
r<   Nrï   )#rð   rñ   rò   r~   r  r”   ÚNUM_PARTITION_SUBTYPE_APP_OTAÚota_slotÚMIN_PARTITION_SUBTYPE_APP_OTAr2   r   ÚNUM_PARTITION_SUBTYPE_APP_TEEÚtee_slotÚMIN_PARTITION_SUBTYPE_APP_TEErx   ró   r�   r  r  r  r  r  r  r  r!  rÿ   r   r  r  rÄ   r<  r   rD  rç   rÈ   rJ   r<   r   r}   r}   §  sé  € € € € € Ø€Kð ¨Ð+Ð+€Eð �EÐ7Ñ8Ô8ð _ð _ˆØ6SÐV^Ñ6^ˆ��u”Ô˜x¨(Ñ2Ñ3Ð3ð �EÐ7Ñ8Ô8ð _ð _ˆØ6SÐV^Ñ6^ˆ��u”Ô˜x¨(Ñ2Ñ3Ð3ðð ð ð ðð ñ „[ðð0
ð 
ð 
ð

ð 

ð 

ð
ð 
ð 
ð*ð *ð *ð*ð *ð *ð*ð *ð *ð+ð +ð +ð+ð +ð +ð(ð (ð (ð
>ð >ð >ð	!ð 	!ð 	!ð!ð !ð !ð$/ð /ð /ðb #€Màðð ñ „[ðð$Kð Kð Kð
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
r<   r}   c           
      óÈ  — 	 dD ]I\  }}|                       ¦   «                              |¦  «        rt          | dd…         |¦  «        |z  c S ŒJt          | d¦  «        S # t          $ ry t          |¦  «        dk    rt          d| z  ¦  «        ‚	 ||                       ¦   «                  cY S # t          $ r) t          d| ›dd                     |¦  «        ›�¦  «        ‚w xY ww xY w)	zuGeneric parser for integer fields - int(x,0) with provision for
    k/m/K/M suffixes and 'keyword' value lookup.
    ))rV  rM  )r�   rÓ   Nr  r   zInvalid field value %szValue 'z ' is not valid. Known keywords: z, )	ÚlowerÚendswithr#  r   rT   r•   rF   r   ré   )rW  rU  ÚletterÚ
multipliers       r   r#  r#  ¢  s"  € ðgØ"Cð 	@ð 	@ÑˆF�JØ�wŠw‰yŒy×!Ò! &Ñ)Ô)ð @Ý   3 B 3¤¨Ñ2Ô2°ZÑ?Ð?Ð?Ð?ð@å�1�a‰yŒyÐøÝð gð gð gÝˆx‰=Œ=˜AÒÐÝÐ5¸Ñ9Ñ:Ô:Ð:ð	gØ˜AŸGšG™IœIÔ&Ð&Ð&Ð&øÝð 	gð 	gð 	gÝ�*ÈaÈaÈaÐQU×QZÒQZÐ[cÑQdÔQdÐQdÐeÑfÔfÐfð	gøøøðgøøøs*   ‚A
A ÁA Á/C!ÂB*Â'C!Â*3CÃC!c                  óÐ  — t          j        d¬¦  «        } |                      dddg 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t          t          t          g¬!¦  «         |                      d"d#d$¬%¦  «         |                      d&d't          j        d(¦  «        ¬)¦  «         |                      d*d+dd,¬-¦  «         |                      ¦   «         }|j        a|j         a	|j
        a
t          |j        d.¦  «        a|j        �Ft          |j        d.¦  «        at          t          k    r!t          d/t          d0›d1t          d0›�¦  «        ‚|j        �t          |j        d.¦  «        a|j        rt%          |j        ¦  «         t&                               |j        ¦  «        \  }}|j        s#t/          d2¦  «         |                     ¦   «          |j        rCt          |j                             d3d4¦  «        ¦  «        }|                     |d5z  d5z  ¦  «         t8          j                             t8          j                             |j         ¦  «        ¦  «        }t8          j         !                    |¦  «        sC	 t9          j"        |¦  «         n-# tF          $ r }|j$        tH          j%        k    r‚ Y d }~nd }~ww xY w|rr| &                    ¦   «         }|j         d,k    rtN          j(        ntS          |j         d6d7¬8¦  «        5 }| *                    |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S | +                    ¦   «         }	 tN          j(        j,        }	n# tZ          $ r tN          j(        }	Y nw xY w|j         d,k    r|	ntS          |j         d9¦  «        5 }| *                    |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S ):NzESP32 partition table utility)Údescriptionz--flash-sizez?Optional flash size limit, checks partition table fits in flashú?)Ú1MBÚ2MBÚ4MBÚ8MBÚ16MBÚ32MBÚ64MBÚ128MB)ÚhelpÚnargsÚchoicesz--disable-md5sumz,Disable md5 checksum for the partition tableFÚ
store_true)rq  ÚdefaultÚactionz--no-verifyz#Don't verify partition table fields)rq  rv  z--verifyz-vzkVerify partition table fields (deprecated, this behaviour is enabled by default and this flag does nothing.z--quietz-qz2Don't print non-critical status messages to stderrz--offsetz-ozSet offset partition tableÚ0x8000)rq  ru  z--primary-bootloader-offsetzSet primary bootloader offsetz--recovery-bootloader-offsetzSet recovery bootloader offsetz--securez5Require app partitions to be suitable for secure boot)rq  rr  Úconstrs  z--extra-partition-subtypeszExtra partition subtype entriesÚ*)rq  rr  Úinputz$Path to CSV or binary file to parse.Úrb)rq  rš   ÚoutputzHPath to output converted binary or CSV file. Will use stdout if omitted.ú-)rq  rr  ru  r   zoUnsupported configuration. Primary bootloader must be below partition table. Check --primary-bootloader-offset=z#xz and --offset=zVerifying table...ÚMBrú   rM  Úwrg   )rr   Úwb).ÚargparseÚArgumentParserÚadd_argumentr@   rA   ÚFileTypeÚ
parse_argsr\   Údisable_md5sumrÛ   r?   r   r›   r˜   r)  rF   r+  Úextra_partition_subtypesrZ   ru   r‡   rz  Ú	no_verifyr`   rÄ   rÏ   ÚreplacerÖ   rŠ   r‹   ÚabspathÚdirnamer|  ÚexistsÚmakedirsÚOSErrorÚerrnoÚEEXISTrÈ   rc   ÚstdoutÚopenre   rç   ÚbufferÚAttributeError)
ÚparserÚargsÚtableÚinput_is_binaryÚsize_mbÚ
output_dirÚexcr|  rƒ   Ústdout_binarys
             r   Úmainr�  ´  s_  € õ Ô$Ð1PÐQÑQÔQ€Fà
×ÒØØNØØMÐMÐMð	 ñ ô ð ð ×ÒØÐ!OÐY^Ðgsð ñ ô ð ð ×Ò˜Ð,QÐZfÐÑgÔgÐgØ
×ÒØØð9àð ñ ô ð ð ×Ò˜	 4Ð.bÐkwÐÑxÔxÐxØ
×Ò˜
 DÐ/KÐU]ÐÑ^Ô^Ð^Ø
×ÒÐ5Ð<[ÐeiÐÑjÔjÐjØ
×ÒÐ6Ð=]ÐgkÐÑlÔlÐlØ
×ÒØØDØÝÝ�IÐ&ð ñ ô ð ð ×ÒÐ4Ð;\ÐdgÐÑhÔhÐhØ
×Ò˜Ð&LÕS[ÔSdÐeiÑSjÔSjÐÑkÔkÐkØ
×ÒØØWØØð	 ñ ô ð ð ×ÒÑÔ€DàŒJ€EØÔ$Ð$€FØŒ[€FÝ˜DœK¨Ñ+Ô+ÐØÔ%Ð1Ý$'¨Ô(FÈÑ$JÔ$JÐ!Ý$Õ(9Ò9Ð9ÝðxÝ5NÐwðxð xÝarÐwðxð xñô ð ð Ô&Ð2Ý%(¨Ô)HÈ!Ñ%LÔ%LÐ"ØÔ$ð :Ý˜4Ô8Ñ9Ô9Ð9å+×5Ò5°d´jÑAÔAÑ€Eˆ?àŒ>ð ÝÐ#Ñ$Ô$Ð$Ø�Š‰Œˆà„ð 6Ý�d”o×-Ò-¨d°BÑ7Ô7Ñ8Ô8ˆØ×Ò˜w¨™~°Ñ4Ñ5Ô5Ð5õ ”—’¥¤§¢°´Ñ!=Ô!=Ñ>Ô>€JåŒ7�>Š>˜*Ñ%Ô%ð ð	ÝŒK˜
Ñ#Ô#Ð#Ð#øÝð 	ð 	ð 	ØŒy�EœLÒ(Ð(Øð )Ð(Ð(Ð(Ð(øøøøð	øøøð ð Ø—’‘”ˆØœ;¨#Ò-Ð-�SŒZˆZµ4¸¼ÀSÐSZÐ3[Ñ3[Ô3[ð 	Ð_`Ø�GŠG�F‰OŒOˆOð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð —’Ñ"Ô"ˆð	'ÝœJÔ-ˆMˆMøÝð 	'ð 	'ð 	'ÝœJˆMˆMˆMð	'øøøà"œk¨SÒ0Ð0ˆ]ˆ]µd¸4¼;ÈÑ6MÔ6Mð 	ÐQRØ�GŠG�F‰OŒOˆOð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	sN   ÌL2 Ì2
MÌ<MÍMÎ#OÏO
ÏO
Ï(O: Ï:PÐPÐ8QÑQÑ"Qc                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )rF   c                 óX   •— t          t          | ¦  «                             |¦  «         d S r7   )rw   rF   rx   )ry   r¡   rz   s     €r   rx   zInputError.__init__  s'   ø€ Ý�j˜$ÑÔ×(Ò(¨Ñ+Ô+Ð+Ð+Ð+r<   ©rð   rñ   rò   rx   rô   rõ   s   @r   rF   rF     s8   ø€ € € € € ð,ð ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,r<   rF   c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )r2  c                 ón   •— t          t          | ¦  «                             d|j        ›d|›�¦  «         d S )Nz
Partition z
 invalid: )rw   r2  rx   r¨   )ry   Ú	partitionÚmessagerz   s      €r   rx   zValidationError.__init__  s9   ø€ Ý�o˜tÑ$Ô$×-Ò-Ð-ÈIÌNÈNÈNÐ\cÐ\cÐ.dÑeÔeÐeÐeÐer<   r   rõ   s   @r   r2  r2    sA   ø€ € € € € ðfð fð fð fð fð fð fð fð fr<   r2  Ú__main__)Úfile)9r�  rß   rh   r�  rÙ   rŠ   r�   r:  rc   rê   rÜ   r™   r]  r[  r`  r^  ÚSECURE_NONEr@   rA   Ú__version__r>   r:   rD   rE   r   r3  r   r2   r4   r8   r;   rB   rG   rZ   r\   rÛ   r?   r˜   r)  r+  r`   r]   rs   Úlistru   Úobjectr}   r#  r�  ÚRuntimeErrorrF   r2  rð   r¡   Úprintrd   ÚexitrJ   r<   r   ú<module>r®     s  ðð €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø 
€
€
€
àÐ Ø0Ð ØÐ à $Ð Ø "Ð Ø $Ð Ø !Ð à€Ø€	Ø€	à€à€Ø€	Ø€ØÐ ð "Ø+ØØð		ð 	€ð #Ð ðð ð ð ØØØðð ð
 ØØðð ð ØØðð ð ØØØØØØØØØØØØðð ð€ð>ð ð ð ˆgØˆvØ�VØ˜&ð	€	ð6ð 6ð 6ðð ð ð"	/ð 	/ð 	/ð	Hð 	Hð 	Hð 	€Ø	€Ø	€ØÐ Ø Ð Ø!Ð ðð ð ðð ð ðð ð ðb&ð b&ð b&ð b&ð b&�Tñ b&ô b&ð b&ðJx
ð x
ð x
ð x
ð x
˜&ñ x
ô x
ð x
ðv ð gð gð gð gð$_ð _ð _ðD,ð ,ð ,ð ,ð ,�ñ ,ô ,ð ,ð
fð fð fð fð f�jñ fô fð fð
 ˆzÒÐðØˆ‰ŒˆˆˆøØð ð ð Øˆˆa�c”jÐ!Ñ!Ô!Ð!ØˆŒ�‰Œˆˆˆˆˆˆˆøøøøðøøøð Ðs   Ã%
C1 Ã1D#Ã6"DÄD#