§
    ‘¿jç,  ã                  ó|  — 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ZddlZddlZddlmZmZmZ ddlZddlmZmZ ddlmZmZmZ ddlmZmZ ddlmZm Z  dd	l!m"Z"  ej#        d
¬¦  «        dd„¦   «         Z$ G d„ d¦  «        Z% G d„ d¦  «        Z& G d„ d¦  «        Z' G d„ d¦  «        Z( G d„ d¦  «        Z)dS )aú  
E2E Test Suite for FreeExile 30 Biomes Procedural Generation & Server Pipeline.
Validates:
1. Procedural generation across all 30 biomes (seeds 1..30).
2. Compact binary serialization across all 30 biomes with header byte 3 mapping to 1..30.
3. Zone canonical biome resolution and override logic.
4. WebApp /api/map query parameter integration with tools/serve_webapp.py.
5. Adversarial buffer corruption and edge case handling.

Rules: Strict typing, functions <= 50 lines, file <= 350 lines (soft cap).
é    )ÚannotationsN)Ú	GeneratorÚListÚTuple)ÚTileTypeÚMapGridData)Úlist_stylesÚget_map_styleÚget_style_by_code)ÚWildernessMapGeneratorÚZONE_DEFAULT_SIZES)Úserialize_map_gridÚdeserialize_map_grid)ÚFreeExileHTTPRequestHandlerÚmodule)ÚscopeÚreturnúGenerator[str, None, None]c               #  ó  K  — t          j        dt          ¦  «        } | j        d         }t	          j        | j        d¬¦  «        }|                     ¦   «          d|› �V — |                      ¦   «          |  	                    ¦   «          dS )zSSpins up a lightweight local test server on an ephemeral port for E2E HTTP testing.)z	127.0.0.1r   é   T)ÚtargetÚdaemonzhttp://127.0.0.1:N)
ÚsocketserverÚ	TCPServerr   Úserver_addressÚ	threadingÚThreadÚserve_foreverÚstartÚshutdownÚserver_close)ÚserverÚportÚthreads      ú@C:\Projects\FreeExile\tests\e2e\test_30_biomes_generation_e2e.pyÚwebapp_serverr&      sŠ   è è € õ Ô#Ð$4Õ6QÑRÔR€FØÔ  Ô#€DÝÔ VÔ%9À$ÐGÑGÔG€FØ
‡L‚L�N„N€NØ
$˜dÐ
$Ð
$Ð$Ð$Ð$Ø
‡O‚OÑÔÐØ
×ÒÑÔÐÐÐó    c                  ó2   — e Zd ZdZd	d„Zd	d„Zd	d„Zd	d„ZdS )
Ú TestProceduralGeneration30BiomeszHVerifies procedural map generation for all 30 biomes across seeds 1..30.r   ÚNonec                óp  — g d¢}|D �]­\  }}t          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        }||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dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}}|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	        |¦  «        t	          j	        |¦  «        dœz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}	}�Œ¯dS )zJBaseline verification that legacy biomes (codes 1-5) generate valid grids.©)ÚBLEACHED_BONE_CANYONr   )ÚSAVAGE_MANGROVE_SWAMPé   )ÚCRIMSON_BLOOD_FORESTé   )ÚOUTCAST_MINE_SHAFTSé   )ÚCORRUPTED_FIEND_RUINSé   é<   é-   ©ÚwidthÚheightÚbiome_id©Úseed©ú==©z-%(py4)s
{%(py4)s = %(py2)s.width
} == %(py7)sÚgrid©Úpy2Úpy4Úpy7ú%(py9)sÚpy9©z2%(py13)s
{%(py13)s = %(py11)s.height
} == %(py16)s©Úpy11Úpy13Úpy16ú%(py18)sÚpy18r   úassert %(py21)sÚpy21N)z-%(py2)s
{%(py2)s = %(py0)s.biome
} == %(py4)sÚb_name)Úpy0rC   rD   úassert %(py6)sÚpy6©ú>©zQ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.get_walkables_count
}()
} > %(py7)s©rR   rC   rD   rE   úassert %(py9)s)r   Úgenerater9   r:   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚappendÚ_format_boolopÚAssertionErrorÚ_format_explanationÚbiomeÚget_walkables_count)ÚselfÚlegacy_biomesrQ   Úb_codeÚgenrA   Ú@py_assert1Ú@py_assert3Ú@py_assert6Ú@py_assert5Ú@py_assert0Ú@py_assert12Ú@py_assert15Ú@py_assert14Ú@py_format8Ú@py_format10Ú@py_format17Ú@py_format19Ú@py_format20Ú@py_format22Ú@py_format5Ú@py_format7s                         r%   Ú&test_generation_legacy_biomes_baselinezGTestProceduralGeneration30Biomes.test_generation_legacy_biomes_baseline,   sw  € ð
ð 
ð 
ˆð ,ð 	2ñ 	2‰NˆF�FÝ(¨r¸"ÀvÐNÑNÔNˆCØ—<’< V�<Ñ,Ô,ˆDØ9Ð9�4”:Ð9 Ð9�: Ò#Ð9Ð9Ð9Ð9Ð9¨¬Ð9°rÐ9¨°rÒ(9Ð9Ð9Ð9Ð9Ñ9Õ9Ô9Ð9Ð9Ð9Ð9�: Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9�4Ñ9Ô9Ð9Õ9Ô9�4Ñ9Ô9Ð9Ð9Õ9Ô9�:Ñ9Ô9Õ9Ô9 Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9×9Ò9Ð9Ñ9Ô9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9¨°rÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¨Ñ9Ô9Ð9Õ9Ô9¨Ñ9Ô9Ð9Ð9Õ9Ô9¨Ñ9Ô9Õ9Ô9°rÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9×9Ò9Ð9Ñ9Ô9Ð9Õ9Ô9Ð9Ð9Ñ9Ô9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø”:Ð'�: Ò'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'�: Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'�4Ñ'Ô'Ð'Õ'Ô'�4Ñ'Ô'Ð'Ð'Õ'Ô'�:Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' Ñ'Ô'Ð'Õ'Ô' Ñ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'ØÔ+Ð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�4Ñ1Ô1Ð1Õ1Ô1�4Ñ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Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ñ1ð	2ð 	2r'   c                óÞ  — t          ¦   «         }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z   d	|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}}|D �	]#}|j        }t          d
d|j        ¬¦  «        }	|	                     |¬¦  «        }
t          |
t           ¦  «        }|�sd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dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚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}}g }d}|
j        d         }||k    }|
j        }||k     }|o|}|r(|r&d}|
j        d         }||k    }|
j        }||k     }|o|}|�sªt          j        d||fd |||f¦  «        t          j        |¦  «        t          j        |¦  «        dt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        d!œz  }d"d#|iz  }|                     |¦  «         |rµ|r³t          j        d||fd$|||f¦  «        t          j        |¦  «        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}x}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}}|
j        }t          |¦  «        }d/}%||%k    }|�st          j        d0|fd1||%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        |%¦  «        d2œz  }d3d4|iz  }t          t          j
        |¦  «        ¦  «        ‚d x}x}x}}%|
j        } |¦   «         }|
j        }&|
j        }'|&|'z  }(d5}|(|z  }t3          |¦  «        }||k    }|�sºt          j        d0|fd6||f¦  «        dt	          j        ¦   «         v st          j        |
¦  «        rt          j        |
¦  «        ndt          j        |¦  «        t          j        |¦  «        d7t	          j        ¦   «         v st          j        t2          ¦  «        rt          j        t2          ¦  «        nd7d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        |¦  «        t          j        |¦  «        d8œ
z  }d9d:|iz  })t          t          j
        |)¦  «        ¦  «        ‚d x}x}x}x}&x}'x}(x}x}}�	Œ%d S );Né   r>   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚ
