Ë
    Î£j!G  ã                   óÜ   — 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	  e j                  «       Ze G d„ d«      «       Zded	efd
„Zdej                  d	efd„Zded	efd„Z G d„ d«      Zy)é    N)Ú	dataclass)ÚPath)ÚVPKFile)ÚVALID_MOD_ROOT_FOLDERSc                   óB   — e Zd ZU eed<   ee   ed<   ee   ed<   eed<   y)ÚValidationResultÚis_validÚerrorsÚwarningsÚtype_detectedN)Ú__name__Ú
__module__Ú__qualname__ÚboolÚ__annotations__ÚlistÚstr© ó    úKC:\Users\pivot\Documents\cueki\casual-preloader\core\structure_validator.pyr   r      s!   … àƒNØ�‰IÓØ�3‰iÓØÔr   r   Úfolder_pathÚreturnc                 ól  — g }g }g }g }	 t        | j                  d«      «      }|rY|D �cg c]  }|j                  ‘Œ }}|j                  d| j                  › ddj	                  |«      › d�«       t        d||d¬«      S | j                  «       D �cg c]  }|j                  «       sŒ|‘Œ }	}|	D �
ch c]  }
|
j                  j                  «       ’Œ }}
|	D ]T  }
t        |
j                  d«      «      }|sŒ |j                  |D �cg c]  }|
j                  |j                  f‘Œ c}«       ŒV |ri|D �
�cg c]  \  }
}|
› d	|› �‘Œ }}
}|j                  d| j                  › d
t        d«      j	                  d„ |D «       «      › d�«       t        d||d¬«      S t        D ]&  }|j                  «       |v sŒ|j                  |«       Œ( |sq|j                  d| j                  › ddj	                  t        «      › d|	r)dj	                  |	D �cg c]  }|j                  ‘Œ c}«      nd› �«       t        d||d¬«      S d}d|v st        d„ |	D «       «      r?| dz  }|j                  «       r*|dz  }|j                  «       s|dz  j                  «       rd}t        t%        |«      dk(  ||¬«      S c c}w c c}w c c}
w c c}w c c}}
w c c}w # t        $ r/ t        j!                  d| › �«       |j                  d| › �«       Y Œqt"        $ r) t        j!                  d«       |j                  d«       Y Œ¡w xY w)Nz*.vpkzFolder 'z' contains VPK files: ú, z‹

Please drag the VPK files directly instead of the folder containing them.
VPK files should be dragged individually for proper processing.FÚvpk_container©r	   r
   r   r   Ú/z(' contains VPK files in subdirectories:
é
   c              3   ó&   K  — | ]	  }d |› �–— Œ y­w©u   â€¢ Nr   )Ú.0Úlocs     r   Ú	<genexpr>z)validate_mod_structure.<locals>.<genexpr>>   s   è ø€ ÐF¹° $ s e¤¹ùó   ‚zW

