Ë
    8ûÝjZ9  ã                   óV  — d Z ddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZmZ dZdZ ej"                   e«       dk\  d«       G d	„ d
ej$                  «      «       Z ej"                   e«       dk\  d«       G d„ dej$                  «      «       Zedk(  r ej,                  «        yy)aE  B+-Gegenproben gegen das ECHTE /home/aria mit dem tools-Profil (Landlock, ohne systemd-Bus).
Laeuft nur mit python3 im Kaefig, nie codex. Belegt: Credentials/ssh/claude/codex gesperrt,
claude nicht ausfuehrbar, normale Tools laufen, Home lesbar aber (E44 Option 2) nur in Allowlist-
Ordnern schreibbar, kill/AF_UNIX gesperrt.é    N)Úprofiles)Ú
CAGE_PROBEÚPYTHONÚhome_probe_dirÚhome_project_probe_dirÚlandlock_abiÚrun_in_cagez
/home/ariaz�/home/aria/.local/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex-code-mode-hosté   zLandlock ABI < 4c                   ó<  — e Zd Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Z ej                  ej"                  j%                  e«      d«      d„ «       Z ej                  ej"                  j%                  e«      d«      d„ «       Zd„ Zd„ Zd„ Zd„ Zy)ÚToolsProfileRealHomec           	      ó  — t        j                  «       | _        t        j                  j                  | j                  j                  d«      }t        j                  ||dz   |dz   |dz   |dz   |dz   «      | _	        | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  fD ]  }t        j                  |d¬«       Œ t!        | j                  j"                  d	d
¬«      5 }|j%                  d«       d d d «       t'        «       | _        t        j*                  d| j(                  ¬«      \  }| _        t        j.                  |«       t        j0                  t2        | j                  j4                  g¬«      | _        t        j8                  | j                  t:        t2        ddddœ| j6                  ¬«      | _        y # 1 sw Y   ŒËxY w)NÚrunú/wsú/homeú/codex-homeú/authdirú/tmpT©Úexist_okÚwúutf-8©Úencodingú{"token":"x"}z.ariaprobe_w_)ÚprefixÚdir©Úextra_prune_pathsé,  é   @é   ©ÚCPUÚFSIZEÚNOFILE©Ú	codex_binÚ	home_rootÚrlimitsÚsecret_files)ÚtempfileÚTemporaryDirectoryÚ_tmpÚosÚpathÚjoinÚnameÚPÚRunDirsÚdirsÚ	workspaceÚhomeÚ
codex_homeÚauthdirÚtmpÚmakedirsÚopenÚ	auth_copyÚwriter   Ú	probe_dirÚmkstempÚhome_probe_fileÚcloseÚscan_secret_filesÚHOMEÚrootÚcfg_secret_filesÚtools_profiler   Úcfg)ÚclsrD   ÚdÚfhÚfds        ú;/home/aria/aria-v3-dev/python/tests/test_isolation_tools.pyÚ
setUpClasszToolsProfileRealHome.setUpClass   sx  € ä×.Ñ.Ó0ˆŒÜ�w‰w�|‰|˜CŸH™HŸM™M¨5Ó1ˆÜ—9‘9˜T 4¨%¡<°¸±ÀÈÑAUØ! JÑ.°°v±ó?ˆŒà—(‘(×$Ñ$ c§h¡h§m¡m°S·X±X×5HÑ5HÈ#Ï(É(×JZÑJZÐ\_×\dÑ\d×\hÑ\hÐiò 	*ˆAÜ�K‰K˜ DÖ)ð	*ä�#—(‘(×$Ñ$ c°GÔ<ð 	&ÀØ�H‰H�_Ô%÷	&ô 'Ó(ˆŒÜ"*×"2Ñ"2¸/ÈsÏ}É}Ô"]ÑˆˆCÔÜ
�‰�Œä ×2Ñ2´4ÈCÏHÉHÏMÉMÈ?Ô[ˆÔÜ—/‘/ #§(¡(´fÌØ25ÀÐSWÑ*XØ/2×/CÑ/CôEˆ�÷	&ð 	&ús   Ä%HÈH
c                 óz   — t        j                  | j                  d¬«       | j                  j	                  «        y ©NT)Úignore_errors)ÚshutilÚrmtreer>   r-   Úcleanup)rH   s    rL   ÚtearDownClassz"ToolsProfileRealHome.tearDownClass*   s$   € ä�‰�c—m‘m°4Õ8Ø�‰×ÑÕó    c                 óî   — t        | j                  t        dt        |g|¢d¬«      }| j	                  |j
                  d|› d|› d|j
                  › d|j                  j                  d¬	«      d d
 › �«       y )Nú-Ié   ©Útimeoutr   ú z: rc=ú err=Úreplace©ÚerrorséÈ   )r	   rG   r   r   ÚassertEqualÚ