all_styles)rR   Úpy1Úpy3rT   z$Expected 30 canonical styles, found z
>assert %(py8)sÚpy8r6   r7   r8   r<   z5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}Ú
isinstancerA   r   )rR   r€   rC   rD   r@   rB   rF   rG   rH   rI   rM   rN   r   rO   rP   r   )ú<=ú<)z%(py3)s <= %(py7)sz.%(py7)s < %(py10)s
{%(py10)s = %(py8)s.width
})r�   rE   r‚   Úpy10z%(py12)sÚpy12)z%(py15)s <= %(py19)sz1%(py19)s < %(py22)s
{%(py22)s = %(py20)s.height
})Úpy15Úpy19Úpy20Úpy22z%(py24)sÚpy24zassert %(py27)sÚpy27©úis not)z5%(py2)s
{%(py2)s = %(py0)s.boss_gate
} is not %(py5)s©rR   rC   Úpy5úassert %(py7)srE   r/   )ú>=)zU%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.encounter_zones
})
} >= %(py8)s)rR   r€   r�   r‘   r‚   úassert %(py10)sr†   g333333Ã?)zÅ%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.get_walkables_count
}()
} >= %(py18)s
{%(py18)s = %(py6)s(((%(py9)s
{%(py9)s = %(py7)s.width
} * %(py12)s
{%(py12)s = %(py10)s.height
}) * %(py15)s))
}Úint)
rR   rC   rD   rT   rE   rG   r†   r‡   rˆ   rN   zassert %(py20)srŠ   )r	   r~   r[   r\   r]   r^   r_   r`   Ú_format_assertmsgrc   rd   Ú
biome_coder   Ústyle_idrZ   rƒ   r   r9   r:   ra   rb   Úspawn_pointÚ	boss_gateÚencounter_zonesrf   r•   )*rg   r   Ú@py_assert2rn   Ú@py_assert4rz   Ú@py_format9Ústyler=   rj   rA   rl   ry   rk   rm   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   Ú@py_assert9Ú@py_assert18Ú@py_assert16Ú@py_assert21Ú@py_assert17Ú@py_format11Ú@py_format13Ú@py_format23Ú@py_format25Ú@py_format26Ú@py_format28Ú@py_format6Ú@py_assert7Ú@py_assert8Ú@py_assert11Ú@py_assert13Ú@py_format21s*                                             r%   Útest_generation_all_30_biomesz>TestProceduralGeneration30Biomes.test_generation_all_30_biomes<   s¬  € Ý ‘]”]ˆ
Ý�:‰ŒÐ^ "Ð^ˆ "Ò$Ð^Ð^Ñ^Õ^Ô^Ð^Ð^Ð^Ð^ˆ "Ð^Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^�sÑ^Ô^Ð^Õ^Ô^�sÑ^Ô^Ð^Ð^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^�:Ñ^Ô^Ð^Õ^Ô^�:Ñ^Ô^Ð^Ð^Õ^Ô^ˆÑ^Ô^Õ^Ô^ "Ñ^Ô^Ð^Ð^Ñ^Ð^Õ^Ô^Ð&^ÍSÐQ[É_Ì_Ð&^Ð&^Ñ^Ô^Ð^Ñ^Ð^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^Ð^àð 
	Vñ 
	VˆEØÔ#ˆDÝ(¨r¸"ÀuÄ~ÐVÑVÔVˆCØ—<’< T�<Ñ*Ô*ˆDå˜d¥KÑ0Ô0Ð0Ð0Ñ0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0•:Ñ0Ô0Ð0Õ0Ô0•:Ñ0Ô0Ð0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0˜dÑ0Ô0Ð0Õ0Ô0˜dÑ0Ô0Ð0Ð0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0¥KÑ0Ô0Ð0Õ0Ô0¥KÑ0Ô0Ð0Ð0Õ0Ô0Ð0Ñ0Ô0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ø9Ð9�4”:Ð9 Ð9�: Ò#Ð9Ð9Ð9Ð9Ð9¨¬Ð9°rÐ9¨°rÒ(9Ð9Ð9Ð9Ð9Ñ9Õ9Ô9Ð9Ð9Ð9Ð9�: Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9�4Ñ9Ô9Ð9Õ9Ô9�4Ñ9Ô9Ð9Ð9Õ9Ô9�:Ñ9Ô9Õ9Ô9 Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9×9Ò9Ð9Ñ9Ô9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9¨°rÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¨Ñ9Ô9Ð9Õ9Ô9¨Ñ9Ô9Ð9Ð9Õ9Ô9¨Ñ9Ô9Õ9Ô9°rÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9×9Ò9Ð9Ñ9Ô9Ð9Õ9Ô9Ð9Ð9Ñ9Ô9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØcÐc�1Ðc˜Ô(¨Ô+Ðc�1Ð+Ò8Ðc¨d¬jÐcÐ+¨jÒ8ÐcÐcÐcÐcÐcÐcÐcÐcÐc¸QÐcÀ$ÔBRÐSTÔBUÐc¸QÐBUÒ=cÐcÐX\ÔXcÐcÐBUÐXcÒ=cÐcÐcÐcÐcÐcÐcÑcÕcÔcÐcÐcÐcÐcÐc�1Ð+¨jÐcÑcÔcÕcÔc�1ÑcÔcÕcÔcÐ+ÑcÔcÐcÕcÔcÑcÔcÐcÐcÕcÔc¨dÑcÔcÐcÕcÔc¨dÑcÔcÐcÐcÕcÔc¨jÑcÔcÐcÐcÑcÐcÐcÐcÐcÐcÑcÐcÐc×cÒcÐcÑcÔcÐcÐcÐcÐcÐcÕcÔcÐcÐcÐcÐcÐc¸QÐBUÐXcÐcÑcÔcÕcÔc¸QÑcÔcÕcÔcÐBUÑcÔcÐcÕcÔcÑcÔcÐcÐcÕcÔcÐX\ÑcÔcÐcÕcÔcÐX\ÑcÔcÐcÐcÕcÔcÐXcÑcÔcÐcÐcÑcÐcÐcÐcÐcÐcÑcÐcÐc×cÒcÐcÑcÔcÐcÕcÔcÐcÐcÑcÔcÐcÑcÐcÐcÐcÐcÐcÑcÐcÕcÕcÔcÐcÑcÔcÑcÔcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcÐcØ”>Ð-¨Ð-�>¨Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-�>¨Ð-Ñ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô-�4Ñ-Ô-Ð-Õ-Ô-�4Ñ-Ô-Ð-Ð-Õ-Ô-�>Ñ-Ô-Õ-Ô-¨Ñ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ØÔ+Ð1•3Ð+Ñ,Ô,Ð1°Ð1Ð,°Ò1Ð1Ð1Ñ1Õ1Ô1Ð1Ð1Ð1Ð1Ð,°Ð1Ñ1Ô1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1•3Ñ1Ô1Ð1Õ1Ô1•3Ñ1Ô1Ð1Ð1Ð1Õ1Ô1Ñ1Ô1Ð1Ð1Õ1Ô1�tÑ1Ô1Ð1Õ1Ô1�tÑ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Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ØÔ+ÐUÐ+Ð+Ñ-Ô-ÐU°T´ZÐUÀ$Ä+ÐU°ZÀ+Ñ5MÐUÐPTÐUÐ5MÐPTÑ5TÐUµÐ5TÑ1UÔ1UÐUÐ-Ð1UÒUÐUÐUÑUÕUÔUÐUÐUÐUÐUÐ-Ð1UÐUÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔU�4ÑUÔUÐUÕUÔU�4ÑUÔUÐUÐUÕUÔUÐ+ÑUÔUÕUÔUÐ-ÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔUµÑUÔUÐUÕUÔUµÑUÔUÐUÐUÐUÕUÔUÑUÔUÐUÐUÕUÔU°TÑUÔUÐUÕUÔU°TÑUÔUÐUÐUÕUÔU°ZÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔUÀ$ÑUÔUÐUÕUÔUÀ$ÑUÔUÐUÐUÕUÔUÀ+ÑUÔUÕUÔUÐPTÑUÔUÕUÔUÐ1UÑUÔUÐUÐUÑUÐUÐUÐUÐUÐUÑUÐUÕUÕUÔUÐUÑUÔUÑUÔUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÑUð
	Vð 
	Vr'   c                ó  — t          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  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}t          dd	|j
        ¬
¦  «        }|                     d¬¦  «        }|                     d¬¦  «        }|                     d¬¦  «        }	d„ |j        D ¦   «         }
d„ |j        D ¦   «         }d„ |	j        D ¦   «         }|
|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z   d|iz  }t          t          j        |¦  «        ¦  «        ‚d }|
|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z   d|iz  }t          t          j        |¦  «        ¦  «        ‚d }d S )Nr   rŽ   ©z%(py0)s is not %(py3)srŸ   ©rR   r�   úassert %(py5)sr‘   r6   r7   r8   ée   r<   éÊ   c                ó&   — g | ]}|D ]	}|j         ‘Œ
ŒS © ©Ú	tile_type©Ú.0ÚrowÚcs      r%   ú
<listcomp>zYTestProceduralGeneration30Biomes.test_seed_determinism_and_divergence.<locals>.<listcomp>U   ó'   € ÐBÐBÐB C¸cÐBÐB¸�A”KÐBÐBÐBÐBr'   c                ó&   — g | ]}|D ]	}|j         ‘Œ
ŒS r¹   rº   r¼   s      r%   rÀ   zYTestProceduralGeneration30Biomes.test_seed_determinism_and_divergence.<locals>.<listcomp>V   rÁ   r'   c                ó&   — g | ]}|D ]	}|j         ‘Œ
ŒS r¹   rº   r¼   s      r%   rÀ   zYTestProceduralGeneration30Biomes.test_seed_determinism_and_divergence.<locals>.<listcomp>W   s'   € Ð@Ð@Ð@ 3¸CÐ@Ð@°q�1”;Ð@Ð@Ð@Ð@r'   r>   )z%(py0)s == %(py2)sÚtiles_1aÚtiles_1b©rR   rC   z+Identical seeds must produce identical mapsz
>assert %(py4)srD   )ú!=)z%(py0)s != %(py2)sÚtiles_2z.Different seeds must produce divergent terrain)r   r[   r\   r]   r^   r_   r`   rc   rd   r   r˜   rZ   Útilesr–   )rg   rŸ   rœ   rk   Ú@py_format4r«   rj   Úm1aÚm1bÚm2rÄ   rÅ   rÈ   Ú@py_format3ry   s                  r%   Ú$test_seed_determinism_and_divergencezETestProceduralGeneration30Biomes.test_seed_determinism_and_divergenceL   sO  € Ý! !Ñ$Ô$ˆØ Ð ˆu˜DÐ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆu˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆuÑ Ô Ð Õ Ô ˆuÑ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ý$¨2°bÀ5Ä>ÐRÑRÔRˆà�lŠl ˆlÑ$Ô$ˆØ�lŠl ˆlÑ$Ô$ˆØ�\Š\˜sˆ\Ñ#Ô#ˆàBÐB¨3¬9ÐBÑBÔBˆØBÐB¨3¬9ÐBÑBÔBˆØ@Ð@¨"¬(Ð@Ñ@Ô@ˆà˜8Ò#ÐRÐRÐRÕRÔRÐRÐRÐRÐRˆx˜8ÐRÑRÔRÐRÕRÔRÑRÔRÐRÐRÕRÔRˆxÑRÔRÐRÕRÔRˆxÑRÔRÐRÐRÐRÕRÔRÑRÔRÐRÐRÕRÔR˜8ÑRÔRÐRÕRÔR˜8Ñ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ÔRÑRÔRÐRÐRÐRØ˜7Ò"ÐTÐTÐTÕTÔTÐTÐTÐTÐTˆx˜7ÐTÑTÔTÐTÕTÔTÑTÔTÐTÐTÕTÔTˆxÑTÔTÐTÕTÔTˆxÑTÔTÐTÐTÐTÕTÔTÑTÔTÐTÐTÕTÔT˜7ÑTÔTÐTÕTÔT˜7ÑTÔTÐTÐTÐTÐTÑTÐTÕTÔTÐ$TÑTÔTÐTÑTÐTÐTÐTÑTÐTÕTÕTÔTÐTÑTÔTÑTÔTÐTÐTÐTÐTÐTr'   c                óÞ  — t          dd¦  «        D �]Z}t          |¦  «        }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}}t          d	d
|j        ¬¦  «                             |¬¦  «        }|j        \  }}	d}
t          t          dt          |	dz
  ¦  «        ¦  «        t!          |j        dz
  t          |	dz   ¦  «        ¦  «        ¦  «        D �]}t          t          dt          |dz
  ¦  «        ¦  «        t!          |j        dz
  t          |dz   ¦  «        ¦  «        ¦  «        D �]¿}||z
  dz  ||	z
  dz  z   |
