§
    	¸¾jc)  ã                  ó  — U d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
Z
ddlmZmZmZmZ ddlZddlmZmZmZmZ ddlmZmZ ddlmZmZmZmZmZ ddlm Z m!Z!  e" ej#        ¦   «         ¦  «        d	gz   Z$d
e%d<    G d„ d¦  «        Z&dS )aZ  
Adversarial Stress Testing & Empirical Verification Suite:
Wilderness Map Generator Sinuosity, Safe Radius, Isolated Boss Gate,
Encounter Zones, and Binary Serialization (Milestone M1-1).

Empirically challenges server/world/wilderness_map_generator.py and
server/world/map_binary_serializer.py across 500+ random seeds and all canonical zones.
é    )ÚannotationsN)ÚDictÚListÚSetÚTuple)ÚTileTypeÚTileCellÚMapGridDataÚEncounterZone)ÚWildernessMapGeneratorÚZONE_DEFAULT_SIZES)Úserialize_map_gridÚdeserialize_map_gridÚHEADER_MAGICÚHEADER_SIZEÚBIOME_TO_CODE)Úverify_path_connectivityÚcalculate_path_sinuosityÚzone_boundless_sanctuaryz	List[str]ÚCANONICAL_ZONESc                  ój   — e Zd ZdZdd„Zdd„Zd d„Zd d„Zd!d„Zd d„Z	dd„Z
d"d„Zdd„Zdd„Zdd„ZdS )#Ú+TestWildernessMapGeneratorAdversarialStresszGEmpirical challenge suite testing 500+ maps across all canonical zones.ÚreturnÚNonec           	     óˆ  — d}d}t          t          ¦  «        D ]Þ\  }}t          j        |¦  «        }t	          d¦  «        D ]µ}d|dz   z  |dz  z   dz   }|dz  }|                     |¬¦  «        }|j        \  }	}
|                      ||	|
||¦  «         |                      |||¦  «         |  	                    |||¦  «         |  
                    |||¦  «        }||k     r|}|                      |||¦  «         Œ¶Œßd	}||k    }|s—t          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t%          t          j        |¦  «        ¦  «        ‚dx}}d}||k    }|s—t          j        d
|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t%          t          j        |¦  «        ¦  «        ‚dx}}dS )zJEvaluates 550 maps across 10 zones (55 seeds each) against all 5 criteria.r   g     8�@é7   i † é   éO   é   ©Úseediô  ©ú>=©z%(py0)s >= %(py3)sÚtotal_tested©Úpy0Úpy3úassert %(py5)sÚpy5Nç      ô?Úmin_sinuosity)Ú	enumerater   r   Úfor_zoneÚrangeÚgenerateÚspawn_pointÚ_verify_spawn_safe_zoneÚ_verify_boss_arena_isolationÚ_verify_encounter_zonesÚ_verify_sinuosityÚ_verify_binary_roundtripÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Úselfr%   r,   Úzone_idxÚzone_idÚgenÚir!   Úmap_dataÚsxÚsyÚsinÚ@py_assert2Ú@py_assert1Ú@py_format4Ú@py_format6s                   úVC:\Projects\FreeExile\tests\security_fuzzing\test_wilderness_map_adversarial_stress.pyÚ+test_stress_500_plus_random_seeds_all_zoneszWTestWildernessMapGeneratorAdversarialStress.test_stress_500_plus_random_seeds_all_zones-   sÀ  € àˆØˆå!*­?Ñ!;Ô!;ð 	Gð 	GÑˆH�gÝ(Ô1°'Ñ:Ô:ˆCÝ˜2‘Y”Yð Gð G�Ø ¨A¡Ñ.°°R±Ñ7¸"Ñ<�Ø Ñ!�ØŸ<š<¨T˜<Ñ2Ô2�Ø!Ô-‘��Bð ×,Ò,¨X°r¸2¸tÀWÑMÔMÐMð ×1Ò1°(¸DÀ'ÑJÔJÐJð ×,Ò,¨X°t¸WÑEÔEÐEð ×,Ò,¨X°t¸WÑEÔE�Ø˜Ò&Ð&Ø$'�Mð ×-Ò-¨h¸¸gÑFÔFÐFÐFð+Gð.  #Ð"ˆ|˜sÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"ˆ|˜sÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ|Ñ"Ô"Ð"Õ"Ô"ˆ|Ñ"Ô"Ð"Ð"Õ"Ô"˜sÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ø $Ð$ˆ} Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ} Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$ˆ}Ñ$Ô$Ð$Õ$Ô$ˆ}Ñ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ó    Úmr
   rE   ÚintrF   r!   ÚzidÚstrc                ór  — t          t          d|dz
  ¦  «        t          |j        |dz   ¦  «        ¦  «        D �]}}t          t          d|dz
  ¦  «        t          |j        |dz   ¦  «        ¦  «        D �]A}||z
  dz  ||z
  dz  z   dk    �r(|j        |         |         }|j        }	t          j        }
|	|
k    }|�st          j
        d|fd|	|