Please extract and drag the VPK files directly instead of the folder containing them.zN' does not contain any valid mod structure folders.
Expected at least one of: z
Found subdirectories: ÚnoneÚunknownÚresourcec              3   ó6   K  — | ]  }d t        |«      v –— Œ y­w)ÚuiN)r   )r!   Úsubdirs     r   r#   z)validate_mod_structure.<locals>.<genexpr>\   s   è ø€ Ð3^ÑV]ÈF°D¼CÀ»KÔ4GÑV]ùs   ‚r)   z../info.vdfÚhudz$Permission denied accessing folder: z!Error validating folder structurer   )r   ÚglobÚnameÚappendÚjoinr   ÚiterdirÚis_dirÚlowerÚextendÚchrr   ÚanyÚexistsÚPermissionErrorÚlogÚ	exceptionÚ	ExceptionÚlen)r   r
   r   Úfound_valid_foldersÚfound_vpk_filesÚ	vpk_filesÚvpkÚ	vpk_namesÚitemÚsubdirsr*   Úsubdir_namesÚsub_vpksÚvpk_locationsÚvalid_folderÚdr   Úresource_dirÚui_dirs                      r   Úvalidate_mod_structurerJ      sh  € ð
 €FØ€HØÐØ€OðJ;ä˜×)Ñ)¨'Ó2Ó3ˆ	ÙÙ-6Ó7©Y c˜Ÿ›¨YˆIÐ7Ø�M‰MØ˜;×+Ñ+Ð,Ð,BÀ4Ç9Á9ÈYÓCWÐBXð YRð Sôô
 $ØØØ!Ø-ô	ð ð %0×$7Ñ$7Ô$9ÓKÑ$9˜D¸T¿[¹[½]’4Ð$9ˆÐKÙ:AÓB¹'°˜Ÿ™×)Ñ)Õ+¸'ˆÐBó ˆFÜ˜FŸK™K¨Ó0Ó1ˆHÚØ×&Ñ&É8Ó'TÉ8ÀC¨¯©°c·h±hÒ(?È8Ñ'TÕUð ñ
 ÙBQÔRÁ/±;°6¸3 ˜x q¨¨Ò.À/ˆMÑRØ�M‰MØ˜;×+Ñ+Ð,Ð,UÜ�r“7—<‘<ÑF¹ÓFÓFÐGð Hhðiôô
 $ØØØ!Ø-ô	ð ÷ 3ˆLØ×!Ñ!Ó# |Ò3Ø#×*Ñ*¨<Õ8ð 3ñ #Ø�M‰MØ˜;×+Ñ+Ð,ð --Ø-1¯Y©YÔ7MÓ-NÐ,Oð P)ÙQX¨¯©ÁGÓ3LÁG¸q°A·F³FÀGÑ3LÔ)MÐ^dÐ(eðgôô
 $ØØØ!Ø'ô	ð ð "ˆØÐ,Ñ,´Ñ3^ÑV]Ó3^Ô0^à&¨Ñ3ˆLØ×"Ñ"Ô$Ø%¨Ñ,�Ø—=‘=”? |°mÑ'C×&KÑ&KÔ&MØ$)�Mô Ü�V“ Ñ!ØØØ#ô	ð ùòQ 8ùò LùÚBùò (Uùó Sùò, 4Møô& ò LÜ�‰Ð<¸[¸MÐJÔKØ�‰Ð<¸[¸MÐJÖKÜò ;Ü�‰Ð9Ô:Ø�‰Ð9Ö:ð;ús‹   Š K ªJ,½AK Á?K ÂJ1Â'J1Â+K Â1!J6Ã#K Ã6K ÄJ;
Ä$K Ä4K ÅAK ÆK Æ4AK È	KÈK È:AK Ê,K Ë5L3Ì.L3Ì2L3Úzip_filec           
      ó,  — g }g }g }	 | j                  «       }|D �cg c]$  }|j                  «       j                  d«      sŒ#|‘Œ& }}|rs|j                  dt	        d«      j                  d„ |d d D «       «      › t        |«      dkD  rt	        d«      › dt        |«      dz
  › d�nd› d�«       t        d	||d