k    �r¦|j        |         |         }|j        }|s—t          j        d|› d|› d|› d�¦  «        dz   dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        dœz  }t          t          j	        |¦  «        ¦  «        ‚d }|j        }t.          j        t.          j        f}||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  }t          j        d|› d|› d�¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}�ŒÁ�Œ�Œ\d S )Nr   é   rŽ   r³   rŸ   r´   rµ   r‘   r6   r7   r8   r<   g      P@é   é	   r/   zCell (ú,z) in biome z spawn radius must be walkablez.
>assert %(py2)s
{%(py2)s = %(py0)s.walkable
}ÚcellrÆ   ©Úin)z1%(py2)s
{%(py2)s = %(py0)s.tile_type
} in %(py5)sr�   z) must be FLOOR/PATHú
>assert %(py7)srE   )Úranger   r[   r\   r]   r^   r_   r`   rc   rd   r   r˜   rZ   r™   Úmaxr•   Úminr:   r9   rÉ   Úwalkabler–   r»   r   ÚFLOORÚPATH)rg   ÚcoderŸ   rœ   rk   rÊ   r«   ÚmÚsxÚsyÚr_sqÚyÚxrÕ   rÎ   r�   rl   rs   s                     r%   Ú,test_spawn_clearing_invariance_all_30_biomeszMTestProceduralGeneration30Biomes.test_spawn_clearing_invariance_all_30_biomes\   s¾  € Ý˜!˜R‘L”Lð 	wñ 	wˆDÝ% dÑ+Ô+ˆEØ $Ð$�5 Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�5 Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�5Ñ$Ô$Ð$Õ$Ô$�5Ñ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ý&¨R¸ÀUÄ^ÐTÑTÔT×]Ò]ÐcgÐ]ÑhÔhˆAØ”]‰FˆB�ØˆDå�3˜q¥# b¨1¡f¡+¤+Ñ.Ô.µ°A´H¸q±LÅ#ÀbÈ1ÁfÁ+Ä+Ñ0NÔ0NÑOÔOð wñ w�Ý�s 1¥c¨"¨q©&¡k¤kÑ2Ô2µC¸¼À!¹ÅSÈÈaÉÁ[Ä[Ñ4QÔ4QÑRÔRð wñ w�AØ˜B™ 1‘}¨¨B©°1¡}Ñ4¸Ò<Ñ<Ø œw qœz¨!œ}˜Ø#œ}Ðm˜}ÐmÕmÔmÐ.m°qÐ.mÐ.m¸1Ð.mÐ.mÈÐ.mÐ.mÐ.mÑmÔmÐmÑmÐmÕmÔmÑmÔmÐmÐmÕmÔm˜tÑmÔmÐmÕmÔm˜tÑmÔmÐmÐmÕmÔm˜}ÑmÔmÐmÐmÑmÐmÕmÕmÔmÐmÑmÔmÑmÔmÐmÐmÐmØ#œ~Ðvµ(´.Å(Ä-Ð1PÐv˜~Ð1PÐPÐvÐvÐvÕvÔvÐvÐvÐvÐv˜~Ð1PÐvÑvÔvÐvÕvÔvÑvÔvÐvÐvÕvÔv˜tÑvÔvÐvÕvÔv˜tÑvÔvÐvÐvÕvÔv˜~ÑvÔvÕvÔvÐ1PÑvÔvÐvÐvÑvÐvÕvÔvÐRvÐ[\ÐRvÐRvÐ_`ÐRvÐRvÐRvÑ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ð 	wr'   N©r   r*   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r{   r±   rÏ   ræ   r¹   r'   r%   r)   r)   )   sx   € € € € € ØRÐRð2ð 2ð 2ð 2ð Vð Vð Vð Vð Uð Uð Uð Uð wð wð wð wð wð wr'   r)   c                  ó2   — e Zd ZdZd	d„Zd	d„Zd	d„Zd	d„ZdS )
ÚTestBinarySerialization30BiomeszEVerifies binary serializer matches byte offset 3 to biome_code 1..30.r   r*   c                ó8  — g d¢}|D �]\  }}t          dd|¬¦  «                             |¬¦  «        }t          |¦  «        }|dd…         }d}||k    }|slt          j        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}x}}|d         }d}||k    }|slt          j        d	|fd
||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }	dd|	iz  }
t          t          j        |
¦  «        ¦  «        ‚dx}x}}|d         }||k    }|s¸t          j        d	|fd||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddœz  }t          j        d|› d|d         › �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚dx}}�ŒdS )zTBaseline verification that legacy biomes (1-5) serialize with correct byte offset 3.r,   r6   r7   r8   r<   Nr/   ó   FEr>   ©z%(py1)s == %(py4)s©r€   rD   rS   rT   r   r1   ©z%(py1)s == %(py3)sri   ©r€   r�   zExpected offset 3 to be ú, got ú
>assert %(py5)sr‘   )r   rZ   r   r[   r\   r`   rc   rd   r]   r^   r_   r–   )rg   rh   rQ   ri   rA   Úpayloadro   rl   rœ   ry   rz   rÊ   r«   s                r%   Ú)test_binary_header_legacy_biomes_baselinezITestBinarySerialization30Biomes.test_binary_header_legacy_biomes_baselineo   s¨  € ð
ð 
ð 
ˆð ,ð 	_ñ 	_‰NˆF�FÝ)°¸2ÈÐOÑOÔO×XÒXÐ^dÐXÑeÔeˆDÝ(¨Ñ.Ô.ˆGØ˜2˜A˜2”;Ð' %Ð'�; %Ò'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'�; %Ð'Ñ'Ô'Õ'Ô'�;Ñ'Ô'Õ'Ô' %Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø˜1”:Ð" Ð"�: ’?Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"�: Ð"Ñ"Ô"Õ"Ô"�:Ñ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø˜1”:Ð^�: Ò'Ð^Ð^Ð^Õ^Ô^Ð^Ð^Ð^Ð^�: Ð^Ñ^Ô^Õ^Ô^�:Ñ^Ô^Ð^Õ^Ô^Ñ^Ô^Ð^Ð^Õ^Ô^ Ñ^Ô^Ð^Õ^Ô^ Ñ^Ô^Ð^Ð^Ð^Ð^Ñ^Ð^Õ^Ô^Ð)^ÀFÐ)^Ð)^ÐRYÐZ[ÔR\Ð)^Ð)^Ñ^Ô^Ð^Ñ^Ð^Ð^Ð^Ñ^Ð^Õ^Õ^Ô^Ð^Ñ^Ô^Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ñ^ð	_ð 	_r'   c                ó  — t          dd¦  «        D �]õ}t          |¦  «        }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}}t          d	d
|j        ¬¦  «                             |¬¦  «        }t          |¦  «        }|d d…         }	d}
|	|
k    }|s„t          j        d|fd|	|
f¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}	x}}
|d         }	d}
|	|
k    }|s„t          j        d|fd|	|
f¦  «        t          j        |	¦  «        t          j        |
¦  «        dœz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}	x}}
|d         }	|	|k    }|s¸t          j        d|fd|	|f¦  «        t          j        |	¦  «        dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        nddœz  }t          j        d|› d|d         › �¦  «        dz   d|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}	}�Œ÷d S )Nr   rÑ   rŽ   r³   rŸ   r´   rµ   r‘   r6   r7   r8   r<   r/   rï   r>   rð   rñ   z%Header magic must be b'FE' for biome ú
>assert %(py6)srT   z#Header version must be 1 for biome r1   rò   rß   ró   z&Header offset 3 must match biome_code rô   rõ   )rÙ   r   r[   r\   r]   r^   r_   r`   rc   rd   r   r˜   rZ   r   r–   )rg   rß   rŸ   rœ   rk   rÊ   r«   rA   rö   ro   rl   ry   rz   s                r%   Ú3test_binary_header_byte3_matches_all_30_biome_codeszSTestBinarySerialization30Biomes.test_binary_header_byte3_matches_all_30_biome_codes   s   € Ý˜!˜R‘L”Lð 	iñ 	iˆDÝ% dÑ+Ô+ˆEØ $Ð$�5 Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�5 Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�5Ñ$Ô$Ð$Õ$Ô$�5Ñ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ý)°¸2ÈÌÐWÑWÔW×`Ò`ÐfjÐ`ÑkÔkˆDÝ(¨Ñ.Ô.ˆGà˜2˜A˜2”;ÐW %ÐW�; %Ò'ÐWÐWÐWÕWÔWÐWÐWÐWÐW�; %ÐWÑWÔWÕ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ÐWÐWØ˜1”:ÐP ÐP�: ’?ÐPÐPÐPÕPÔPÐPÐPÐPÐP�: ÐPÑPÔPÕPÔP�:ÑPÔPÕPÔP ÑPÔPÐPÐPÑPÐPÕPÔPÐ$PÈ$Ð$PÐ$PÑPÔPÐPÑPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPØ˜1”:Ðh�: Ò%ÐhÐhÐhÕhÔhÐhÐhÐhÐh�: ÐhÑhÔhÕhÔh�:ÑhÔhÐhÕhÔhÑhÔhÐhÐhÕhÔh ÑhÔhÐhÕhÔh ÑhÔhÐhÐhÐhÐhÑhÐhÕhÔhÐ'hÐPTÐ'hÐ'hÐ\cÐdeÔ\fÐ'hÐ'hÑhÔhÐhÑhÐhÐhÐhÑhÐhÕhÕhÔhÐhÑhÔhÑhÔhÐhÐhÐhÐhÐhÑhð	ið 	ir'   c                ó  — dD �]‚}t          |¦  «        }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}}t          dd	|j
        ¬
¦  «                             |¬¦  «        }t          |¦  «        }dt          |j        ¦  «        dz  z   t          |j        ¦  «        dz  z   |j        |j        z  z   }	t          |¦  «        }||	k    }
|
�s5t          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        |¦  «        dt          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        nddœz  }t          j        d|› �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}
�Œ„d S )N)r   r5   é
   é   r}   rŽ   r³   rŸ   r´   rµ   r‘   r6   r7   r8   r<   é   r1   r5   r>   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr~   rö   Úexpected_len)rR   r€   r�   r‘   z"Payload length mismatch for biome rØ   rE   )r   r[   r\   r]   r^   r_   r`   rc   rd   r   r˜   rZ   r   r~   Ú