f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        d	t          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd	t          j        |
¦  «        d
œz  }t          j        d|› d|› d|› d|› �¦  «        dz   d|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}	x}}
|j        }	d}|	|u }|sËt          j
        d|fd|	|f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |	¦  «        t          j        |¦  «        dœz  }t          j        d|› d|› d|› d|› �¦  «        dz   d|iz  }t!          t          j        |¦  «        ¦  «        ‚dx}	x}}�ŒC�ŒdS )z;Asserts zero WALL tiles and 100% walkability in radius 8.0.r   é   é	   é   é@   )ú!=)zK%(py2)s
{%(py2)s = %(py0)s.tile_type
} != %(py6)s
{%(py6)s = %(py4)s.WALL
}Úcellr   ©r'   Úpy2Úpy4Úpy6zWALL in safe radius at (ú,ú), seed=ú, zone=ú
>assert %(py8)sÚpy8NT©Úis©z0%(py2)s
{%(py2)s = %(py0)s.walkable
} is %(py5)s©r'   r[   r*   z Blocked cell in safe radius at (z
>assert %(py7)sÚpy7)r/   ÚmaxÚminÚheightÚwidthÚtilesÚ	tile_typer   ÚWALLr7   r8   r9   r:   r;   r<   Ú_format_assertmsgr=   r>   Úwalkable)r?   rO   rE   rF   r!   rQ   ÚyÚxrY   rI   Ú@py_assert5Ú@py_assert3Ú@py_format7Ú@py_format9Ú@py_assert4rK   Ú@py_format8s                    rL   r2   zCTestWildernessMapGeneratorAdversarialStress._verify_spawn_safe_zoneN   s  € å•s˜1˜b 1™f‘~”~¥s¨1¬8°R¸!±VÑ'<Ô'<Ñ=Ô=ð 	wñ 	wˆAÝ�3˜q " q¡&™>œ>­3¨q¬w¸¸Q¹Ñ+?Ô+?Ñ@Ô@ð wñ w�Ø˜‘F˜q‘= A¨¡F¨q¡=Ñ0°BÒ6Ñ6Øœ7 1œ: aœ=�DØœ>Ðx­X¬]Ðx˜>¨]Ò:ÐxÐxÑxÕxÔxÐxÐxÐxÐx˜>¨]ÐxÑxÔxÐxÕxÔxÑxÔxÐxÐxÕxÔx˜4ÑxÔxÐxÕxÔx˜4ÑxÔxÐxÐxÕxÔx˜>ÑxÔxÐxÕxÔxÑxÔxÐxÐxÕxÔx­XÑxÔxÐxÕxÔx­XÑxÔxÐxÐxÕxÔx¨]ÑxÔxÐxÐxÑxÐxÕxÔxÐ<xÐWXÐ<xÐ<xÐ[\Ð<xÐ<xÐfjÐ<xÐ<xÐsvÐ<xÐ<xÑxÔxÐxÑxÐxÐxÐxÑxÐxÕxÕxÔxÐxÑxÔxÑxÔxÐxÐxÐxÐxÐxÐxÐxØœ=Ðv¨DÐv˜=¨DÐ0ÐvÐvÐvÕvÔvÐvÐvÐvÐv˜=¨DÐvÑvÔvÐvÕvÔvÑvÔvÐvÐvÕvÔv˜4ÑvÔvÐvÕvÔv˜4ÑvÔvÐvÐvÕvÔv˜=ÑvÔvÕvÔv¨DÑvÔvÐvÐvÑvÐvÕvÔvÐ2vÐUVÐ2vÐ2vÐYZÐ2vÐ2vÐdhÐ2vÐ2vÐqtÐ2vÐ2vÑvÔvÐvÑvÐvÐvÐvÑvÐvÕvÕvÔvÐvÑvÔvÑvÔvÐvÐvÐvÐvÐvÐvÐvùñ	wð	wð 	wrN   c                óV  ‡— d„ |j         D ¦   «         }t          |¦  «        }d}||k    }|�st          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        dt          |¦  «        › d	|› d
|› �¦  «        dz   d|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}x}}|j        }
|d         j        |d         j        f}|
|k    }|sªt          j        d|fd|
|f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}
x}}|j        Šd}‰|u}
|
s—t          j        d|
fd‰|f¦  «        dt	          j        ¦   «         v st          j        ‰¦  «        rt          j        ‰¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}
}ˆfd„t          ‰j        ‰j        ‰j        z   ¦  «        D ¦   «         ˆfd„t          ‰j        dz   ‰j        ‰j        z   dz
  ¦  «        D ¦   «         z   }|D �]ï\  }}|j         |         |         }||f|j        k    �rÔ|j        }
t&          j        }|
|k    }|sòt          j        d|fd|
|f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        dt	          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        ndt          j        |¦  «        dœz  }d d|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}
x}}|j        }
d!}|
|u }|sªt          j        d"|fd#|
|f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}
x}}�Œû|j        }
t&          j        }|
|k    }|�st          j        d|fd$|
|f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        dt	          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        ndt          j        |¦  «        dœz  }t          j        d%|› d&|› d'|› d
|› �¦  «        dz   d|iz  }	t          t          j
        |	¦  «        ¦  «        ‚dx}