¬«      S t        «       }i }|D ]p  }	|	j                  d«      }
t        |
«      dk\  sŒ#|
d   }|
d   }|j                  |«       ||vrt        «       ||<   ||   j                  |j                  «       «       Œr |D ]d  }|j                  |t        «       «      }g }t        D ]&  }|j                  «       |v sŒ|j                  |«       Œ( |sŒQ|j                  ||dœ«       Œf |sçt        «       }|D ]D  }	|	j                  d«      }
t        |
«      dkD  sŒ#|j                  |
d   j                  «       «       ŒF g }t        D ]&  }|j                  «       |v sŒ|j                  |«       Œ( |r|j                  d|dœ«       nL|j                  d|rdj                  |«      nd› ddj                  t        «      › �«       t        d	||d¬«      S d}t        |«      dkD  r4|j                  ddj                  |D �cg c]  }|d   ‘Œ	 c}«      › �«       |D ][  }d|d   D �cg c]  }|j                  «       ‘Œ c}v sŒ'|D �cg c]%  }|j                  |d   dz   «      sŒd|v sd|v sŒ$|‘Œ' }}|sŒZd}Œ] 	 t        t        |«      dk(  ||¬«      S c c}w c c}w c c}w c c}w # t        $ r'}|j                  dt        |«      › �«       Y d }~ŒZd }~ww xY w)Nú.vpkzZIP file contains VPK files:
r   c              3   ó&   K  — | ]	  }d |› �–— Œ y­wr    r   )r!   r?   s     r   r#   z)validate_zip_structure.<locals>.<genexpr>   s   è ø€ ÐG¹° $ s e¤¹ùr$   u   â€¢ ... and z more VPK filesÚ z‹

Please extract the VPK files from the ZIP and drag them directly instead.
VPK files should be dragged individually for proper processing.Fr   r   r   é   r   é   )r-   Úvalid_foldersÚrootz…ZIP file does not contain any valid mod structure.
Expected structure: mod_name/materials/... etc. 
Found potential mod directories: r   r%   z4
Each mod directory should contain at least one of: r&   zZIP contains multiple mods: r-   r'   rR   úinfo.vdfúresource/uir+   z Error validating ZIP structure: )Únamelistr2   Úendswithr.   r4   r/   r;   r   ÚsetÚsplitÚaddÚgetr   Ú
startswithr:   r   )rK   r
   r   Úfound_mod_foldersÚ	file_listÚfr>   Úpotential_mod_dirsÚsecond_level_structureÚ	file_pathÚpartsÚmod_dirÚsub_dirrB   Úvalid_subdirsrF   Útop_level_dirsÚroot_valid_foldersr   ÚmodÚmod_infoÚ	hud_filesÚes                          r   Úvalidate_zip_structurerm   s   sø  € à€FØ€HØÐð\CØ×%Ñ%Ó'ˆ	Ù )ÓH¡	˜1¨Q¯W©W«Y×-?Ñ-?ÀÕ-G’Q 	ˆ	ÐHÙØ�M‰MØ0Ü�r“7—<‘<ÑG¸	À#À2¹ÓGÓGÐHÜSVÐW`ÓSaÐdfÒSf”c˜"“g�Y˜l¬3¨y«>¸BÑ+>Ð*?¸ÑOÐlnÐoð pRðSôô $ØØØ!Ø-ô	ð ô !›UÐØ!#Ðã"ˆIØ—O‘O CÓ(ˆEÜ�5‹z˜Q‹Ø ™(�Ø ™(�à"×&Ñ& wÔ/ØÐ"8Ñ8Ü69³eÐ*¨7Ñ3Ø& wÑ/×3Ñ3°G·M±M³OÕDð #ó *ˆGØ,×0Ñ0°¼#»%Ó@ˆGØˆMç 6�Ø×%Ñ%Ó'¨7Ò2Ø!×(Ñ(¨Õ6ð !7ò Ø!×(Ñ(Ø#Ø%2ñ*õ ð *ñ !ä ›UˆNÛ&�	Ø!Ÿ™¨Ó,�Ü�u“: “>Ø"×&Ñ& u¨Q¡x§~¡~Ó'7Õ8ð 'ð
 "$Ðß 6�Ø×%Ñ%Ó'¨>Ò9Ø&×-Ñ-¨lÕ;ð !7ñ "Ø!×(Ñ(Ø"Ø%7ñ*õ ð
 —‘ð8áYk¸¿	¹	ÐBTÔ8UÐqwÐ7xð yJØJNÏ)É)ÔTjÓJkÐIlðnôô (Ø"Ø!Ø%Ø"+ô	ð ð "ˆÜÐ Ó! AÒ%Ø�O‰OÐ:¸4¿9¹9Ñ]nÓEoÑ]nÐVYÀcÈ&ÃkÐ]nÑEoÓ;pÐ:qÐrÔsó *ˆHØ°¸/Ò1JÓKÑ1J¨A˜aŸg™g�iÐ1JÑKÒKÙ(1ó  G©	 1°Q·\±\À(È6ÑBRÐUXÑBXÕ5YÐ_iÐmnÑ_nÐrð  DEò  sEšQ¨	�	ð  GÚØ$)‘Mñ	 *ô Ü�V“ Ñ!ØØØ#ô	ð ùòy Iùò` Fpùò Lùò Gøô ò CØ�‰Ð8¼¸Q»¸ÐA×BÑBûðCús™   ˆM# œ$MÁMÁA6M# Â<0M# Ã-BM# Å:M# ÆAM# ÇAM# ÈA5M# Ê+M# Ê:MËM# Ë MË7M# Ë<M# Ì MÌMÌ&MÌ*M# Ì/M# ÍM# Í#	NÍ,NÎNÚvpk_pathc           
      óÚ  — g }g }d}	 t        | «      }|j                  «       }t        «       }|D ]F  }|j                  d«      }t	        |«      dk\  sŒ#|d   }	|j                  |	j                  «       «       ŒH g }