poi_pointsr›   r9   r:   r–   )rg   rß   rŸ   rœ   rk   rÊ   r«   rA   rö   rÿ   r�   rs   s               r%   Ú"test_binary_payload_length_formulazBTestBinarySerialization30Biomes.test_binary_payload_length_formulaŠ   s¾  € Ø&ð 	]ñ 	]ˆDÝ% dÑ+Ô+ˆEØ $Ð$�5 Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�5 Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�5Ñ$Ô$Ð$Õ$Ô$�5Ñ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ý)°¸2ÈÌÐWÑWÔW×`Ò`ÐfjÐ`ÑkÔkˆDÝ(¨Ñ.Ô.ˆGà¥ D¤OÑ 4Ô 4°qÑ 8Ñ8½3¸tÔ?SÑ;TÔ;TÐWXÑ;XÑXÐ[_Ô[eÐhlÔhsÑ[sÑsˆLÝ�w‘<”<Ð\�< <Ò/Ð\Ð\Ñ\Õ\Ô\Ð\Ð\Ð\Ð\�< <Ð\Ñ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\•3Ñ\Ô\Ð\Õ\Ô\•3Ñ\Ô\Ð\Ð\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\�wÑ\Ô\Ð\Õ\Ô\�wÑ\Ô\Ð\Ð\Õ\Ô\�<Ñ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\ <Ñ\Ô\Ð\Õ\Ô\ <Ñ\Ô\Ð\Ð\Ð\Ð\Ñ\Ð\Õ\Ô\Ð1\ÐVZÐ1\Ð1\Ñ\Ô\Ð\Ñ\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ñ\ð	]ð 	]r'   c           
     ó   — dD �]I}t          |¦  «        }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}}t          dd	|j
        ¬