x}}|j        }
d!}|
|u }|sªt          j        d"|fd#|
|f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}
x}}�ŒñdS )(z=Asserts exactly 1 BOSS_GATE and solid WALL perimeter sealing.c                óF   — g | ]}|D ]}|j         t          j        k    ¯|‘ŒŒS © )rm   r   Ú	BOSS_GATE©Ú.0ÚrowÚcs      rL   ú
<listcomp>z\TestWildernessMapGeneratorAdversarialStress._verify_boss_arena_isolation.<locals>.<listcomp>Y   s4   € ÐXÐXÐX�s¨sÐXÐX¨!°a´kÅXÔEWÒ6WÐ6W�Ð6WÐ6WÐ6WÐ6WrN   r   ©ú==)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚgates©r'   Úpy1r(   r]   zFound z boss gates, expected 1, seed=r`   ra   rb   Nr   )z1%(py2)s
{%(py2)s = %(py0)s.boss_gate
} == %(py5)srO   rf   úassert %(py7)srg   ©úis not©z%(py0)s is not %(py3)sÚbrr&   r)   r*   c                óP   •— g | ]"}‰j         ‰j         ‰j        z   d z
  fD ]}||f‘ŒŒ#S ©r   )rq   Úh)r~   rr   rq   rŒ   s      €rL   r�   z\TestWildernessMapGeneratorAdversarialStress._verify_boss_arena_isolation.<locals>.<listcomp>_   s@   ø€ Ð_Ð_Ð_ ÈÌÈbÌdÐUWÔUYÉkÐ\]ÉoÐG^Ð_Ð_À!�a˜�VÐ_Ð_Ð_Ð_rN   c                óP   •— g | ]"}‰j         ‰j         ‰j        z   d z
  fD ]}||f‘ŒŒ#S rŽ   )rr   Úw)r~   rq   rr   rŒ   s      €rL   r�   z\TestWildernessMapGeneratorAdversarialStress._verify_boss_arena_isolation.<locals>.<listcomp>`   sF   ø€ ÐgÐgÐg ÐPRÔPTÐVXÔVZÐ]_Ô]aÑVaÐdeÑVeÐOfÐgÐgÈ!�a˜�VÐgÐgÐgÐgrN   )zP%(py2)s
{%(py2)s = %(py0)s.tile_type
} == %(py6)s
{%(py6)s = %(py4)s.BOSS_GATE
}rY   r   rZ   úassert %(py8)sFrc   re   )zK%(py2)s
{%(py2)s = %(py0)s.tile_type
} == %(py6)s
{%(py6)s = %(py4)s.WALL
}zPerimeter leak at (r^   r_   )rl   r„   r7   r8   r9   r:   r;   r<   ro   r=   r>   Ú	boss_gaterr   rq   Ú	boss_roomr/   r‘   r�   rm   r   r|   rp   rn   )r?   rO   r!   rQ   r…   rH   rs   rw   ru   rv   rI   rt   rK   rx   rJ   Ú	perimeterÚpxÚpyrY   rŒ   s                      @rL   r3   zHTestWildernessMapGeneratorAdversarialStress._verify_boss_arena_isolationW   së  ø€ àXÐX˜aœgÐXÑXÔXˆÝ�5‰zŒzÐe˜QÐeˆz˜QŠÐeÐeÑeÕeÔeÐeÐeÐeÐeˆz˜QÐeÑeÔeÐeÕeÔeÑeÔeÐeÐeÕeÔe�sÑeÔeÐeÕeÔe�sÑeÔeÐeÐeÐeÕeÔeÑeÔeÐeÐeÕeÔe�5ÑeÔeÐeÕeÔe�5ÑeÔeÐeÐeÕeÔeˆzÑeÔeÕeÔe˜QÑeÔeÐeÐeÑeÐeÕeÔeÐ e­¨U©¬Ð eÐ eÐSWÐ eÐ eÐ`cÐ eÐ eÑeÔeÐeÑeÐeÐeÐeÑeÐeÕeÕeÔeÐeÑeÔeÑeÔeÐeÐeÐeÐeÐeÐeÐeØŒ{Ð6˜u Qœxœz¨5°¬8¬:Ð6Ð6ˆ{Ð6Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6ˆ{Ð6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6ˆqÑ6Ô6Ð6Õ6Ô6ˆqÑ6Ô6Ð6Ð6Õ6Ô6ˆ{Ñ6Ô6Õ6Ô6Ð6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6àŒ[ˆØÐˆr˜ˆ~ÐÐÐÕÔÐÐÐÐˆr˜ÐÑÔÐÕÔÑÔÐÐÕÔˆrÑÔÐÕÔˆrÑÔÐÐÕÔ˜ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØ_Ð_Ð_Ð_¥U¨2¬4°´¸¼±Ñ%=Ô%=Ð_Ñ_Ô_ØgÐgÐgÐg¥U¨2¬4°!©8°R´T¸B¼D±[À1±_Ñ%EÔ%EÐgÑgÔgñhˆ	àð 	.ñ 	.‰FˆB�Ø”7˜2”;˜r”?ˆDØ�Bˆx˜1œ;Ò&Ñ&Ø”~Ð;­Ô);Ð;�~Ð);Ò;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;�~Ð);Ð;Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;�tÑ;Ô;Ð;Õ;Ô;�tÑ;Ô;Ð;Ð;Õ;Ô;�~Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;­Ñ;Ô;Ð;Õ;Ô;­Ñ;Ô;Ð;Ð;Õ;Ô;Ð);Ñ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ø”}Ð-¨Ð-�}¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-�}¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-�tÑ-Ô-Ð-Õ-Ô-�tÑ-Ô-Ð-Ð-Õ-Ô-�}Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ñ-à”~Ðq­¬Ðq�~¨Ò6ÐqÐqÑqÕqÔqÐqÐqÐqÐq�~¨ÐqÑqÔqÐqÕqÔqÑqÔqÐqÐqÕqÔq�tÑqÔqÐqÕqÔq�tÑqÔqÐqÐqÕqÔq�~ÑqÔqÐqÕqÔqÑqÔqÐqÐqÕqÔq­ÑqÔqÐqÕqÔq­ÑqÔqÐqÐqÕqÔq¨ÑqÔqÐqÐqÑqÐqÕqÔqÐ8qÈbÐ8qÐ8qÐSUÐ8qÐ8qÐ_cÐ8qÐ8qÐloÐ8qÐ8qÑqÔqÐqÑqÐqÐqÐqÑqÐqÕqÕqÔqÐqÑqÔqÑqÔqÐqÐqÐqÐqÐqÐqÐqØ”}Ð-¨Ð-�}¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-�}¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-�tÑ-Ô-Ð-Õ-Ô-�tÑ-Ô-Ð-Ð-Õ-Ô-�}Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ñ-ð	.ð 	.rN   c                ó€  — d}|j         }t          |¦  «        }||k    }d}||k    }	|r|	�sGt          j        d||	fd|||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
t          j        dt          |j         ¦  «        › d	|› �¦  «        d
z   d|
iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}	x}x}}|j         D �]Þ}d}|j        }||k    }|j        }||k     }	|j        }||k     }|r|	r|�sPt          j        d||	|fd||||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}	x}x}x}}d}|j        }||k    }|j        }||k     }	|j        }||k     }|r|	r|�sPt          j        d||	|fd||||f¦  «        t          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}x}	x}x}x}}|j        }d}||v }	|	sªt          j        d|	fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}	}�Œàd„ |j        D ¦   «         }t          |¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nddt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        d œz  }d!d"|iz  }t          t          j
        |¦  «        ¦  «        ‚dx}x}}d#„ |D ¦   «         }t'          |¦  «        }	|	s•d$d%t          j        ¦   «         v st          j        t&          ¦  «        rt          j        t&          ¦  «        nd%t          j        |¦  «        t          j        |	¦  «        d&œz  }t          t          j
        |¦  «        ¦  «        ‚dx}}	dS )'zAAsserts 2-3 encounter zones with valid bounds and walkable cells.rV   é   )ú<=rš   )zU%(py1)s <= %(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.encounter_zones
})
}zV%(py9)s
{%(py9)s = %(py4)s(%(py7)s
{%(py7)s = %(py5)s.encounter_zones
})
} <= %(py11)sr„   rO   )r‡   r\   r*   rg   Úpy9Úpy11zEncounter count z not 2-3, seed=z
>assert %(py13)sÚpy13Nr   )rš   ú<rž   )z-%(py1)s <= %(py7)s
{%(py7)s = %(py5)s.min_x
}zI%(py7)s
{%(py7)s = %(py5)s.min_x
} < %(py10)s
{%(py10)s = %(py8)s.max_x
}zL%(py10)s
{%(py10)s = %(py8)s.max_x
} < %(py13)s
{%(py13)s = %(py11)s.width
}Úenc)r‡   r*   rg   rb   Úpy10rœ   r�   zassert %(py15)sÚpy15)z-%(py1)s <= %(py7)s
{%(py7)s = %(py5)s.min_y
}zI%(py7)s
{%(py7)s = %(py5)s.min_y
} < %(py10)s
{%(py10)s = %(py8)s.max_y
}zM%(py10)s
{%(py10)s = %(py8)s.max_y
} < %(py13)s
{%(py13)s = %(py11)s.height
})r   rV   r™   ©Úin)z,%(py2)s
{%(py2)s = %(py0)s.tier
} in %(py5)srf   rˆ   rg   c                óp   — g | ]3}|D ].}|j         t          j        t          j        t          j        fv ¯,|‘Œ/Œ4S r{   )rm   r   ÚENCOUNTER_LOWÚENCOUNTER_MEDIUMÚENCOUNTER_HIGHr}   s      rL   r�   zWTestWildernessMapGeneratorAdversarialStress._verify_encounter_zones.<locals>.<listcomp>r   s[   € ð ð ð ˜3°3ð ð ¨a¸!¼+ÝÔ"¥HÔ$=½xÔ?VðJ
ð ;
ð ;
�Qð ;
ð ;
ð ;
ð ;
rN   é   r"   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} >= %(py6)sÚ	enc_cellsr†   r’   rb   c              3  ó$   K  — | ]}|j         V — Œd S )N)rp   )r~   r€   s     rL   ú	<genexpr>zVTestWildernessMapGeneratorAdversarialStress._verify_encounter_zones.<locals>.<genexpr>v   s$   è è € Ð1Ð1 !�1”:Ð1Ð1Ð1Ð1Ð1Ð1rN   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall)r'   r[   r\   )Úencounter_zonesr„   r7   r8   r<   r9   r:   r;   ro   r=   r>   Úmin_xÚmax_xrk   Úmin_yÚmax_yrj   Útierrl   r¬   )r?   rO   r!   rQ   Ú@py_assert0Ú@py_assert6Ú@py_assert8rH   Ú@py_assert10rt   Ú@py_format12Ú@py_format14rŸ   Ú@py_assert9Ú@py_assert12rw   Ú@py_format16rI   rK   rx   r©   rs   ru   rv   Ú@py_format5s                            rL   r4   zCTestWildernessMapGeneratorAdversarialStress._verify_encounter_zonesj   s  € àÐq˜Ô)Ðq•CÐ)Ñ*Ô*ÐqˆqÐ*Ò/Ðq¨aÐqÐ*¨aÒ/ÐqÐqÐqÐqÑqÕqÔqÐqÐqÐqÐqÐqˆqÐ*¨aÐqÑqÔqÕqÔqˆqÑqÔqÐqÕqÔqÑqÔqÐqÐqÕqÔq•CÑqÔqÐqÕqÔq•CÑqÔqÐqÐqÐqÕqÔqÑqÔqÐqÐqÕqÔq˜ÑqÔqÐqÕqÔq˜ÑqÔqÐqÐqÕqÔqÐ)ÑqÔqÕqÔqÐ*ÑqÔqÕqÔq¨aÑqÔqÐqÐqÑqÐqÕqÔqÐ1qÅCÈÔHYÑDZÔDZÐ1qÐ1qÐkoÐ1qÐ1qÑqÔqÐqÑqÐqÐqÐqÑqÐqÕqÕqÔqÐqÑqÔqÑqÔqÐqÐqÐqÐqÐqÐqÐqÐqÐqÐqÐqÐqÐqØÔ$ð 	)ñ 	)ˆCØÐ7˜œ	Ð7�1˜	Ò7Ð7 C¤IÐ7˜	 IÒ7Ð7°´Ð7 I°Ò7Ð7Ð7Ð7Ð7Ð7Ð7Ñ7Õ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7�1˜	 I°Ð7Ñ7Ô7Õ7Ô7�1Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7˜Ñ7Ô7Ð7Õ7Ô7˜Ñ7Ô7Ð7Ð7Õ7Ô7˜	Ñ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7 CÑ7Ô7Ð7Õ7Ô7 CÑ7Ô7Ð7Ð7Õ7Ô7 IÑ7Ô7Ð7Õ7Ô7Ñ7Ô7Ð7Ð7Õ7Ô7°Ñ7Ô7Ð7Õ7Ô7°Ñ7Ô7Ð7Ð7Õ7Ô7°Ñ7Ô7Ð7Ð7Ñ7Ð7Ð7Ð7Ð7Ð7Ñ7Ð7Õ7Õ7Ô7Ð7Ñ7Ô7Ñ7Ô7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÐ8˜œ	Ð8�1˜	Ò8Ð8 C¤IÐ8˜	 IÒ8Ð8°´Ð8 I°Ò8Ð8Ð8Ð8Ð8Ð8Ð8Ñ8Õ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8�1˜	 I°Ð8Ñ8Ô8Õ8Ô8�1Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8˜Ñ8Ô8Ð8Õ8Ô8˜Ñ8Ô8Ð8Ð8Õ8Ô8˜	Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8 CÑ8Ô8Ð8Õ8Ô8 CÑ8Ô8Ð8Ð8Õ8Ô8 IÑ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8°Ñ8Ô8Ð8Õ8Ô8°Ñ8Ô8Ð8Ð8Õ8Ô8°Ñ8Ô8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ø”8Ð(˜yÐ(�8˜yÐ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(�8˜yÐ(Ñ(Ô(Ð(Õ(Ô(Ñ(Ô(Ð(Ð(Õ(Ô(�3Ñ(Ô(Ð(Õ(Ô(�3Ñ(Ô(Ð(Ð(Õ(Ô(�8Ñ(Ô(Õ(Ô(˜yÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ñ(ðð  !¤'ð ñ ô ˆ	õ �9‰~Œ~Ð# Ð#ˆ~ Ò#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ~ Ð#Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#�sÑ#Ô#Ð#Õ#Ô#�sÑ#Ô#Ð#Ð#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#�9Ñ#Ô#Ð#Õ#Ô#�9Ñ#Ô#Ð#Ð#Õ#Ô#ˆ~Ñ#Ô#Õ#Ô# Ñ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ø1Ð1 yÐ1Ñ1Ô1Ð1�sÐ1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�sÑ1Ô1Ð1Õ1Ô1�sÑ1Ô1Ð1Ð1Õ1Ô1Ð1Ñ1Ô1Õ1Ô1Ð1Ñ1Ô1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1rN   Úfloatc                ó~  — t          ||j        |j        d¬¦  «        \  }}d}||u }|s²t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          j	        d|› d|› �¦  «        d	z   d
|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}}t          ||j        |j        ¦  «        }
d}|
|k    }|sµt          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        dœz  }t          j	        d|
› d|› d|› �¦  «        d	z   d
|iz  }	t          t          j        |	¦  «        ¦  «        ‚dx}}|
S )z0Asserts path connectivity and sinuosity >= 1.25.T©Úallow_sealed_boss_gaterc   ©z%(py0)s is %(py3)sÚokr&   z Main path disconnected for seed=r`   ú
>assert %(py5)sr*   Nr+   r"   r$   rG   z
Sinuosity z < 1.25 for seed=)r   r1   r“   r7   r8   r9   r:   r;   r<   ro   r=   r>   r   )r?   rO   r!   rQ   rÂ   ÚpathrH   rI   rJ   rK   rG   s              rL   r5   z=TestWildernessMapGeneratorAdversarialStress._verify_sinuosityx   s	  € å+¨A¨q¬}¸a¼kÐbfÐgÑgÔg‰ˆˆDØÐPˆr�TˆzÐPÐPÐPÕPÔPÐPÐPÐPÐPˆr�TÐPÑPÔPÐPÕPÔPÑPÔPÐPÐPÕPÔPˆrÑPÔPÐPÕPÔPˆrÑPÔPÐPÐPÕPÔP�TÑPÔPÐPÐPÑPÐPÕPÔPÐP¸dÐPÐPÈ3ÐPÐPÑPÔPÐPÑPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÝ& t¨Q¬]¸A¼KÑHÔHˆØÐQˆs�dŠ{ÐQÐQÐQÕQÔQÐQÐQÐQÐQˆs�dÐQÑQÔQÐQÕQÔQÑQÔQÐQÐQÕQÔQˆsÑQÔQÐQÕQÔQˆsÑQÔQÐQÐQÕQÔQ�dÑQÔQÐQÐQÑQÐQÕQÔQÐQ¨ÐQÐQ¸tÐQÐQÈCÐQÐQÑQÔQÐQÑQÐQÐQÐQÑQÐQÕQÕQÔQÐQÑQÔQÑQÔQÐQÐQÐQÐQÐQØˆ
rN   c                ó–  — t          |¦  «        }t          |¦  «        }t          |¦  «        }||k    }|sÝt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }t          j        d|› d|› �¦  «        dz   d	|iz  }	t          t          j
        |	¦  «        ¦  «        ‚d
}g }|j        }
|j        }|
|k    }|}|r|j        }|j        }||k    }|}|�sút          j        d|fd|
|f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         |rÜt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}x}
x}x}x}x}}g }|j        }
|j        }|
|k    }|}|r|j        }|j        }||k    }|}|�sút          j        d|fd|
|f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |
¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         |rÜt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}x}
x}x}x}x}}|j        }t%          |¦  «        }|j        }t%          |¦  «        }||k    }|�sžt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t$          ¦  «        rt          j        t$          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        t$          ¦  «        rt          j        t$          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}x}x}}|j        }t%          |¦  «        }|j        }t%          |¦  «        }||k    }|�sžt          j        d|fd||f¦  «        dt	          j        ¦   «         v st          j        t$          ¦  «        rt          j        t$          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        t$          ¦  «        rt          j        t$          ¦  «        nddt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j
        |¦  «        ¦  «        ‚d