returncodeÚstderrÚdecode)ÚselfÚcheckÚargsÚrs       rL   ÚprobezToolsProfileRealHome.probe/   sr   € Ü˜Ÿ™¤6¨4´¸UÐ"JÀTÐ"JÐTVÔWˆØ×Ñ˜Ÿ™ qØ!˜7 ! D 6¨¨q¯|©|¨n¸EÀ!Ç(Á(Ç/Á/ÐYbÀ/ÓBcÐdhÐehÐBiÐAjÐkõ	mrU   c                 ó°   — | j                  dd«       | j                  dd«       t        j                  j                  d«      r| j                  dd«       y y )Núread-deniedz/home/aria/.envz/home/aria/.codex/auth.jsonz /home/aria/.claude/settings.json)ri   r.   r/   Úexists©re   s    rL   Útest_credentials_blockedz-ToolsProfileRealHome.test_credentials_blocked4   sE   € Ø�
‰
�=Ð"3Ô4Ø�
‰
�=Ð"?Ô@Ü�7‰7�>‰>Ð<Ô=Ø�J‰J�}Ð&HÕIð >rU   c                 óŒ   — | j                  dd«       t        j                  j                  d«      r| j                  dd«       y y )Nzlist-deniedz/home/aria/.sshz/home/aria/.config/gh)ri   r.   r/   Úisdirrm   s    rL   Útest_ssh_and_gh_blockedz,ToolsProfileRealHome.test_ssh_and_gh_blocked:   s6   € Ø�
‰
�=Ð"3Ô4Ü�7‰7�=‰=Ð0Ô1Ø�J‰J�}Ð&=Õ>ð 2rU   c                 ó(   — | j                  dd«       y )Nzexec-deniedz/usr/bin/claude©ri   rm   s    rL   Útest_claude_not_executablez/ToolsProfileRealHome.test_claude_not_executable?   s   € Ø�
‰
�=Ð"3Õ4rU   c                 ó(   — | j                  dd«       y )Nzexec-okz/usr/bin/idrs   rm   s    rL   Útest_normal_tool_executablez0ToolsProfileRealHome.test_normal_tool_executableB   s   € Ø�
‰
�9˜mÕ,rU   c                 ó¢  — t         j                  j                  | j                  j                  d«      }| j                  ddd| j                  z   d| j                  z   dt         j                  j                  | j                  d«      z   d|z   «       | j                  t         j                  j                  |«      «       | j                  t         j                  j                  | j                  «      d	«       | j                  t         j                  j                  t         j                  j                  | j                  d«      «      «       y )
Nzhome-test-ok.txtúwrite-matrixúread-ok:/home/aria/CLAUDE.mdúread-ok:úappend-denied:úcreate-denied:úneu.txtú	write-ok:r   )r.   r/   r0   r4   r5   ri   r@   r>   Ú
assertTrueÚisfilera   ÚgetsizeÚassertFalseÚlexists)re   Úws_oks     rL   Ú#test_home_readable_but_not_writablez8ToolsProfileRealHome.test_home_readable_but_not_writableE   sß   € ô —‘—‘˜TŸY™Y×0Ñ0Ð2DÓEˆØ�
‰
�>Ð#AÀ:ÐPT×PdÑPdÑCdØ# d×&:Ñ&:Ñ:Ø#¤b§g¡g§l¡l°4·>±>À9Ó&MÑMØ Ñ&ô	(ð 	�‰œŸ™Ÿ™ uÓ-Ô.Ø×ÑœŸ™Ÿ™¨×)=Ñ)=Ó>ÀÔBØ×ÑœŸ™Ÿ™¬¯©¯©°d·n±nÀiÓ)PÓQÕRrU   c                 ó(   — | j                  dd«       y )Nzkill-deniedÚ1rs   rm   s    rL   Útest_kill_foreign_deniedz-ToolsProfileRealHome.test_kill_foreign_deniedQ   s   € Ø�
‰
�= #Õ&rU   c           
      ó*  ‡‡— dd l Šdd lŠddgg g dœdddddœd	œdd