¦  «                             |¬¦  «        }t          |¦  «        }t          |¦  «        }	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        }|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  }t          t          j        |¦  «        ¦  «        ‚d x}x}
}|	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  }t          t          j        |¦  «        ¦  «        ‚d x}x}
}t)          |j        ¦  «        D ]ñ}t)          |j        ¦  «        D ]Ú}|	j        |         |         }|j        }|j        |         |         }|j        }||k    }|s’t          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }d!d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}ŒÛŒò�ŒKd S )"N)r   é   é   é   é   rŽ   r³   rŸ   r´   rµ   r‘   r6   r7   r8   r<   r>   )zH%(py4)s
{%(py4)s = %(py2)s.width
} == %(py8)s
{%(py8)s = %(py6)s.width
}ÚdrA   )rC   rD   rT   r‚   z%(py10)sr†   )zP%(py14)s
{%(py14)s = %(py12)s.height
} == %(py18)s
{%(py18)s = %(py16)s.height
})r‡   Úpy14rL   rN   z%(py20)srŠ   r   zassert %(py23)sÚpy23)zT%(py2)s
{%(py2)s = %(py0)s.spawn_point
} == %(py6)s
{%(py6)s = %(py4)s.spawn_point
}©rR   rC   rD   rT   úassert %(py8)sr‚   )zP%(py2)s
{%(py2)s = %(py0)s.boss_gate
} == %(py6)s
{%(py6)s = %(py4)s.boss_gate
})zP%(py3)s
{%(py3)s = %(py1)s.tile_type
} == %(py8)s
{%(py8)s = %(py6)s.tile_type
})r€   r�   rT   r‚   r”   )r   r[   r\   r]   r^   r_   r`   rc   rd   r   r˜   rZ   r   r   r9   r:   ra   rb   r™   rš   rÙ   rÉ   r»   )rg   rß   rŸ   rœ   rk   rÊ   r«   rA   rö   r  rl   r¬   rn   ro   r¯   r¤   rq   rž   r¥   rv   r°   rx   Ú@py_format24rz   rä   rå   r�   s                              r%   Ú1test_roundtrip_deserialization_fidelity_30_biomeszQTestBinarySerialization30Biomes.test_roundtrip_deserialization_fidelity_30_biomes”   s1  € Ø&ð 	Qñ 	QˆDÝ% dÑ+Ô+ˆEØ $Ð$�5 Ð$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�5 Ð$Ñ$Ô$Ð$Õ$Ô$Ñ$Ô$Ð$Ð$Õ$Ô$�5Ñ$Ô$Ð$Õ$Ô$�5Ñ$Ô$Ð$Ð$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ý)°¸2ÈÌÐWÑWÔW×`Ò`ÐfjÐ`ÑkÔkˆDÝ(¨Ñ.Ô.ˆGÝ$ WÑ-Ô-ˆAàDÐD�1”7ÐD˜dœjÐD�7˜jÒ(ÐDÐDÐDÐDÐD¨Q¬XÐD¸¼ÐD¨X¸Ò-DÐDÐDÐDÐDÑDÕDÔDÐDÐDÐDÐD�7˜jÐDÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔD�1ÑDÔDÐDÕDÔD�1ÑDÔDÐDÐDÕDÔD�7ÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔD˜dÑDÔDÐDÕDÔD˜dÑDÔDÐDÐDÕDÔD˜jÑ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¨X¸ÐDÑDÔDÐDÕDÔDÑDÔDÐDÐDÕDÔD¨QÑDÔDÐDÕDÔD¨QÑDÔDÐDÐDÕDÔD¨XÑ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Ð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ÔDÐDÑDÔDÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDØ”=Ð4 DÔ$4Ð4�=Ð$4Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4�=Ð$4Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4�1Ñ4Ô4Ð4Õ4Ô4�1Ñ4Ô4Ð4Ð4Õ4Ô4�=Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4 DÑ4Ô4Ð4Õ4Ô4 DÑ4Ô4Ð4Ð4Õ4Ô4Ð$4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø”;Ð0 $¤.Ð0�; .Ò0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0�; .Ð0Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0�1Ñ0Ô0Ð0Õ0Ô0�1Ñ0Ô0Ð0Ð0Õ0Ô0�;Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0 $Ñ0Ô0Ð0Õ0Ô0 $Ñ0Ô0Ð0Ð0Õ0Ô0 .Ñ0Ô0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ý˜4œ;Ñ'Ô'ð Qð Q�Ý˜tœzÑ*Ô*ð Qð Q�AØœ7 1œ: aœ=ÐP˜=Ô2ÐP°d´jÀ´mÀAÔ6FÐPÐ6FÔ6PÐPÐ2Ð6PÒPÐPÐPÐPÕPÔPÐPÐPÐPÐPÐ2Ð6PÐPÑPÔPÕPÔP˜=ÑPÔPÕPÔPÐ2ÑPÔPÕPÔPÐ6FÑPÔPÕPÔPÐ6PÑPÔPÐPÐPÑPÐPÐPÐPÐPÐPÑPÐPÕPÕPÔPÐPÑPÔPÑPÔPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPÐPðQñQð	Qð 	Qr'   Nrç   )rè   ré   rê   rë   r÷   rú   r  r  r¹   r'   r%   rí   rí   l   s|   € € € € € ØOÐOð_ð _ð _ð _ð 	ið 	ið 	ið 	ið]ð ]ð ]ð ]ðQð Qð Qð Qð Qð Qr'   rí   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )Ú TestZoneCanonicalBiomeResolutionz7Verifies zone-to-biome mapping and parameter overrides.r   r*   c                ó–  — g d¢}|D �]À}t          j        |¦  «        }t          |         }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}}|                     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}}�ŒÂd S )N)Úzone_tang_kiem_nhaiÚzone_ancient_sword_barrowÚzone_boundless_sandstormÚzone_boundless_celestial_palacer   r   r>   r@   rj   rB   rF   rG   rH   rI   rM   rN   rO   rP   é*   r<   rA   )r   Úfor_zoner   r9   r:   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   rZ   )rg   Úcanonical_zonesÚzidrj   Úexpected_dimsrk   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   rA   s                       r%   Ú.test_canonical_zones_dimensions_and_resolutionzOTestZoneCanonicalBiomeResolution.test_canonical_zones_dimensions_and_resolution§   s´  € ð
ð 
ð 
ˆð #ð 	Vñ 	VˆCÝ(Ô1°#Ñ6Ô6ˆCÝ.¨sÔ3ˆMØSÐS�3”9ÐS ¨aÔ 0ÐS�9Ð 0Ò0ÐSÐSÐSÐSÐS°S´ZÐSÀ=ÐQRÔCSÐS°ZÐCSÒ5SÐSÐSÐSÐSÑSÕSÔSÐSÐSÐSÐS�9Ð 0ÐSÑSÔSÐSÕSÔSÑSÔSÐSÐSÕSÔS�3ÑSÔSÐSÕSÔS�3ÑSÔSÐSÐSÕSÔS�9ÑSÔSÕSÔSÐ 0ÑSÔSÐSÐSÑSÐSÐSÐSÐSÐSÑSÐSÐS×SÒSÐSÑSÔSÐSÐSÐSÕSÔSÐSÐSÐSÐS°ZÐCSÐSÑSÔSÐSÕSÔSÑSÔSÐSÐSÕSÔS°SÑSÔSÐSÕSÔS°SÑSÔSÐSÐSÕSÔS°ZÑSÔSÕSÔSÐCSÑSÔSÐSÐSÑSÐSÐSÐSÐSÐSÑSÐSÐS×SÒSÐSÑSÔSÐSÕSÔSÐSÐSÑSÔSÐSÑSÐSÐSÐSÐSÐSÑSÐSÕSÕSÔSÐSÑSÔSÑSÔSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSÐSØ—<’< R�<Ñ(Ô(ˆDØUÐU�4”:ÐU ¨qÔ!1ÐU�:Ð!1Ò1ÐUÐUÐUÐUÐU°d´kÐUÀ]ÐSTÔEUÐU°kÐEUÒ6UÐUÐUÐUÐUÑUÕUÔUÐUÐUÐUÐU�:Ð!1ÐUÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔU�4ÑUÔUÐUÕUÔU�4ÑUÔUÐUÐUÕUÔU�:ÑUÔUÕUÔUÐ!1ÑUÔUÐUÐUÑUÐUÐUÐUÐUÐUÑUÐUÐU×UÒUÐUÑUÔUÐUÐUÐUÕUÔUÐUÐUÐUÐU°kÐEUÐUÑUÔUÐUÕUÔUÑUÔUÐUÐUÕUÔU°dÑUÔUÐUÕUÔU°dÑUÔUÐUÐUÕUÔU°kÑUÔUÕUÔUÐEUÑUÔUÐUÐUÑUÐUÐUÐUÐUÐUÑUÐUÐU×UÒUÐUÑUÔUÐUÕUÔUÐUÐUÑUÔUÐUÑUÐUÐUÐUÐUÐUÑUÐUÕUÕUÔUÐUÑUÔUÑUÔUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÐUÑUð	Vð 	Vr'   c                ó>  — t          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  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}t          j
        d|j        ¬	¦  «        }|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  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}}|                     d¬¦  «        }|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  }