x}x}x}x}}d
S ) z<Asserts zero bit-level drift across serialization roundtrip.r‚   )z%(py0)s == %(py2)sÚb1Úb2)r'   r[   z-Bit drift detected on re-serialization, seed=r`   z
>assert %(py4)sr\   N)zH%(py4)s
{%(py4)s = %(py2)s.width
} == %(py8)s
{%(py8)s = %(py6)s.width
}Úm2rO   )r[   r\   r]   rb   z%(py10)sr    )zP%(py14)s
{%(py14)s = %(py12)s.height
} == %(py18)s
{%(py18)s = %(py16)s.height
})Úpy12Úpy14Úpy16Úpy18z%(py20)sÚpy20r   zassert %(py23)sÚpy23)zT%(py4)s
{%(py4)s = %(py2)s.spawn_point
} == %(py8)s
{%(py8)s = %(py6)s.spawn_point
})zV%(py14)s
{%(py14)s = %(py12)s.boss_gate
} == %(py18)s
{%(py18)s = %(py16)s.boss_gate
})zœ%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.encounter_zones
})
} == %(py12)s
{%(py12)s = %(py7)s(%(py10)s
{%(py10)s = %(py8)s.encounter_zones
})
}r„   )r'   r‡   r(   r*   rg   rb   r    rÉ   zassert %(py14)srÊ   )z’%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.poi_points
})
} == %(py12)s
{%(py12)s = %(py7)s(%(py10)s
{%(py10)s = %(py8)s.poi_points
})
})r   r   r7   r8   r9   r:   r;   r<   ro   r=   r>   rk   rj   ÚappendÚ_format_boolopr1   r“   r­   r„   Ú
poi_points)r?   rO   r!   rQ   rÆ   rÈ   rÇ   rI   Ú@py_format3r¼   rt   Ú@py_assert7rs   r³   Ú@py_assert13Ú@py_assert17Ú@py_assert15rv   Ú@py_format11Ú@py_format19Ú@py_format21Ú@py_format22Ú@py_format24rH   rw   r¹   Ú@py_assert11r´   Ú@py_format13Ú@py_format15s                                 rL   r6   zDTestWildernessMapGeneratorAdversarialStress._verify_binary_roundtrip€   s
  € å Ñ"Ô"ˆÝ! "Ñ%Ô%ˆÝ Ñ#Ô#ˆØ�RŠxÐ[Ð[Ð[Õ[Ô[Ð[Ð[Ð[Ð[ˆr�RÐ[Ñ[Ô[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[ˆrÑ[Ô[Ð[Õ[Ô[ˆrÑ[Ô[Ð[Ð[Ð[Õ[Ô[Ñ[Ô[Ð[Ð[Õ[Ô[�RÑ[Ô[Ð[Õ[Ô[�RÑ[Ô[Ð[Ð[Ð[Ð[Ñ[Ð[Õ[Ô[Ð[ÈÐ[Ð[ÐVYÐ[Ð[Ñ[Ô[Ð[Ñ[Ð[Ð[Ð[Ñ[Ð[Õ[Õ[Ô[Ð[Ñ[Ô[Ñ[Ô[Ð[Ð[Ð[Ø<Ð<ˆrŒxÐ<˜1œ7Ð<ˆx˜7Ò"Ð<Ð<Ð<Ð<Ð< r¤yÐ<°A´HÐ< y°HÒ'<Ð<Ð<Ð<Ð<Ñ<Õ<Ô<Ð<Ð<Ð<Ð<ˆx˜7Ð<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<ˆrÑ<Ô<Ð<Õ<Ô<ˆrÑ<Ô<Ð<Ð<Õ<Ô<ˆxÑ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<˜1Ñ<Ô<Ð<Õ<Ô<˜1Ñ<Ô<Ð<Ð<Õ<Ô<˜7Ñ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Ð<×<Ò<Ð<Ñ<Ô<Ð<Ð<Ð<Õ<Ô<Ð<Ð<Ð<Ð< y°HÐ<Ñ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô< rÑ<Ô<Ð<Õ<Ô< rÑ<Ô<Ð<Ð<Õ<Ô< yÑ<Ô<Ð<Õ<Ô<Ñ<Ô<Ð<Ð<Õ<Ô<°AÑ<Ô<Ð<Õ<Ô<°AÑ<Ô<Ð<Ð<Õ<Ô<°HÑ<Ô<Ð<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Ð<×<Ò<Ð<Ñ<Ô<Ð<Õ<Ô<Ð<Ð<Ñ<Ô<Ð<Ñ<Ð<Ð<Ð<Ð<Ð<Ñ<Ð<Õ<Õ<Ô<Ð<Ñ<Ô<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ØNÐNˆrŒ~ÐN ¤ÐNˆ~ Ò.ÐNÐNÐNÐNÐN°2´<ÐNÀ1Ä;ÐN°<À;Ò3NÐNÐNÐNÐNÑNÕNÔNÐNÐNÐNÐNˆ~ ÐNÑNÔNÐNÕNÔNÑNÔNÐNÐNÕNÔNˆrÑNÔNÐNÕNÔNˆrÑNÔNÐNÐNÕNÔNˆ~ÑNÔNÐNÕNÔNÑNÔNÐNÐNÕNÔN ÑNÔNÐNÕNÔN ÑNÔNÐNÐNÕNÔN ÑNÔNÐNÐNÑNÐNÐNÐNÐNÐNÑNÐNÐN×NÒNÐNÑNÔNÐNÐNÐNÕNÔNÐNÐNÐNÐN°<À;ÐNÑNÔNÐNÕNÔNÑNÔNÐNÐNÕNÔN°2ÑNÔNÐNÕNÔN°2ÑNÔNÐNÐNÕNÔN°<ÑNÔNÐNÕNÔNÑNÔNÐNÐNÕNÔNÀ1ÑNÔNÐNÕNÔNÀ1ÑNÔNÐNÐNÕNÔNÀ;ÑNÔNÐNÐNÑNÐNÐNÐNÐNÐNÑNÐNÐN×NÒNÐNÑNÔNÐNÕNÔNÐNÐNÑNÔNÐNÑNÐNÐNÐNÐNÐNÑNÐNÕNÕNÔNÐNÑNÔNÑNÔNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNÐNØÔ%Ð@�sÐ%Ñ&Ô&Ð@¨aÔ.?Ð@­#Ð.?Ñ*@Ô*@Ð@Ð&Ð*@Ò@Ð@Ð@Ñ@Õ@Ô@Ð@Ð@Ð@Ð@Ð&Ð*@Ð@Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@�sÑ@Ô@Ð@Õ@Ô@�sÑ@Ô@Ð@Ð@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@�2Ñ@Ô@Ð@Õ@Ô@�2Ñ@Ô@Ð@Ð@Õ@Ô@Ð%Ñ@Ô@Õ@Ô@Ð&Ñ@Ô@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@­#Ñ@Ô@Ð@Õ@Ô@­#Ñ@Ô@Ð@Ð@Ð@Õ@Ô@Ñ@Ô@Ð@Ð@Õ@Ô@¨aÑ@Ô@Ð@Õ@Ô@¨aÑ@Ô@Ð@Ð@Õ@Ô@Ð.?Ñ@Ô@Õ@Ô@Ð*@Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ø”=Ð6�s�=Ñ!Ô!Ð6¨¬Ð6¥S¨Ñ%6Ô%6Ð6Ð!Ð%6Ò6Ð6Ð6Ñ6Õ6Ô6Ð6Ð6Ð6Ð6Ð!Ð%6Ð6Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6�sÑ6Ô6Ð6Õ6Ô6�sÑ6Ô6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6�2Ñ6Ô6Ð6Õ6Ô6�2Ñ6Ô6Ð6Ð6Õ6Ô6�=Ñ6Ô6Õ6Ô6Ð!Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¥SÑ6Ô6Ð6Õ6Ô6¥SÑ6Ô6Ð6Ð6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¨Ñ6Ô6Ð6Õ6Ô6¨Ñ6Ô6Ð6Ð6Õ6Ô6¨Ñ6Ô6Õ6Ô6Ð%6Ñ6Ô6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6Ð6rN   c                óR  — t          j        d¦  «        }dD �]Ž}|                     |¬¦  «        }|j        }t	          ||j        |d¬¦  «        \  }}d}||u }|s¯t          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }	t          j        d