ddddg dœdœd	œg}dj                  ˆfd„ˆfd„|D «       D «       «      }t        t        j
                  j                  | j                  j                  d«      d«      5 }|j                  |«       d d d «       t        j                  | j                  t        t        || j                  ¬«      }t        |ddd| j                  j                  ›dt        ›�gd¬«      S # 1 sw Y   ŒnxY w)Nr   zconnection/helloé   )ÚtypeÚsupportedVersionsÚrequiredCapabilitiesÚoptionalCapabilitieszoperation/requestzsession/openÚs1)ÚmethodÚ	sessionId)r‹   ÚidÚrequesté   zsession/executeÚt1z1+1)Útool_call_idÚsourceÚenabled_tools)r�   r‘   r“   rU   c              3   óZ   •K  — | ]"  }‰j                  d t        |«      «      |z   –— Œ$ y­w)z<IN)ÚpackÚlen)Ú.0ÚbÚstructs     €rL   ú	<genexpr>z0ToolsProfileRealHome._v8_host.<locals>.<genexpr>]   s%   øè ø€ Òi¸!˜Ÿ™ D¬#¨a«&Ó1°AÕ5Ñiùs   ƒ(+c              3   ó\   •K  — | ]#  }‰j                  |«      j                  «       –— Œ% y ­w)N)ÚdumpsÚencode)rœ   ÚfÚ_jsons     €rL   rŸ   z0ToolsProfileRealHome._v8_host.<locals>.<genexpr>]   s#   øè ø€ Ò?hÐ\]ÀÇÁÈAÃ×@UÑ@U×@WÑ?hùs   ƒ),z