t          t          j        |
¦  «        ¦  «        ‚d x}x}}t          |¦  «        }|d         }d}||k    }|sŠt          j        d
|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          j        d|d         › �¦  «        dz   d|iz  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}}d S )Nr1   rŽ   r³   Útarget_styler´   rµ   r‘   r  )r;   r>   )zN%(py2)s
{%(py2)s = %(py0)s.biome_id
} == %(py6)s
{%(py6)s = %(py4)s.style_id
}rj   r
  r  r‚   é   r<   )zK%(py2)s
{%(py2)s = %(py0)s.biome
} == %(py6)s
{%(py6)s = %(py4)s.style_id
}rA   rð   rñ   z.Overridden biome header byte 3 must be 3, got rù   rT   )r   r[   r\   r]   r^   r_   r`   rc   rd   r   r  r˜   r;   rZ   re   r   r–   )rg   r  rœ   rk   rÊ   r«   rj   rn   rl   rz   rž   rA   rö   ro   ry   s                  r%   Ú$test_explicit_biome_override_on_zonezETestZoneCanonicalBiomeResolution.test_explicit_biome_override_on_zoneµ   s  € Ý(¨Ñ+Ô+ˆØ#'Ð'ˆ| 4Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ| 4Ð'Ñ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô'ˆ|Ñ'Ô'Ð'Õ'Ô'ˆ|Ñ'Ô'Ð'Ð'Õ'Ô' 4Ñ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ý$Ô-Ð.CÈlÔNcÐdÑdÔdˆØŒ|Ð4˜|Ô4Ð4ˆ|Ð4Ò4Ð4Ð4Ð4Õ4Ô4Ð4Ð4Ð4Ð4ˆ|Ð4Ð4Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4ˆsÑ4Ô4Ð4Õ4Ô4ˆsÑ4Ô4Ð4Ð4Õ4Ô4ˆ|Ñ4Ô4Ð4Õ4Ô4Ñ4Ô4Ð4Ð4Õ4Ô4˜|Ñ4Ô4Ð4Õ4Ô4˜|Ñ4Ô4Ð4Ð4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Ð4Ð4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ø�|Š| ˆ|Ñ$Ô$ˆØŒzÐ2˜\Ô2Ð2ˆzÐ2Ò2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2ˆzÐ2Ð2Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2ˆtÑ2Ô2Ð2Õ2Ô2ˆtÑ2Ô2Ð2Ð2Õ2Ô2ˆzÑ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2˜\Ñ2Ô2Ð2Õ2Ô2˜\Ñ2Ô2Ð2Ð2Õ2Ô2Ð2Ñ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ý$ TÑ*Ô*ˆØ�qŒzÐ]˜QÐ]ˆz˜QŠÐ]Ð]Ð]Õ]Ô]Ð]Ð]Ð]Ð]ˆz˜QÐ]Ñ]Ô]Õ]Ô]ˆzÑ]Ô]Õ]Ô]˜QÑ]Ô]Ð]Ð]Ñ]Ð]Õ]Ô]Ð ]ÐQXÐYZÔQ[Ð ]Ð ]Ñ]Ô]Ð]Ñ]Ð]Ð]Ð]Ñ]Ð]Õ]Õ]Ô]Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]Ð]r'   Nrç   )rè   ré   rê   rë   r  r  r¹   r'   r%   r  r  ¤   sL   € € € € € ØAÐAðVð Vð Vð Vð^ð ^ð ^ð ^ð ^ð ^r'   r  c                  ó*   — e Zd ZdZd
d„Zd
d„Zd
d„Zd	S )Ú TestWebAppApiMapQueryIntegrationzCVerifies /api/map query parameter integration with serve_webapp.py.r&   Ústrr   r*   c           
     óä  — |› d�}t           j                             |¦  «        }t           j                             |d¬¦  «        5 }|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  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}}|j        }|j        }d}
 ||
¦  «        }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
        |¦  «        t          j
        |
¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}
x}x}}|                     ¦   «         }|d d…         }d}||k    }|slt          j        d|fd||f¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|sŠt          j        d|fd||f¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }t          j        d|d         › �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d d d ¦  «         d S # 1 swxY w Y   d S )NzM/api/map?zone_id=zone_tang_kiem_nhai&seed=77&biome=STY_06_BAI_THA_MA_NGAP_MANr5   ©ÚtimeoutéÈ   r>   ©z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)sÚrespr�   r’   rE   zContent-Typezapplication/octet-stream)zg%(py8)s
{%(py8)s = %(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.headers
}.get
}(%(py6)s)
} == %(py11)s)rR   rC   rD   rT   r‚   rJ   zassert %(py13)srK   r/   rï   rð   rñ   rS   rT   r1   z(Expected byte 3 to be 2 for STY_06, got rù   )ÚurllibÚrequestÚRequestÚurlopenÚstatusr[   r\   r]   r^   r_   r`   rc   rd   ÚheadersÚgetÚreadr–   )rg   r&   ÚurlÚreqr'  rk   r�   rl   r«   rs   rn   r¬   Ú@py_assert10r    Ú@py_format12Ú@py_format14Úbodyro   rœ   ry   rz   s                        r%   Ú,test_api_map_with_zone_and_biome_query_paramzMTestWebAppApiMapQueryIntegration.test_api_map_with_zone_and_biome_query_paramÃ   sI  € ØÐmÐmÐmˆÝŒn×$Ò$ SÑ)Ô)ˆÝŒ^×#Ò# C°Ð#Ñ3Ô3ð 	V°tØ”;Ð% #Ð%�; #Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%�; #Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�4Ñ%Ô%Ð%Õ%Ô%�4Ñ%Ô%Ð%Ð%Õ%Ô%�;Ñ%Ô%Õ%Ô% #Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø”<ÐQ�<Ô#ÐQ NÐQÐ#Ð# NÑ3Ô3ÐQÐ7QÐQÐ3Ð7QÒQÐQÐQÐQÕQÔQÐQÐQÐQÐQÐ3Ð7QÐQÑQÔQÐQÕQÔQÑQÔQÐQÐQÕQÔQ�4ÑQÔQÐQÕQÔQ�4ÑQÔQÐQÐQÕQÔQ�<ÑQÔQÕQÔQÐ#ÑQÔQÕQÔQ NÑQÔQÕQÔQÐ3ÑQÔQÕQÔQÐ7QÑ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Ø—9’9‘;”;ˆDØ˜˜˜”8Ð$˜uÐ$�8˜uÒ$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�8˜uÐ$Ñ$Ô$Õ$Ô$�8Ñ$Ô$Õ$Ô$˜uÑ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$à˜”7ÐU˜aÐU�7˜a’<ÐUÐUÐUÕUÔUÐUÐUÐUÐU�7˜aÐUÑUÔUÕUÔU�7ÑUÔUÕUÔU˜aÑUÔUÐUÐUÑUÐUÕUÔUÐ!UÈDÐQRÌGÐ!UÐ!UÑUÔUÐUÑUÐUÐUÐUÑUÐUÕUÕUÔUÐUÑUÔUÑUÔUÐUÐUÐUÐUÐUÐUÐUð	Vð 	Vð 	Vñ 	Vô 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vøøøð 	Vð 	Vð 	Vð 	Vð 	Vð 	Vs   ÁLM%Í%M)Í,M)c                ó¼  — |› d�}t           j                             |¦  «        }t           j                             |d¬¦  «        5 }|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  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}}|                     ¦   «         }
|
d d…         }d}||k    }|slt          j        d|fd||f¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|
d         }d}||k    }|sŠt          j        d|fd||f¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }t          j        d|
d         › �¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d d d ¦  «         d S # 1 swxY w Y   d S )Nz5/api/map?zone_id=zone_tang_kiem_nhai&seed=88&biome=18r5   r#  r%  r>   r&  r'  r�   r’   rE   r/   rï   rð   rñ   rS   rT   r1   é   z+Expected byte 3 to be 18 for biome=18, got rù   )r(  r)  r*  r+  r,  r[   r\   r]   r^   r_   r`   rc   rd   r/  r–   )rg   r&   r0  r1  r'  rk   r�   rl   r«   rs   r5  ro   rœ   ry   rz   s                  r%   Ú+test_api_map_with_integer_biome_query_paramzLTestWebAppApiMapQueryIntegration.test_api_map_with_integer_biome_query_paramÎ   s  € ØÐUÐUÐUˆÝŒn×$Ò$ SÑ)Ô)ˆÝŒ^×#Ò# C°Ð#Ñ3Ô3ð 	Z°tØ”;Ð% #Ð%�; #Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%�; #Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�4Ñ%Ô%Ð%Õ%Ô%�4Ñ%Ô%Ð%Ð%Õ%Ô%�;Ñ%Ô%Õ%Ô% #Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø—9’9‘;”;ˆDØ˜˜˜”8Ð$˜uÐ$�8˜uÒ$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�8˜uÐ$Ñ$Ô$Õ$Ô$�8Ñ$Ô$Õ$Ô$˜uÑ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ø˜”7ÐY˜bÐY�7˜b’=ÐYÐYÐYÕYÔYÐYÐYÐYÐY�7˜bÐYÑYÔYÕYÔY�7ÑYÔYÕYÔY˜bÑYÔYÐYÐYÑYÐYÕYÔYÐ"YÐPTÐUVÔPWÐ"YÐ"YÑYÔYÐYÑYÐYÐYÐYÑYÐYÕYÕYÔYÐYÑYÔYÑYÔYÐYÐYÐYÐYÐYÐYÐYð		Zð 	Zð 	Zñ 	Zô 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zøøøð 	Zð 	Zð 	Zð 	Zð 	Zð 	Zs   ÁG>IÉIÉIc           	     óÂ  — |› d�}t           j                             |¦  «        }t           j                             |d¬¦  «        5 }|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  }	t          t          j        |	¦  «        ¦  «        ‚d x}x}}|                     ¦   «         }
|
d d…         }d}||k    }|slt          j        d|fd||f¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|
d         }d}d}t          ||¦  «        }||v }|sùt          j        d|fd||f¦  «        t          j
        |¦  «        dt          j        ¦   «         v st          j	        t          ¦  «        rt          j
        t          ¦  «        ndt          j
        |¦  «        t          j
        |¦  «        t          j
        |¦  «        dœz  }t          j        d|