t        D ]&  }|j                  «       |v sŒ|
j                  |«       Œ( |
sF|j                  ddj                  t        «      › d|rdj                  t        |«      «      nd› �«       d	|v r*t        d
„ |D «       «      }t        d„ |D «       «      }|r|rd}t        t	        |«      dk(  |||¬«      S # t        $ r'}|j                  dt        |«      › �«       Y d }~ŒFd }~ww xY w)Nr&   r   é   r   zFVPK does not contain any valid mod folders.
Expected at least one of: r   z
Found folders: r%   r'   c              3   ó$   K  — | ]  }d |v –— Œ
 y­w)rT   Nr   ©r!   r_   s     r   r#   z)validate_vpk_structure.<locals>.<genexpr>  s   è ø€ ÐB¹	°1˜z¨Qœ¹	ùó   ‚c              3   ó$   K  — | ]  }d |v –— Œ
 y­w)rU   Nr   rr   s     r   r#   z)validate_vpk_structure.<locals>.<genexpr>  s   è ø€ Ð!H¹i¸ -°1Ô"4¹iùrs   r+   z Error validating VPK structure: r   )r   Ú
list_filesrX   rY   r;   rZ   r2   r   r.   r/   Úsortedr5   r:   r   r   )rn   r
   r   r   Úvpk_filer^   Úfound_foldersrb   rc   Úroot_folderrR   rF   Úhas_info_vdfÚhas_resource_uirl   s                  r   Úvalidate_vpk_structurer|   ß   s}  € à€FØ€HØ€Mð#CÜ˜8Ó$ˆØ×'Ñ'Ó)ˆ	ô ›ˆã"ˆIà—O‘O CÓ(ˆEÜ�5‹z˜Q‹Ø# A™h�Ø×!Ñ! +×"3Ñ"3Ó"5Õ6ð #ð ˆß2ˆLØ×!Ñ!Ó# }Ò4Ø×$Ñ$ \Õ2ð 3ñ Ø�M‰Mð-Ø-1¯Y©YÔ7MÓ-NÐ,Oð P"ÙFS $§)¡)¬F°=Ó,AÔ"BÐY_Ð!`ðbôð ˜Ñ&ÜÑB¹	ÓBÓBˆLÜ!Ñ!H¹iÓ!HÓHˆOÙ¡Ø %�ô
 Ü�V“ Ñ!ØØØ#ô	ð øô ò CØ�‰Ð8¼¸Q»¸ÐA×BÑBûðCús&   ˆA	D: ÁAD: ÂB	D: Ä:	E*ÅE%Å%E*c                   óÈ   — e Zd Z e«       ZeZh d£Zddefd„Z	de