|› �¦  «        dz   d|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}}|                      ||d¬¦  «        }|j        }d}||u}|s—t          j        d|fd||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        d	œz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}}|D �]Ò\  }}|j        }||k     }|j        }|j        }||z   }d}||z
  }||k     }|r|�s¤t          j        d||fd|||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}x}x}x}}|j        }||k     }|j        }|j        }||z   }d}||z
  }||k     }|r|�s¤t          j        d||fd|||f¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}x}x}x}x}}�ŒÔ�Œ�dS )zIAdversarial check: with locked boss gate, boss room is 100% impenetrable.Úzone_tang_kiem_nhai)é   é   é!   é,   r   r    Fr¿   rc   rÁ   rÂ   r&   z.Boss arena penetrated while gate locked! seed=rÃ   r*   NT)Úblocked_gater‰   r‹   rŒ   r)   r   )rž   rž   )z(%(py2)s
{%(py2)s = %(py0)s.x
} < %(py5)szZ%(py5)s < ((%(py8)s
{%(py8)s = %(py6)s.x
} + %(py11)s
{%(py11)s = %(py9)s.w
}) - %(py14)s)Úix)r'   r[   r*   r]   rb   r›   rœ   rÊ   z,Interior flood fill escaped boss arena at x=z
>assert %(py17)sÚpy17)z(%(py2)s
{%(py2)s = %(py0)s.y
} < %(py5)szZ%(py5)s < ((%(py8)s
{%(py8)s = %(py6)s.y
} + %(py11)s
{%(py11)s = %(py9)s.h
}) - %(py14)s)Úiyz,Interior flood fill escaped boss arena at y=)r   r.   r0   Ú
boss_pointr   r1   r7   r8   r9   r:   r;   r<   ro   r=   r>   Ú_flood_fillr”   rr   r‘   rq   r�   )r?   rB   r!   rO   ÚaltarrÂ   Ú_rH   rI   rJ   rK   Úinterior_visitedrŒ   ræ   rè   rt   rÓ   r¶   rº   rÔ   rÖ   rw   r»   Ú@py_format18s                           rL   Ú2test_boss_arena_strict_impenetrability_when_lockedz^TestWildernessMapGeneratorAdversarialStress.test_boss_arena_strict_impenetrability_when_locked‹   sp  € å$Ô-Ð.CÑDÔDˆØ(ð 	hñ 	hˆDØ—’ $�Ñ'Ô'ˆAØ”LˆEÝ,¨Q°´¸uÐ]bÐcÑcÔc‰EˆB�ØÐW�2˜�;ÐWÐWÐWÕWÔWÐWÐWÐWÐW�2˜ÐWÑWÔWÐWÕWÔWÑWÔWÐWÐWÕWÔW�2ÑWÔWÐWÕWÔW�2ÑWÔWÐWÐWÕWÔW˜ÑWÔWÐWÐWÑWÐWÕWÔWÐ WÐQUÐ WÐ WÑWÔWÐWÑWÐWÐWÐWÑWÐWÕWÕWÔWÐWÑWÔWÑWÔWÐWÐWÐWÐWÐWð  $×/Ò/°°5ÀtÐ/ÑLÔLÐØ”ˆBØ!Ð!�2˜T�>Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!�2˜TÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!�2Ñ!Ô!Ð!Õ!Ô!�2Ñ!Ô!Ð!Ð!Õ!Ô!˜TÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ø*ð hñ h‘��BØ”tÐg�t˜bÒ2Ðg 2¤4Ðg¨"¬$Ðg 4¨$¡;Ðg°Ðg ;°¡?Ðg˜b ?Ò2ÐgÐgÐgÐgÑgÕgÔgÐgÐgÐgÐgÐg�t˜b ?ÐgÑgÔgÐgÕgÔgÑgÔgÐgÐgÕgÔg�rÑgÔgÐgÕgÔg�rÑgÔgÐgÐgÕgÔg�tÑgÔgÐgÕgÔgÑgÔgÐgÐgÕgÔg˜bÑgÔgÐgÕgÔg˜bÑgÔgÐgÐgÐgÕgÔgÑgÔgÐgÐgÕgÔg 2ÑgÔgÐgÕgÔg 2ÑgÔgÐgÐgÕgÔg 4ÑgÔgÐgÕgÔgÑgÔgÐgÐgÕgÔg¨"ÑgÔgÐgÕgÔg¨"ÑgÔgÐgÐgÕgÔg¨$ÑgÔgÕgÔg°ÑgÔgÐgÐgÑgÐgÕgÔgÐ4gÐceÐ4gÐ4gÑgÔgÐgÑgÐgÐgÐgÑgÐgÕgÕgÔgÐgÑgÔgÑgÔgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgØ”tÐg�t˜bÒ2Ðg 2¤4Ðg¨"¬$Ðg 4¨$¡;Ðg°Ðg ;°¡?Ðg˜b ?Ò2ÐgÐgÐgÐgÑgÕgÔgÐgÐgÐgÐgÐg�t˜b ?ÐgÑgÔgÐgÕgÔgÑgÔgÐgÐgÕgÔg�rÑgÔgÐgÕgÔg�rÑgÔgÐgÐgÕgÔg�tÑgÔgÐgÕgÔgÑgÔgÐgÐgÕgÔg˜bÑgÔgÐgÕgÔg˜bÑgÔgÐgÐgÐgÕgÔgÑgÔgÐgÐgÕgÔg 2ÑgÔgÐgÕgÔg 2ÑgÔgÐgÐgÕgÔg 4ÑgÔgÐgÕgÔgÑgÔgÐgÐgÕgÔg¨"ÑgÔgÐgÕgÔg¨"ÑgÔgÐgÐgÕgÔg¨$ÑgÔgÕgÔg°ÑgÔgÐgÐgÑgÐgÕgÔgÐ4gÐceÐ4gÐ4gÑgÔgÐgÑgÐgÐgÐgÑgÐgÕgÕgÔgÐgÑgÔgÑgÔgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÐgÑgñhð	hð 	hrN   ÚstartúTuple[int, int]rå   ÚboolúSet[Tuple[int, int]]c                óÆ  — t          ¦   «         }|g}|                     |¦  «         |r¸|                     d¦  «        \  }}dD ]›\  }}	||z   ||	z   }}
|
|f|v s|                     |
|¦  «        sŒ,|j        |         |
         }|j        t          j        k    rŒU|r|j        t          j        k    rŒm|                     |