d         › d�¦  «        dz   d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}x}}d d d ¦  «         d S # 1 swxY w Y   d S )Nz,/api/map?zone_id=zone_tang_kiem_nhai&seed=99r5   r#  r%  r>   r&  r'  r�   r’   rE   r/   rï   rð   rñ   rS   rT   r1   r   rÑ   rÖ   )z9%(py1)s in %(py9)s
{%(py9)s = %(py3)s(%(py5)s, %(py7)s)
}rÙ   )r€   r�   r‘   rE   rG   zDefault biome code z must be in 1..30z
>assert %(py11)srJ   )r(  r)  r*  r+  r,  r[   r\   r]   r^   r_   r`   rc   rd   r/  rÙ   r–   )rg   r&   r0  r1  r'  rk   r�   rl   r«   rs   r5  ro   rœ   ry   rz   rm   r­   rt   r3  s                      r%   Ú'test_api_map_default_when_biome_omittedzHTestWebAppApiMapQueryIntegration.test_api_map_default_when_biome_omitted×   s�  € ØÐLÐLÐLˆÝŒn×$Ò$ SÑ)Ô)ˆÝŒ^×#Ò# C°Ð#Ñ3Ô3ð 	]°tØ”;Ð% #Ð%�; #Ò%Ð%Ð%Ð%Õ%Ô%Ð%Ð%Ð%Ð%�; #Ð%Ñ%Ô%Ð%Õ%Ô%Ñ%Ô%Ð%Ð%Õ%Ô%�4Ñ%Ô%Ð%Õ%Ô%�4Ñ%Ô%Ð%Ð%Õ%Ô%�;Ñ%Ô%Õ%Ô% #Ñ%Ô%Ð%Ð%Ñ%Ð%Ð%Ð%Ð%Ð%Ñ%Ð%Õ%Õ%Ô%Ð%Ñ%Ô%Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø—9’9‘;”;ˆDØ˜˜˜”8Ð$˜uÐ$�8˜uÒ$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$�8˜uÐ$Ñ$Ô$Õ$Ô$�8Ñ$Ô$Õ$Ô$˜uÑ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ø˜”7Ð\ AÐ\ rÐ\�e A r™lœlÐ\�7˜lÐ*Ð\Ð\Ð\Õ\Ô\Ð\Ð\Ð\Ð\�7˜lÐ\Ñ\Ô\Õ\Ô\�7Ñ\Ô\Ð\Õ\Ô\Ñ\Ô\Ð\Ð\Õ\Ô\�eÑ\Ô\Ð\Õ\Ô\�eÑ\Ô\Ð\Ð\Õ\Ô\ AÑ\Ô\Õ\Ô\ rÑ\Ô\Õ\Ô\˜lÑ\Ô\Ð\Ð\Ñ\Ð\Õ\Ô\Ð,\À$ÀqÄ'Ð,\Ð,\Ð,\Ñ\Ô\Ð\Ñ\Ð\Ð\Ð\Ñ\Ð\Õ\Õ\Ô\Ð\Ñ\Ô\Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\Ð\ð		]ð 	]ð 	]ñ 	]ô 	]ð 	]ð 	]ð 	]ð 	]ð 	]ð 	]ð 	]øøøð 	]ð 	]ð 	]ð 	]ð 	]ð 	]s   ÁJKËKËKN)r&   r!  r   r*   )rè   ré   rê   rë   r6  r9  r;  r¹   r'   r%   r   r   À   sd   € € € € € ØMÐMð	Vð 	Vð 	Vð 	VðZð Zð Zð Zð]ð ]ð ]ð ]ð ]ð ]r'   r   c                  ó*   — e Zd ZdZdd„Zdd„Zdd„ZdS )	ÚTestAdversarialAndEdgeCaseszIVerifies failure cascading, corrupted buffer handling, and extreme seeds.r   r*   c                óŒ   — t          j        t          d¬¦  «        5  t          d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )NzBuffer too short©Úmatchs   FE)ÚpytestÚraisesÚ
ValueErrorr   )rg   s    r%   Ú(test_adversarial_truncated_buffer_raiseszDTestAdversarialAndEdgeCases.test_adversarial_truncated_buffer_raisesä   sŠ   € ÝŒ]�:Ð-?Ð@Ñ@Ô@ð 	0ð 	0Ý  Ñ/Ô/Ð/ð	0ð 	0ð 	0ñ 	0ô 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0øøøð 	0ð 	0ð 	0ð 	0ð 	0ð 	0s   œ9¹=Á =c                óÌ   — t          j        ddddddddddddd¦  «        }t          j        t          d	¬
¦  «        5  t          |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nz<2sBBHHBBBBBBHs   XXr   r6   r7   rü   é2   r   zInvalid map magic headerr?  )ÚstructÚpackrA  rB  rC  r   )rg   Údummy_headers     r%   Ú.test_adversarial_corrupted_magic_header_raiseszJTestAdversarialAndEdgeCases.test_adversarial_corrupted_magic_header_raisesè   s·   € Ý”{Ð#3°U¸A¸qÀ"ÀbÈ"ÈbÐRTÐVXÐZ[Ð]^Ð`aÑbÔbˆÝŒ]�:Ð-GÐHÑHÔHð 	/ð 	/Ý  Ñ.Ô.Ð.ð	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 	/ð 	/s   ¼AÁAÁ Ac                ó   — t          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  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}t          dd	|j
        ¬