defd„Zde
defd„Zed	e
defd
„«       Zdde
dedefd„Zdej$                  defd„Zdee   dee   defd„Zy)ÚStructureValidator>   úscripts/hudlayout.resrT   rU   Ú	max_depthc                 ó   — || _         y ©N)r€   )Úselfr€   s     r   Ú__init__zStructureValidator.__init__  s	   € à"ˆ�r   r   r   c                 óº  — |j                  «       r|j                  «       st        dd|› �gg d¬«      S t        |«      }|j                  s|S | j                  |«      }t        |j                  xr |j                  |j                  |j                  z   |j                  |j                  z   |j                  dk7  r|j                  ¬«      S |j                  ¬«      S )NFz+Path does not exist or is not a directory: r&   r   )	r6   r1   r   rJ   r	   Ú_scan_directoryr
   r   r   )rƒ   r   Úmod_structure_resultÚscan_results       r   Úvalidate_folderz"StructureValidator.validate_folder  sê   € à×!Ñ!Ô#¨;×+=Ñ+=Ô+?Ü#ØØEÀkÀ]ÐSÐTØØ'ô	ð ô  6°kÓBÐØ#×,Ò,Ø'Ð'ð ×*Ñ*¨;Ó7ˆäØ)×2Ñ2ÒK°{×7KÑ7KØ'×.Ñ.°×1CÑ1CÑCØ)×2Ñ2°[×5IÑ5IÑIØ@T×@bÑ@bÐfoÒ@oÐ.×<Ñ<ô	
ð 	
ð vA÷  vOñ  vOô	
ð 	
r   Úzip_pathc           
      ó4  — |j                  «       r|j                  «       st        dd|› �gg d¬«      S |j                  j	                  «       dk(  st        dd|› �gg d¬«      S 	 t        j                  |d«      5 }t        |«      }|j                  s|cd d d «       S | j                  |«      }t        |j                  xr |j                  |j                  |j                  z   |j                  |j                  z   |j                  dk7  r|j                  n|j                  ¬«      cd d d «       S # 1 sw Y   y xY w# t
        j                  $ r t        dd|› �gg d¬«      cY S t        $ r)}t        dd	|› d
t        |«      › �gg d¬«      cY d }~S d }~ww xY w)NFú&Path does not exist or is not a file: r&   r   z.zipzFile is not a zip file: ÚrzInvalid or corrupted zip file: zError reading zip file ú: )r6   Úis_filer   Úsuffixr2   ÚzipfileÚZipFilerm   r	   Ú_scan_zip_contentsr
   r   r   Ú