|f¦  «         | 	                    |
|f¦  «         Œœ|°¸|S )z:Breadth-first search finding all connected walkable tiles.r   ))r   r   )r   éÿÿÿÿ)r   r   )rõ   r   )
ÚsetÚaddÚpopÚis_in_boundsrl   rm   r   rn   r|   rÏ   )r?   rO   rð   rå   ÚvisitedÚqueueÚcxÚcyÚdxÚdyÚnxÚnyrY   s                rL   rê   z7TestWildernessMapGeneratorAdversarialStress._flood_fillœ   s  € å(+©¬ˆØ�ˆØ�Š�EÑÔÐØð 	'Ø—Y’Y˜q‘\”\‰FˆB�Ø<ð 
'ð 
'‘��BØ˜b™ " r¡'�B�Ø˜�8˜wÐ&Ð&¨a¯nªn¸RÀÑ.DÔ.DÐ&ØØ”w˜r”{ 2”�Ø”>¥X¤]Ò2Ð2ØØð  D¤NµhÔ6HÒ$HÐ$HØØ—’˜R ˜HÑ%Ô%Ð%Ø—’˜b "˜XÑ&Ô&Ð&Ð&ð ð 	'ð ˆrN   c           
     ó2  — t           D �]}t          j        |¦  «        }|                     d¬¦  «        }|j        D ]ä\  }}}t          ||j        ||fd¬¦  «        \  }}d}||u }	|	sµt          j        d|	fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }
t          j        d	|› d
|› d|› �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}	}Œå|j        D ]ã\  }}t          ||j        ||fd¬¦  «        \  }}d}||u }	|	sµt          j        d|	fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }
t          j        d|› d
|› d|› �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}	}Œä|j        D �] }|j        |j        z   dz  |j        |j        z   dz  f}t          ||j        |d¬¦  «        \  }}d}||u }	|	s²t          j        d|	fd||f¦  «        dt          j
        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }
t          j        d|› d|› �¦  «        dz   d|
iz  }t          t          j        |¦  «        ¦  «        ‚dx}	}�Œ�ŒdS )zJEnsures player can traverse to all POIs, dead ends, and encounter centers.i	  r    Tr¿   rc   rÁ   rÂ   r&   zUnreachable POI at (r^   z) in rÃ   r*   NzUnreachable dead end at (rV   z%Unreachable encounter zone center at z in )r   r   r.   r0   rÑ   r   r1   r7   r8   r9   r:   r;   r<   ro   r=   r>   Údead_end_pointsr­   r®   r¯   r°   r±   )r?   rQ   rB   rO   r–   r—   rì   rÂ   rH   rI   rJ   rK   rþ   rÿ   rŸ   Úcenters                   rL   Ú0test_all_pois_and_dead_ends_reachable_from_spawnz\TestWildernessMapGeneratorAdversarialStress.test_all_pois_and_dead_ends_reachable_from_spawn°   sÖ  € å"ð 	]ñ 	]ˆCÝ(Ô1°#Ñ6Ô6ˆCØ—’ #�Ñ&Ô&ˆAØœ\ð Nð N‘	��B˜Ý0°°A´MÀBÈÀ8ÐdhÐiÑiÔi‘��AØ!ÐM�r˜T�zÐMÐMÐMÕMÔMÐMÐMÐMÐM�r˜TÐMÑMÔMÐMÕMÔMÑMÔMÐMÐMÕMÔM�rÑMÔMÐMÕMÔM�rÑMÔMÐMÐMÕMÔM˜TÑMÔMÐMÐMÑMÐMÕMÔMÐ#M¸"Ð#MÐ#M¸rÐ#MÐ#MÈÐ#MÐ#MÑMÔMÐMÑMÐMÐMÐMÑMÐMÕMÕMÔMÐMÑMÔMÑMÔMÐMÐMÐMÐMÐMÐMàÔ+ð Sð S‘��BÝ0°°A´MÀBÈÀ8ÐdhÐiÑiÔi‘��AØ!ÐR�r˜T�zÐRÐRÐRÕRÔRÐRÐRÐRÐR�r˜TÐRÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔR�rÑRÔRÐRÕRÔR�rÑRÔRÐRÐRÕRÔR˜TÑRÔRÐRÐRÑRÐRÕRÔRÐ#R¸rÐ#RÐ#RÀBÐ#RÐ#RÈSÐ#RÐ#RÑRÔRÐRÑRÐRÐRÐRÑRÐRÕRÕRÔRÐRÑRÔRÑRÔRÐRÐRÐRÐRÐRÐRàÔ(ð ]ñ ]�Øœ9 s¤yÑ0°QÑ6¸¼ÀSÄYÑ9NÐSTÑ8TÐU�Ý0°°A´MÀ6ÐbfÐgÑgÔg‘��AØ!Ð\�r˜T�zÐ\Ð\Ð\Õ\Ô\Ð\Ð\Ð\Ð\�r˜TÐ\Ñ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\�rÑ\Ô\Ð\Õ\Ô\�rÑ\Ô\Ð\Ð\Õ\Ô\˜TÑ\Ô\Ð\Ð\Ñ\Ð\Õ\Ô\Ð#\È6Ð#\Ð#\ÐWZÐ#\Ð#\Ñ\Ô\Ð\Ñ\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ñ\ñ]ð	]ð 	]rN   c           	     ól
  — t          j        d¦  «        }g d¢}|D �]}|                     |¬¦  «        }g }|j        }d}||k    }|}	|r|j        }
d}|
|k    }|}	|	�s~t          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        d	œz  }d
d|iz  }|                     |¦  «         |ržt          j        d|fd|
|f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |
¦  «        t          j
        |¦  «        dœz  }dd|iz  }|                     |¦  «         t          j        |d¦  «        i z  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}	x}x}x}x}x}