¦  «        }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        } |¦   «         }	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        |	¦  «        t          j        |
¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}	x}}
�Œ²d S )Nr   rŽ   r³   rŸ   r´   rµ   r‘   r6   r7   r8   )r   iñØÿÿiÿÿÿr<   r>   r@   rA   rB   rF   rG   rH   rI   rM   rN   r   rO   rP   rU   rW   rX   rY   )r   r[   r\   r]   r^   r_   r`   rc   rd   r   r˜   rZ   r9   r:   ra   rb   rf   )rg   rŸ   rœ   rk   rÊ   r«   rj   Úextreme_seedrA   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   s                         r%   Útest_extreme_seeds_generationz9TestAdversarialAndEdgeCases.test_extreme_seeds_generationí   s3  € Ý! !Ñ$Ô$ˆØ Ð ˆu˜DÐ Ð Ð Ð Õ Ô Ð Ð Ð Ð ˆu˜DÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆuÑ Ô Ð Õ Ô ˆuÑ Ô Ð Ð Õ Ô ˜DÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ý$¨2°bÀ5Ä>ÐRÑRÔRˆØ2ð 	2ñ 	2ˆLØ—<’< \�<Ñ2Ô2ˆDØ9Ð9�4”:Ð9 Ð9�: Ò#Ð9Ð9Ð9Ð9Ð9¨¬Ð9°rÐ9¨°rÒ(9Ð9Ð9Ð9Ð9Ñ9Õ9Ô9Ð9Ð9Ð9Ð9�: Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9�4Ñ9Ô9Ð9Õ9Ô9�4Ñ9Ô9Ð9Ð9Õ9Ô9�:Ñ9Ô9Õ9Ô9 Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9×9Ò9Ð9Ñ9Ô9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9¨°rÐ9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9¨Ñ9Ô9Ð9Õ9Ô9¨Ñ9Ô9Ð9Ð9Õ9Ô9¨Ñ9Ô9Õ9Ô9°rÑ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Ð9×9Ò9Ð9Ñ9Ô9Ð9Õ9Ô9Ð9Ð9Ñ9Ô9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØÔ+Ð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�4Ñ1Ô1Ð1Õ1Ô1�4Ñ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Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ñ1ð	2ð 	2r'   Nrç   )rè   ré   rê   rë   rD  rJ  rM  r¹   r'   r%   r=  r=  á   sV   € € € € € ØSÐSð0ð 0ð 0ð 0ð/ð /ð /ð /ð
2ð 2ð 2ð 2ð 2ð 2r'   r=  )r   r   )*rë   Ú
__future__r   Úbuiltinsr]   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter[   r   rG  r   Úurllib.parser(  Úurllib.requestÚtypingr   r   r   rA  Úserver.world.map_data_typesr   r   Úserver.world.map_style_catalogr	   r
   r   Ú%server.world.wilderness_map_generatorr   r   Ú"server.world.map_binary_serializerr   r   Útools.serve_webappr   Úfixturer&   r)   rí   r  r   r=  r¹   r'   r%   ú<module>r\     sC  ðð
ð 
ð #Ð "Ð "Ð "Ð "Ð "Ø  € € € € € € € € € € € € Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ø €€€à =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ \Ð \Ð \Ð \Ð \Ð \Ð \Ð \Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ :Ð :Ð :Ð :Ð :Ð :ð €„�hÐÑÔðð ð ñ  Ôðð@wð @wð @wð @wð @wñ @wô @wð @wðF5Qð 5Qð 5Qð 5Qð 5Qñ 5Qô 5Qð 5Qðp^ð ^ð ^ð ^ð ^ñ ^ô ^ð ^ð8]ð ]ð ]ð ]ð ]ñ ]ô ]ð ]ðB2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2r'   