BadZipFiler:   r   )rƒ   rŠ   rK   Ústructure_resultrˆ   rl   s         r   Úvalidate_zipzStructureValidator.validate_zip7  s¨  € à�‰Ô ¨×(8Ñ(8Ô(:Ü#ØØ@ÀÀ
ÐKÐLØØ'ô	ð ð �‰×$Ñ$Ó&¨&Ò0Ü#ØØ2°8°*Ð=Ð>ØØ'ô	ð ð	Ü—‘ ¨3Ô/°8ä#9¸(Ó#CÐ Ø'×0Ò0Ø+÷	 0Ñ/ð #×5Ñ5°hÓ?�ä'Ø-×6Ñ6ÒO¸;×;OÑ;OØ+×2Ñ2°[×5GÑ5GÑGØ-×6Ñ6¸×9MÑ9MÑMØDT×DbÑDbÐfoÒDoÐ"2×"@Ò"@ð  vA÷  vOñ  vOô	÷ 0×/Ò/ûô ×!Ñ!ò 	Ü#ØØ9¸(¸ÐDÐEØØ'ô	ò ô ò 	Ü#ØØ1°(°¸2¼cÀ!»f¸XÐFÐGØØ'ô	õ ûð	úsO   Á%D> Á;D2Â	D> ÂB
D2Ä(	D> Ä2D;Ä7D> Ä;D> Ä>&FÅ&FÅ.FÆFÆFrn   c           
      óN  — | j                  «       r| j                  «       st        dd| › �gg d¬«      S | j                  j	                  «       dk(  st        dd| › �gg d¬«      S 	 t        | «      }|S # t        $ r)}t        dd| › dt        |«      › �gg d¬«      cY d }~S d }~ww xY w)	NFrŒ   r&   r   rM   zFile is not a VPK file: zError reading VPK file rŽ   )r6   r�   r   r�   r2   r|   r:   r   )rn   r•   rl   s      r   Úvalidate_vpkzStructureValidator.validate_vpkh  sÇ   € à�‰Ô ¨×(8Ñ(8Ô(:Ü#ØØ@ÀÀ
ÐKÐLØØ'ô	ð ð �‰×$Ñ$Ó&¨&Ò0Ü#ØØ2°8°*Ð=Ð>ØØ'ô	ð ð		Ü5°hÓ?ÐØ#Ð#øÜò 	Ü#ØØ1°(°¸2¼cÀ!»f¸XÐFÐGØØ'ô	õ ûð	ús   Á%A2 Á2	B$Á;BÂB$ÂB$Úcurrent_depthc           	      óð  — g }g }t        «       }t        «       }|| j                  kD  r.|j                  d| j                  › d�«       t        d||d¬«      S 	 |j	                  «       D �]  }|j                  «       rs|j                  j                  «       | j                  v r#|j                  d|j                  |«      › �«       |j                  |j                  j                  «       «       Œ‡|j                  «       sŒ˜|j                  |j                  j                  «       «       | j                  ||dz   «      }|j                  |j                  «       |j                  |j                   «       �Œ 	 | j)                  ||«      }
t        t+        |«      dk(  |||
¬«      S # t"        $ r |j                  d|› �«       Y ŒLt$        $ r*}	|j                  d	|› d
t'        |	«      › �«       Y d }	~	Œyd }	~	ww xY w)NzMaximum directory depth (z
) exceededTr&   r   zFound nested VPK file: rQ   zPermission denied accessing: zError scanning directory rŽ   r   )rX   r€   r.   r   r0   r�   r�   r2   ÚINVALID_EXTENSIONSÚrelative_torZ   r-   r1   r†   r3   r
   r   r7   r:   r   Ú_detect_typer;   )rƒ   r   r™   r
   r   Úfound_filesÚ
found_dirsrA   Ú
sub_resultrl   r   s              r   r†   z"StructureValidator._scan_directory…  s²  € àˆØˆÜ“eˆÜ“Uˆ
à˜4Ÿ>™>Ò)Ø�O‰OÐ7¸¿¹Ð7GÀzÐRÔSÜ#ØØØ!Ø'ô	ð ð	OØ#×+Ñ+×-�Ø—<‘<”>à—{‘{×(Ñ(Ó*¨d×.EÑ.EÑEØŸ™Ð(?À×@PÑ@PÐQ\Ó@]Ð?^Ð&_Ô`à—O‘O D§I¡I§O¡OÓ$5Õ6à—[‘[•]Ø—N‘N 4§9¡9§?¡?Ó#4Ô5à!%×!5Ñ!5°d¸MÈAÑ<MÓ!N�JØ—M‘M *×"3Ñ"3Ô4Ø—O‘O J×$7Ñ$7Ö8ñ .ð( ×)Ñ)¨+°zÓBˆäÜ˜“[ AÑ%ØØØ'ô	
ð 	
øô ò 	IØ�M‰MÐ9¸+¸ÐGÖHÜò 	OØ�M‰MÐ5°k°]À"ÄSÈÃVÀHÐM×NÑNûð	Oús&   ÁB'F$ Ã?A7F$ Æ$G5ÇG5Ç G0Ç0G5rK   c                 óÒ  — g }g }t        «       }t        «       }	 |j                  «       }|D ]Ù  }t        |«      }t        |j                  «      | j
                  kD  r|j                  d|› �«       |j                  j                  «       | j                  v r|j                  d|› �«       |j                  |j                  j                  «       «       |j                  d d D ]!  }	|j                  |	j                  «       «       Œ# ŒÛ 	 | j                  ||«      }t        t        |«      dk(  |||¬«      S # t        $ r'}