frames.binÚwbr&   z/bin/shz-cz(cat z/frames.bin; sleep 3) | é<   rY   )Újsonrž   r0   r;   r.   r/   r4   r5   r=   r2   rF   ÚV8_HOSTrC   rE   r	   )re   r)   ÚframesÚblobrJ   rG   r¤   rž   s         @@rL   Ú_v8_hostzToolsProfileRealHome._v8_hostT   s  ù€ ÷ 	%Ø-ÀQÀCÐacØ+-ñ/à.°aÈ~ÐlpÑDqÑrØ.°aÐO`ÐosØ/3¸uÐWYÑZñE\ñ ]ð^ˆð
 �x‰xÓiÓ?hÐagÔ?hÔiÓiˆÜ”"—'‘'—,‘,˜tŸy™y×2Ñ2°LÓAÀ4ÓHð 	ÈBØ�H‰H�TŒN÷	ä�o‰o˜dŸi™i´7ÄdÐT[Ø+/×+@Ñ+@ôBˆä˜3 ©DØ$(§I¡I×$7Ó$7½ð3Bð !CØLNôPð 	P÷		ð 	ús   Â
D	Ä	Dz&codex-code-mode-host nicht installiertc                 óº   — | j                  ddddœ«      }| j                  |j                  d|j                  dd  «       | j	                  d|j
                  «       y )Nr   r    r!   r"   r   iÔþÿÿs    "type":"execute/initialResponse")r«   ra   rb   rc   ÚassertInÚstdout©re   rh   s     rL   Útest_v8_host_runs_in_tools_cagez4ToolsProfileRealHome.test_v8_host_runs_in_tools_cagee   sJ   € à�M‰M #°À4ÑHÓIˆØ×Ñ˜Ÿ™ q¨!¯(©(°4°5¨/Ô:Ø�‰Ð9¸1¿8¹8ÕDrU   c                 ó    — | j                  dddddœ«      }| j                  |j                  d«       | j                  d|j                  «       y )Nl        r   r    r!   )ÚASr#   r$   r%   r   s
   V8 sandbox)r«   ÚassertNotEqualrb   r­   rc   r¯   s     rL   Ú+test_v8_host_dies_under_address_space_limitz@ToolsProfileRealHome.test_v8_host_dies_under_address_space_limitk   s@   € à�M‰M °SÀ7ÐVZÑ[Ó\ˆØ×Ñ˜AŸL™L¨!Ô,Ø�‰�m Q§X¡XÕ.rU   c                 ó(   — | j                  dd«       y )Nzaf-unix-deniedz/run/user/1001/busrs   rm   s    rL   Útest_af_unix_deniedz(ToolsProfileRealHome.test_af_unix_deniedq   s   € Ø�
‰
Ð#Ð%9Õ:rU   c                 ó–  — d}d}t         j                  j                  |«      rt         j                  j                  |«      s| j                  d«       t         j                  j	                  | j
                  j                  d«      }| j                  d|||«       | j                  t         j                  j                  |«      «       y )Nz/home/aria/.cargo/envz#/home/aria/state/run-heartbeat.confzIVORAUSSETZUNG: .cargo/env und state/run-heartbeat.conf muessen existierenúok.txtzro-write-denied-rw-ok)	r.   r/   r€   ÚskipTestr0   r4   r5   ri   r   )re   Úro1Úro2Úrws       rL   Ú*test_deferred_exec_ro_targets_denied_rw_okz?ToolsProfileRealHome.test_deferred_exec_ro_targets_denied_rw_okt   s„   € ð
 &ˆØ3ˆÜ—‘—‘˜sÔ#¬¯©¯©°sÔ(;Ø�M‰MÐeÔfÜ�W‰W�\‰\˜$Ÿ)™)×-Ñ-¨xÓ8ˆØ�
‰
Ð*¨C°°bÔ9Ø�‰œŸ™Ÿ™ rÓ*Õ+rU   c                 óh   — t         j                  j                  d«      r| j                  dd«       y y )Nz/home/aria/.claude.jsonrk   )r.   r/   rl   ri   rm   s    rL   Útest_claude_json_read_deniedz1ToolsProfileRealHome.test_claude_json_read_denied�   s'   € ä�7‰7�>‰>Ð3Ô4Ø�J‰J�}Ð&?Õ@ð 5rU   c                 ó  — dt        j                  «       z  }| j                  t         j                  j	                  |«      «       | j                  d|«       | j                  t         j                  j	                  |«      d«       y )Nz /home/aria/.aria-latent-probe-%dzcreate-deniedz+latente Datei wurde im Home angelegt (LEAK))r.   Úgetpidr‚   r/   rƒ   ri   )re   Úlatents     rL   Ú)test_latent_top_level_dotfile_uncreatablez>ToolsProfileRealHome.test_latent_top_level_dotfile_uncreatable†   s[   € ð 4´b·i±i³kÑAˆØ×ÑœŸ™Ÿ™¨Ó0Ô1Ø�
‰
�? FÔ+Ø×ÑœŸ™Ÿ™¨Ó0Ð2_Õ`rU   N)Ú__name__Ú
__module__Ú__qualname__ÚclassmethodrM   rT   ri   rn   rq   rt   rv   r…   rˆ   r«   ÚunittestÚ
skipUnlessr.   r/   r€   r¨   r°   r´   r¶   r½   r¿   rÃ   © rU   rL   r   r      sÒ   „ àñEó ðEð( ñó ðòmò
Jò?ò
5ò-ò
Sò'òPð" €X×Ñ˜Ÿ™Ÿ™¨Ó0Ð2ZÓ[ñEó \ðEð
 €X×Ñ˜Ÿ™Ÿ™¨Ó0Ð2ZÓ[ñ/ó \ð/ò
;ò,òAó
arU   r   c                   óB   — e Zd ZdZed„ «       Zed„ «       Zd„ Zd„ Zd„ Z	y)ÚWriteAllowlistRealHomea"  E44 Option 2 gegen das ECHTE /home/aria (Landlock, python3 im Kaefig, nie codex).

    Zwei gleich aufgebaute Testprojekte nach dem kostenwache-Muster (melde.sh = Cron-Ziel, per
    cron_targets injiziert, die echte Crontab bleibt unberuehrt; kostenwache.py daneben): `allow` ist
    Allowlist-Ordner, `deny` nicht. Erwartung in EINEM Kaefig-Lauf: Workspace und `allow` schreibbar,
    `deny` und das uebrige Home nicht, Lesen im Home geht, Credentials bleiben unlesbar, im Allowlist-
    Ordner bleiben Cron-Ziel, Git-Hook und Secret geschuetzt.c           	      ó<  — t        j                  «       | _        t        j                  j                  | j                  j                  d«      }t        j                  ||dz   |dz   |dz   |dz   |dz   «      | _	        | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  fD ]  }t        j                  |d¬«       Œ t!        | j                  j"                  d	d