x}}|j        }t!          |¦  «        }d}||v }|�st          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        t           ¦  «        rt          j
        t           ¦  «        nddt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}x}}|j        }d}||u}|sªt          j        d|fd||f¦  «        dt          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        ndt          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}x}}t%          |¦  «        }t!          |¦  «        }|t&          k    }|�s,t          j        d |fd!|t&          f¦  «        dt          j        ¦   «         v st          j	        t           ¦  «        rt          j
        t           ¦  «        ndd"t          j        ¦   «         v st          j	        |¦  «        rt          j
        |¦  «        nd"t          j
        |¦  «        d#t          j        ¦   «         v st          j	        t&          ¦  «        rt          j
        t&          ¦  «        nd#d$œz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}�ŒdS )%z:Fuzzes extreme random seeds (negative, zero, large int64).rà   )iÁ½ðÿrõ   r   r   iÿÿÿl       r    é<   é-   r‚   )z-%(py4)s
{%(py4)s = %(py2)s.width
} == %(py7)srO   )r[   r\   rg   z%(py9)sr›   )z2%(py13)s
{%(py13)s = %(py11)s.height
} == %(py16)s)rœ   r�   rË   z%(py18)srÌ   r   zassert %(py21)sÚpy21N)rV   r™   r¢   )zU%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.encounter_zones
})
} in %(py8)sr„   )r'   r‡   r(   r*   rb   zassert %(py10)sr    r‰   )z5%(py2)s
{%(py2)s = %(py0)s.boss_gate
} is not %(py5)srf   rˆ   rg   )ú>)z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py5)sÚbr   )r'   r‡   r(   r*   )r   r.   r0   rk   rj   r7   r8   r9   r:   r;   r<   rÏ   rÐ   r=   r>   r­   r„   r“   r   r   )r?   rB   Úextreme_seedsr!   rO   rI   rt   r´   rs   r³   rº   rÖ   Ú@py_assert14rx   Ú@py_format10Ú@py_format17rØ   Ú@py_format20rÚ   rH   rw   rÓ   rv   r×   rK   r  s                             rL   Útest_extreme_seed_fuzzingzETestWildernessMapGeneratorAdversarialStress.test_extreme_seed_fuzzingÂ   sÇ  € å$Ô-Ð.CÑDÔDˆØAÐAÐAˆØ!ð 	(ñ 	(ˆDØ—’ $�Ñ'Ô'ˆAØ3Ð3�1”7Ð3˜bÐ3�7˜b’=Ð3Ð3Ð3Ð3Ð3 Q¤XÐ3°Ð3 X°¢^Ð3Ð3Ð3Ð3Ñ3Õ3Ô3Ð3Ð3Ð3Ð3�7˜bÐ3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�1Ñ3Ô3Ð3Õ3Ô3�1Ñ3Ô3Ð3Ð3Õ3Ô3�7Ñ3Ô3Õ3Ô3˜bÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Ð3×3Ò3Ð3Ñ3Ô3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3 X°Ð3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3 QÑ3Ô3Ð3Õ3Ô3 QÑ3Ô3Ð3Ð3Õ3Ô3 XÑ3Ô3Õ3Ô3°Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Ð3×3Ò3Ð3Ñ3Ô3Ð3Õ3Ô3Ð3Ð3Ñ3Ô3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ØÔ(Ð3•3Ð(Ñ)Ô)Ð3¨VÐ3Ð)¨VÐ3Ð3Ð3Ñ3Õ3Ô3Ð3Ð3Ð3Ð3Ð)¨VÐ3Ñ3Ô3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3•3Ñ3Ô3Ð3Õ3Ô3•3Ñ3Ô3Ð3Ð3Ð3Õ3Ô3Ñ3Ô3Ð3Ð3Õ3Ô3�qÑ3Ô3Ð3Õ3Ô3�qÑ3Ô3Ð3Ð3Õ3Ô3Ð(Ñ3Ô3Õ3Ô3Ð)Ñ3Ô3Õ3Ô3¨VÑ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø”;Ð* dÐ*�; dÐ*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*�; dÐ*Ñ*Ô*Ð*Õ*Ô*Ñ*Ô*Ð*Ð*Õ*Ô*�1Ñ*Ô*Ð*Õ*Ô*�1Ñ*Ô*Ð*Ð*Õ*Ô*�;Ñ*Ô*Õ*Ô* dÑ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ý" 1Ñ%Ô%ˆAÝ�q‘6”6Ð'�6�KÒ'Ð'Ð'Ñ'Õ'Ô'Ð'Ð'Ð'Ð'�6�KÐ'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'•3Ñ'Ô'Ð'Õ'Ô'•3Ñ'Ô'Ð'Ð'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'�qÑ'Ô'Ð'Õ'Ô'�qÑ'Ô'Ð'Ð'Õ'Ô'�6Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'�KÑ'Ô'Ð'Õ'Ô'�KÑ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ñ'ð	(ð 	(rN   c                óÌ  — t          j        d¦  «        }t          t          |                     d¬¦  «        ¦  «        ¦  «        }t          j        t          d¬¦  «        5  t          t          |dd…         ¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   t          |¦  «        }t          d¦  «        |d	<   t          j        t          d
¬¦  «        5  t          t          |¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   t          j        t          d¬¦  «        5  t          t          |dd…         ¦  «        ¦  «         ddd¦  «         dS # 1 swxY w Y   dS )zPVerifies binary deserializer rejects malformed, truncated, and corrupt payloads.rà   é{   r    zBuffer too short)ÚmatchNé
   ó   Xr   zInvalid map magiczBuffer truncatediÎÿÿÿ)r   r.   Ú	bytearrayr   r0   ÚpytestÚraisesÚ
ValueErrorr   ÚbytesÚord)r?   rB   Úvalid_bytesÚcorrupt_magics       rL   Ú,test_binary_serializer_adversarial_tamperingzXTestWildernessMapGeneratorAdversarialStress.test_binary_serializer_adversarial_tamperingÎ   sþ  € å$Ô-Ð.CÑDÔDˆÝÕ 2°3·<²<ÀS°<Ñ3IÔ3IÑ JÔ JÑKÔKˆõ Œ]�:Ð-?Ð@Ñ@Ô@ð 	:ð 	:Ý ¥ {°3°B°3Ô'7Ñ!8Ô!8Ñ9Ô9Ð9ð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:õ " +Ñ.Ô.ˆÝ˜t™9œ9ˆ�aÑÝŒ]�:Ð-@ÐAÑAÔAð 	7ð 	7Ý ¥ }Ñ!5Ô!5Ñ6Ô6Ð6ð	7ð 	7ð 	7ñ 	7ô 	7ð 	7ð 	7ð 	7ð 	7ð 	7ð 	7øøøð 	7ð 	7ð 	7ð 	7õ Œ]�:Ð-?Ð@Ñ@Ô@ð 	;ð 	;Ý ¥ {°4°C°4Ô'8Ñ!9Ô!9Ñ:Ô:Ð:ð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð 	;ð 	;s6   Á %BÂBÂBÃDÄDÄDÄ'%EÅEÅ EN)r   r   )rO   r
   rE   rP   rF   rP   r!   rP   rQ   rR   r   r   )rO   r
   r!   rP   rQ   rR   r   r   )rO   r
   r!   rP   rQ   rR   r   r½   )rO   r
   rð   rñ   rå   rò   r   ró   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rM   r2   r3   r4   r5   r6   rï   rê   r  r  r  r{   rN   rL   r   r   *   s  € € € € € ØQÐQð%ð %ð %ð %ðBwð wð wð wð.ð .ð .ð .ð&2ð 2ð 2ð 2ðð ð ð ð	7ð 	7ð 	7ð 	7ðhð hð hð hð"ð ð ð ð(]ð ]ð ]ð ]ð$
(ð 
(ð 
(ð 
(ð;ð ;ð ;ð ;ð ;ð ;rN   r   )'r#  Ú
__future__r   Úbuiltinsr9   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter7   ÚmathÚstructÚtypingr   r   r   r   r  Úserver.world.map_data_typesr   r	   r
   r   Ú%server.world.wilderness_map_generatorr   r   Ú"server.world.map_binary_serializerr   r   r   r   r   Ú"server.world.procedural_map_enginer   r   ÚlistÚkeysr   Ú__annotations__r   r{   rN   rL   ú<module>r3     sÂ  ððð ð ð #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € €€€€Ø €€€Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø €€€ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð "˜TÐ"9Ð"4Ô"9Ñ";Ô";Ñ<Ô<Ð@ZÐ?[Ñ[€Ð [Ð [Ð [Ñ [ðu;ð u;ð u;ð u;ð u;ñ u;ô u;ð u;ð u;ð u;rN   