|j                  dt        |
«      › �«       Y d }
~
ŒXd }
~
ww xY w)Nz Deep directory structure found: zFound nested VPK file in zip: éÿÿÿÿzError reading zip contents: r   r   )rX   rV   r   r;   rc   r€   r.   r�   r2   r›   rZ   r-   r:   r   r�   r   )rƒ   rK   r
   r   rž   rŸ   r^   rb   Úpath_objÚpartrl   r   s               r   r“   z%StructureValidator._scan_zip_contents³  sD  € àˆØˆÜ“eˆÜ“Uˆ
ð	CØ ×)Ñ)Ó+ˆIã&�	Ü 	›?�ô �x—~‘~Ó&¨¯©Ò7Ø—O‘OÐ&FÀyÀkÐ$RÔSð —?‘?×(Ñ(Ó*¨d×.EÑ.EÑEØ—M‘MÐ$BÀ9À+Ð"NÔOð —‘ §¡× 3Ñ 3Ó 5Ô6Ø$ŸN™N¨3¨BÓ/�DØ—N‘N 4§:¡:£<Õ0ñ 0ñ 'ð& ×)Ñ)¨+°zÓBˆäÜ˜“[ AÑ%ØØØ'ô	
ð 	
øô ò 	CØ�M‰MÐ8¼¸Q»¸ÐA×BÑBûð	Cús   šC.D6 Ä6	E&Ä?E!Å!E&ÚfilesÚdirsc                 ó„   ‡‡— t        ˆfd„| j                  D «       «      ryt        ˆfd„| j                  D «       «      ryy)Nc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr‚   r   )r!   Ú	indicatorr¥   s     €r   r#   z2StructureValidator._detect_type.<locals>.<genexpr>Û  s   øè ø€ ÐGÑ3F iˆy˜EÔ!Ñ3Fùó   ƒr+   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr‚   r   )r!   r©   r¦   s     €r   r#   z2StructureValidator._detect_type.<locals>.<genexpr>Þ  s   øè ø€ ÐFÑ2E Yˆy˜DÔ Ñ2Eùrª   r&   )r5   ÚHUD_INDICATORS)rƒ   r¥   r¦   s    ``r   r�   zStructureValidator._detect_typeÙ  s4   ù€ äÓG°4×3FÒ3FÓGÔGØäÓF°$×2EÒ2EÓFÔFØàr   N)r   )r   )r   r   r   rX   r›   r   ÚMOD_INDICATORSr¬   Úintr„   r   r   r‰   r–   Ústaticmethodr˜   r†   r‘   r’   r“   r   r�   r   r   r   r~   r~     sÅ   „ á›Ðð ,€NÚI€Nñ# #ó #ð
¨4ð 
Ð4Dó 
ð2/ Tð /Ð.>ó /ðb ð˜tð Ð(8ò ó ðñ8,
¨4ð ,
Àð ,
ÐL\ó ,
ð\$
¨7¯?©?ð $
Ð?Oó $
ðL # c¡(ð °#°c±(ð ¸sô r   r~   )Úloggingr‘   Údataclassesr   Úpathlibr   Úvalve_parsersr   Úcore.constantsr   Ú	getLoggerr8   r   rJ   r’   rm   r|   r~   r   r   r   Ú<module>r¶      s•   ðÛ Û Ý !Ý å !å 1à€g×ÑÓ€ð ÷ð ó ðð[¨ð [Ð1Aó [ð|i W§_¡_ð iÐ9Ió iðX0 Tð 0Ð.>ó 0÷fOò Or   