¬«      5 }|j%                  d«       d d d «       t'        «       | _        t'        «       | _        i | _        | j(                  | j*                  fD ]  }dD ]x  \  }}t!        t        j                  j                  ||«      d	d
¬«      5 }|j%                  |«       d d d «       || j,                  t        j                  j                  ||«      <   Œz Œ� t        j                  t        j                  j                  | j(                  dd«      «       t        j                  t        j                  j                  | j(                  d«      «       t!        t        j                  j                  | j(                  ddd«      d	d
¬«      5 }|j%                  d«       d d d «       t!        t        j                  j                  | j(                  d«      d	d
¬«      5 }|j%                  d«       d d d «       | j(                  | j*                  fD �cg c]  }d|z  ‘Œ	 c}| _        t        j0                  t2        | j                  j4                  g¬«      | _        ddddœ| _        t        j:                  | j                  t<        t2        | j8                  | j6                  | j.                  | j(                  g¬«      | _        y # 1 sw Y   �Œ±xY w# 1 sw Y   �Œ0xY w# 1 sw Y   �Œ?xY w# 1 sw Y   ŒûxY wc c}w )Nr   r   r   r   r   r   Tr   r   r   r   r   ))úmelde.shz!#!/bin/sh
python3 kostenwache.py
)úkostenwache.pyzprint('kosten')
ú.gitÚhooksÚsrcú
pre-commitz
#!/bin/sh
ú.envz	CANARY=1
z(*/10 * * * * %s/melde.sh >/dev/null 2>&1r   r   r    r!   r"   )r'   r(   r)   r*   Úcron_targetsÚwrite_allowlist) r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r   ÚallowÚdenyÚbodyÚcronrB   rC   rD   r*   r)   rF   r   rG   )rH   rD   rI   rJ   ÚrelrÙ   s         rL   rM   z!WriteAllowlistRealHome.setUpClass™   sú  € ä×.Ñ.Ó0ˆŒÜ�w‰w�|‰|˜CŸH™HŸM™M¨5Ó1ˆÜ—9‘9˜T 4¨%¡<°¸±ÀÈÑAUØ! JÑ.°°v±ó?ˆŒà—(‘(×$Ñ$ c§h¡h§m¡m°S·X±X×5HÑ5HÈ#Ï(É(×JZÑJZÐ\_×\dÑ\d×\hÑ\hÐiò 	*ˆAÜ�K‰K˜ DÖ)ð	*ä�#—(‘(×$Ñ$ c°GÔ<ð 	&ÀØ�H‰H�_Ô%÷	&ä*Ó,ˆŒ	Ü)Ó+ˆŒØˆŒØ—)‘)˜SŸX™XÐ&ò 	6ˆAðGò 6‘	��Täœ"Ÿ'™'Ÿ,™, q¨#Ó.°¸gÔFð #È"Ø—H‘H˜T”N÷#à15�—‘œŸ™Ÿ™ a¨Ó-Ò.ñ	6ð	6ô 	�‰”B—G‘G—L‘L §¡¨F°GÓ<Ô=Ü
�‰”B—G‘G—L‘L §¡¨EÓ2Ô3Ü”"—'‘'—,‘,˜sŸy™y¨&°'¸<ÓHÈ#ÐX_Ô`ð 	$ÐdfØ�H‰H�]Ô#÷	$ä”"—'‘'—,‘,˜sŸy™y¨&Ó1°3ÀÔIð 	#ÈRØ�H‰H�\Ô"÷	#àMPÏYÉYÐX[×X`ÑX`ÐLaÖbÀqÐ>ÀÓBÒbˆŒÜ×.Ñ.¬tÈÏÉÏÉÀÔWˆÔØ!¨G¸tÑDˆŒÜ—/‘/ #§(¡(´fÌÐVY×VaÑVaØ/2×/?Ñ/?ÈcÏhÉhØ36·9±9°+ô?ˆ�÷)	&ñ 	&ú÷#ñ #ú÷
	$ñ 	$ú÷	#ð 	#üâbs6   Ä%O&Æ3O3Ê1P ÌPÌ5PÏ&O0Ï3O=Ð P
ÐPc                 ó    — | j                   | j                  fD ]  }t        j                  |d¬«       Œ | j                  j                  «        y rO   )r×   rØ   rQ   rR   r-   rS   )rH   rI   s     rL   rT   z$WriteAllowlistRealHome.tearDownClass¹   s<   € à—)‘)˜SŸX™XÐ&ò 	1ˆAÜ�M‰M˜!¨4Ö0ð	1à�‰×ÑÕrU   c           
      óÐ   — t        |t        dt        dg|¢d¬«      }| j                  |j                  dd|j                  › d|j
                  j                  d¬	«      d d
 › �«       y )NrW   rx   rX   rY   r   zrc=r\   r]   r^   r   )r	   r   r   ra   rb   rc   rd   )re   rG   Útokensrh   s       rL   ri   zWriteAllowlistRealHome.probe¿   s`   € Ü˜œf d¬J¸ÐPÈÐPÐZ\Ô]ˆØ×Ñ˜Ÿ™ q¨C°·±¨~¸UÀ1Ç8Á8Ç?Á?ÐZcÀ?ÓCdÐeiÐfiÐCjÐBkÐ*lÕmrU   c                 óô  — t         j                  j                  | j                  j                  d«      }| j
                  | j                  }}dt        j                  «       z  }| j                  t         j                  j                  |«      «       | j                  | j                  d|z   dt         j                  j                  |dd«      z   dt         j                  j                  |d«      z   dt         j                  j                  |d«      z   d	t         j                  j                  |d«      z   d	t         j                  j                  |d
«      z   dt         j                  j                  |d«      z   d|z   d	t         j                  j                  |d
«      z   d	t         j                  j                  |ddd«      z   dt         j                  j                  |d«      z   dt         j                  j                  |d«      z   ddd«       | j                  t         j                  j                  |«      «       t        t         j                  j                  |dd«      d«      5 }| j                  |j!                  «       d«       d d d «       t        t         j                  j                  |d«      d«      5 }| j                  |j!                  «       d«       d d d «       | j                  t         j                  j                  t         j                  j                  |d«      «      «       t         j                  j                  |d«      t         j                  j                  |d
«      t         j                  j                  |d
«      fD ]F  }t        |d¬«      5 }| j                  |j!                  «       | j"                  |   |«       d d d «       ŒH | j                  t         j                  j                  t         j                  j                  |d«      «      «       | j                  t         j                  j                  |«      d«       y # 1 sw Y   �ŒÍxY w# 1 sw Y   �Œ‡xY w# 1 sw Y   ŒèxY w)Nr¸   z/home/aria/.aria-e44-latent-%dr~   rÒ   r}   rÏ   r|   zneu-oben.txtr{   rÎ   zneu.pyrÐ   rÑ   rÓ   zread-denied:rÔ   rz   ry   zread-denied:/home/aria/.envz'read-denied:/home/aria/.codex/auth.jsonÚrbó   xr   r   zDatei im Home angelegt (LEAK))r.   r/   r0   r4   r5   r×   rØ   rÁ   r‚   rƒ   ri   rG   r   r€   r;   ra   ÚreadrÙ   )re   r„   ÚarI   rÂ   rJ   Úps          rL   Ú*test_write_only_in_workspace_and_allowlistzAWriteAllowlistRealHome.test_write_only_in_workspace_and_allowlistÃ   s'  € Ü—‘—‘˜TŸY™Y×0Ñ0°(Ó;ˆØ�z‰z˜4Ÿ9™9ˆ1ˆØ1´B·I±I³KÑ?ˆØ×ÑœŸ™Ÿ™¨Ó0Ô1Ø�
‰
�4—8‘8Ø Ñ&Ø¤§¡§¡¨a°¸	Ó!BÑBØ¤§¡§¡¨aÐ1AÓ!BÑBð $¤b§g¡g§l¡l°1°nÓ&EÑEØ#¤b§g¡g§l¡l°1Ð6FÓ&GÑGØ#¤b§g¡g§l¡l°1°jÓ&AÑAØ#¤b§g¡g§l¡l°1°hÓ&?Ñ?Ø# fÑ,Ø#¤b§g¡g§l¡l°1°jÓ&AÑAØ#¤b§g¡g§l¡l°1°f¸gÀ|Ó&TÑTØ!¤B§G¡G§L¡L°°FÓ$;Ñ;Ø¤§¡§¡¨QÐ0@Ó AÑAØ1Ø0Ø<ô%	>ð( 	�‰œŸ™Ÿ™ uÓ-Ô.Ü”"—'‘'—,‘,˜q %¨Ó3°TÓ:ð 	.¸bØ×Ñ˜RŸW™W›Y¨Ô-÷	.ä”"—'‘'—,‘,˜qÐ"2Ó3°TÓ:ð 	.¸bØ×Ñ˜RŸW™W›Y¨Ô-÷	.à×ÑœŸ™Ÿ™¬¯©¯©°a¸Ó)HÓIÔJÜ—'‘'—,‘,˜qÐ"2Ó3´R·W±W·\±\À!ÀZÓ5PÔRT×RYÑRY×R^ÑR^Ð_`ÐblÓRmÐnò 	=ˆAÜ�a 'Ô*ð =¨bØ× Ñ  §¡£¨D¯I©I°a©L¸!Ô<÷=ð =ð	=ð 	×ÑœŸ™Ÿ™¬¯©¯©°a¸Ó)BÓCÔDØ×ÑœŸ™Ÿ™¨Ó0Ð2QÕR÷	.ñ 	.ú÷	.ñ 	.ú÷=ð =ús$   É(!QÊ;!Q!Î/Q.ÑQÑ!Q+Ñ.Q7	c                 óÜ  — t        j                  | j                  t        t        | j
                  | j                  | j                  ¬«      }| j                  |dt        j                  j                  | j                  j                  d«      z   dt        j                  j                  | j                  d«      z   dt        j                  j                  | j                  d«      z   dt        j                  j                  | j                  d«      z   «       | j                  t        j                  j                  t        j                  j                  | j                  d«      «      «       y )	N)r'   r(   r)   r*   rÕ   r~   zok0.txtr{   rÏ   r|   zneu0.txtrz   )r2   rF   r4   r   rC   r)   r*   rÚ   ri   r.   r/   r0   r5   r×   r‚   rƒ   )re   Úcfg0s     rL   Ú3test_without_allowlist_the_same_folder_is_read_onlyzJWriteAllowlistRealHome.test_without_allowlist_the_same_folder_is_read_onlyè   så   € ä�‰˜tŸy™y´FÄdÐTX×T`ÑT`Ø,0×,=Ñ,=ÈDÏIÉIôWˆà�
‰
�4˜¤r§w¡w§|¡|°D·I±I×4GÑ4GÈÓ'SÑSØ#¤b§g¡g§l¡l°4·:±:Ð?OÓ&PÑPØ#¤b§g¡g§l¡l°4·:±:¸zÓ&JÑJØ¤§¡§¡¨T¯Z©ZÐ9IÓ JÑJô	Lð 	×ÑœŸ™Ÿ™¬¯©¯©°d·j±jÀ*Ó)MÓNÕOrU   N)
rÄ   rÅ   rÆ   Ú__doc__rÇ   rM   rT   ri   rå   rè   rÊ   rU   rL   rÌ   rÌ   �   sC   „ ñAð ñ?ó ð?ð> ñó ðò
nò#SóJPrU   rÌ   Ú__main__)ré   r.   rQ   r+   rÈ   Úaria_router.isolationr   r2   Útests.iso_helpersr   r   r   r   r   r	   rC   r¨   rÉ   ÚTestCaser   rÌ   rÄ   ÚmainrÊ   rU   rL   ú<module>rï      sÌ   ðñ.ó 
Û Û Û å /÷,÷ ,ð €ð@€ð €×Ñ‘\“^ qÑ(Ð*<Ó=ôxa˜8×,Ñ,ó xaó >ðxaðv €×Ñ‘\“^ qÑ(Ð*<Ó=ô`P˜X×.Ñ.ó `Pó >ð`PðF ˆzÒØ€H‡M�M…Oð rU   