+
    jHàj,8  ã                  ó¤   € R t ^ RIHt ^ RIt^ RIt^ RIt]P                  ! ]4      tRs	R t
R tR tR tR tR	 tR
 tR tR tR R ltR R ltR# )a5  Main's banner / status-bar inventory for a canonical local session.

``tui_gateway/server.py::_session_info`` on main put the session's tools (by toolset), skills (by
category), MCP servers, version / release date, update notice, git branch, project and provider on
every ``session.info`` / create / resume ``info``; the Ink banner (``components/branding.tsx``) and
the classic CLI banner (``hermes_cli/banner.py::build_welcome_banner``) render them. A canonical
session's agent is built on its first turn, so the inventory is computed here from the session's
frozen policy (the toolsets that turn will run with), with main's own builders, in the owner
process. Every builder does I/O (skills tree walk, tool ``check_fn`` probes, git), so callers run
:func:`session_inventory` off the owner loop (:func:`snapshot_info`).
)ÚannotationsNFc                 ó@   € \         '       d   R# Rs ^ RIHp  V ! 4        R# )z¸Main's TUI gateway started the passive update check at import; the owner starts it once,
on the first snapshot, so ``update_behind`` reports like main's banner instead of staying null.NT©Úprefetch_update_check)Ú_update_prefetch_startedÚhermes_cli.bannerr   r   s    ÚD/home/ubuntu/.hermes/hermes-agent/gateway/session_local_inventory.pyÚ_start_update_prefetchr	      s   € ÷  ÓÙØ#ÐÝ7ÙÖó    c                ó¾   € ^ RI Hp / pT ;'       g    .  FD  pVR,          R,          pTP                  V! V4      ;'       g    R. 4      P                  V4       KF  	  V# )zX``{toolset: [tool names]}`` exactly as main's ``_session_info`` grouped ``agent.tools``.)Úget_toolset_for_toolÚfunctionÚnameÚother)Úmodel_toolsr   Ú
setdefaultÚappend)Útoolsr   ÚgroupedÚtoolr   s   &    r   Ú_groupedr   "   s[   € å0Ø$&€GØ—�˜’ˆØ�JÕ Õ'ˆØ×ÑÑ/°Ó5×@Ð@¸À"ÓE×LÑLÈTÖRñ ð €Nr
   c                óú  € ^ RI p^ RIHp ^ RIHp ^ RIHpHp \        V P                  V4      4      pT! T! VP                  R4      ;'       g    / P                  R4      4      ;'       g    RV P                  4      pVP                  WxRR7      p	\        V! V P                  4      4      p
V P                  R	8X  d	   W£,          p
Yy;'       g    .  Uu. uF  q»R
,          R,          V
9  g   K  VNK  	  up3# u upi )z¹The tool list the session's next agent build loads (``agent/agent_init.py`` tool snapshot):
the policy's toolsets minus the configured and platform-gated disabled ones, one-shot pruned.N)ÚONESHOT_HIDDEN_TOOLS)Úparse_config_string_list)Úsession_disabled_toolsetsÚsession_platform_tool_dropsÚagentÚdisabled_toolsetsT)Úenabled_toolsetsr   Ú
quiet_modeÚoneshotr   r   )r   Úagent.oneshot_footprintr   Úagent.skill_utilsr   Útoolsetsr   r   ÚlistÚcurrent_toolsetsÚgetÚplatformÚget_tool_definitionsÚsetÚsource)ÚpolicyÚconfigr   r   r   r   r   ÚenabledÚdisabledr   Údropsr   s   &&          r   Ú_policy_toolsr0   ,   sÚ   € ó Ý<Ý:ßOÜ�6×*Ñ*¨6Ó2Ó3€GÙ(Ù  &§*¡*¨WÓ"5×";Ð";¸×!@Ñ!@ÐATÓ!UÓV×^Ð^ÐZ^Ð`f×`oÑ`oóq€Hà×,Ñ,¸gÐnrÐ,Ós€EÜÑ+¨F¯O©OÓ<Ó=€EØ‡}�}˜	Ô!ØÕ%ˆØ§k k¨r kÓ[¡k˜d¸*Õ5EÀfÕ5MÐUZÑ5Z—T�T¡kÑ[Ð[Ð[ùÒ[s   ÃC8Ã.C8c                ó²  € \        T ;'       g    R4      P                  4       '       g   R# ^ RIHp  VP	                  4       ;_uu_ 4       pVP                  W 4      pRRR4       Xf   R# RTP                  RTP                  R	TP                  R
TP                  /#   + '       g   i     LH; i  \         d    \        P                  RRR7        R# i ; i)zZ``tui_gateway/server.py::_project_info_for_cwd``: the named project owning *cwd*, or None.Ú N)Úprojects_dbz!failed to resolve project for cwdT©Úexc_infoÚidÚslugr   Úprimary_path)ÚstrÚstripÚ
hermes_clir3   Úconnect_closingÚproject_for_pathÚ	ExceptionÚloggerÚdebugr6   r7   r   r8   )ÚcwdÚpdbÚconnÚprojects   &   r   Ú_projectrE   =   s¶   € äˆs�yˆy�b‹>×Ñ×!Ò!ÙÝ-ðØ× Ñ ×"Ô" dØ×*Ñ*¨4Ó5ˆG÷ #ð
 ’?ˆ4ð lØˆg�j‰j˜& '§,¡,°¸¿¹ÀnÐV]×VjÑVjð)lð l÷ #×"ûäô Ü�‰Ð8À4ˆÔHÚðús/   ³B0 ÁBÁB0 ÂB-	Â(B0 Â-B0 Â0"CÃCc                óÊ  € R. RR/p\         P                  ! \        4      ;_uu_ 4        ^ RIHpHpHp ^ RIHp ^ RI	H
p ^ RIHp V! 4       w  r‰T! Y�;'       g    . V4      p	V! W–! 4       V! 4       R7      VR&   RRR4       \         P                  ! \        4      ;_uu_ 4        ^ R	IHp
 V
! 4       VR&   RRR4       V#   + '       g   i     LM; i  + '       g   i     T# ; i)
a  The lines main's HermesCLI printed under its banner, computed where the tools run: the toolset
availability warning (``cli.py::_show_tool_availability_warnings``) and the Browser Use downgrade
notice (``_show_browser_backend_notice``). The classic CLI renders them with its own console.Útool_availability_warningsÚbrowser_backend_noticeN)Úcurrent_terminal_backendÚfilter_to_enabled_toolsetsÚtool_availability_warning_lines)Úcheck_tool_availability)Ú#terminal_backend_unavailable_reason)Úresolve_toolset)Úterminal_reasonÚterminal_backend)Údefault_downgrade_notice)Ú
contextlibÚsuppressr>   Ú$hermes_cli.tool_availability_noticesrI   rJ   rK   r   rL   Útools.terminal_toolrM   r#   rN   Útools.browser_use_clirQ   )r-   ÚnoticesrI   rJ   rK   rL   rM   rN   Ú_ÚunavailablerQ   s   &          r   Ú_cli_startup_noticesrZ   L   sÃ   € ð 2°2Ð7OÐQUÐV€GÜ	×	Ò	œY×	'Õ	'÷	cñ 	cå7ÝKÝ,Ù0Ó2‰ˆÙ0°¿m¸mÈÈ_Ó]ˆÙ0OØÐ)LÓ)NÙ5Ó7ô19ˆÐ,Ñ-÷ 
(ô 
×	Ò	œY×	'Õ	'ÝBÙ,DÓ,FˆÐ(Ñ)÷ 
(ð €N÷ 
(×	'ú÷ 
(Ö	'ð €Nús   ©AB>Â#CÂ>C	ÃC"	c                ó  € RV 9   g   RV 9   d   . # \         P                  ! \        4      ;_uu_ 4        ^ RIHp V! V4      pV  Uu. uF  qC! V4      '       d   K  VNK  	  upuuRRR4       # u upi   + '       g   i     . # ; i)a  Main's "Unknown toolsets" startup warning (``HermesCLI._init_toolsets``), judged where the plugins
load: the session's toolset names the profile's registry, MCP servers, plugin toolsets and platform
bundles cannot place (an uninstalled plugin's stale ``platform_toolsets`` entry).ÚallÚ*)Úsaved_toolset_resolverN)rR   rS   r>   Úhermes_cli.toolset_validationr^   )r-   r,   r^   Úknownr   s   &&   r   Ú_unknown_toolsetsra   b   sl   € ð �Ô˜3 'œ>Øˆ	Ü	×	Ò	œY×	'Õ	'ÝHÙ& vÓ.ˆÙ!(Ó<¡˜°°d·—�¡Ñ<÷ 
(Ò	'ùò =÷ 
(Ö	'ð €Iús#   ³A2ÁA-ÁA-Á A2Á-A2Á2B	c                 ó2  € ^ RI Hp  ^ RIHp RpV P                  P                  VR4      p V! R.4      ;_uu_ 4        V P                  4       pRRR4       V P                  P                  VR4       Ve   W0P                  V&   / pX FD  pTP                  TP                  R4      ;'       g    R. 4      P                  TR,          4       KF  	  T#   + '       g   i     LŒ; i  T P                  P                  TR4       Te   Y0P                  T&   i i ; i)	a|  ``hermes_cli.banner.get_available_skills`` as main's classic CLI computed it: ``cmd_chat`` pins
``HERMES_KANBAN_BOARD`` before HermesCLI starts, so ``environments: [kanban]`` skills are offered.
The owner never sets that env; the kanban relevance is scoped to this scan (a ContextVar) and the
catalog cache entry it would poison is restored, so other surfaces keep their own view.)Úskills_tool)Úscoped_kanban_toolset_selectionNÚkanbanÚcategoryÚgeneralr   )ÚfilteredF)
r   rc   Útools.kanban_toolset_contextrd   Ú_SKILLS_CACHEÚpopÚfind_all_skillsr   r&   r   )rc   rd   ÚkeyÚsavedÚfoundr   Úskills          r   Ú_cli_skillsrq   o   sø   € õ
 "ÝLØ
€CØ×%Ñ%×)Ñ)¨#¨tÓ4€Eð3Ù,¨h¨Z×8Õ8Ø×/Ñ/Ó1ˆE÷ 9ð 	×!Ñ!×%Ñ% c¨4Ô0ØÒØ-2×%Ñ% cÑ*Ø$&€GÛˆØ×Ñ˜5Ÿ9™9 ZÓ0×=Ð=°I¸rÓB×IÑIÈ%ÐPVÍ-ÖXñ à€N÷ 9×8ûð 	×!Ñ!×%Ñ% c¨4Ô0ØÒØ-2×%Ñ% cÒ*ð ús"   ¬C% ½CÁC% ÃC"	ÃC% Ã%1Dc                óò  € ^ RI Hp ^ RIHp R/ R/ R. RRRRR	R
RRRV'       d   VP	                  V4      MRR\        V4      /	pV! V 4      ;_uu_ 4        Ve   VP                  V RR7      M/ pVe°   ^ RIHp V! V4      p	\        V	RR4      ;'       g    RVR&   \        \        VRR
4      4      VR&   \        VRR4      ;'       g    RVR&   \        VRR
4      p
V
e#   \        V
RR
4      '       d   V
P                  VR&   \        \        VRR
4      ;'       g    . 4      pMb\        VP                  R4      ;'       g    / P                  R4      ;'       g    R4      VR&   . pVe    \        W4      w  r¼\        V4      VR&   \'        V4      VR&   \(        P*                  ! \         4      ;_uu_ 4        ^ RIHp V! V4      VR&   R
R
R
4       Ve7   VP0                  R8X  d&   VP3                  \5        V4      \7        W·4      R7       \(        P*                  ! \         4      ;_uu_ 4        Ve    VP0                  R8X  d   \9        4       VR&   M^ RIHp V! 4       VR&   R
R
R
4       \(        P*                  ! \         4      ;_uu_ 4        ^ R IHp V! 4       VR&   R
R
R
4       R
R
R
4       \(        P*                  ! \         4      ;_uu_ 4        ^ R!I H!p ^ R"I"H#p VP3                  V! 4       PH                  VR#7       R
R
R
4       \(        P*                  ! \         4      ;_uu_ 4        ^ R$IH%p ^ R%I&H'p \Q        4        V! R&R'7      VR	&   V! 4       VR&   R
R
R
4       V#   \          d    \"        P%                  RRR7        ELüi ; i  + '       g   i     ELÇ; i  + '       g   i     ELC; i  + '       g   i     EL; i  + '       g   i     EL(; i  + '       g   i     Lâ; i  + '       g   i     T# ; i)(z¸Main's banner/status fields for one session. Each section degrades to main's empty value on
its own, so one failing builder never blanks the others (main wrapped each in ``suppress``).)Úowner_scope)Ú	git_prober   ÚskillsÚmcp_serversÚversionr2   Úrelease_dateÚupdate_behindNÚupdate_commandÚbranchrD   F©Úsecrets©Úsession_runtime_viewÚproviderÚ_cached_system_promptÚsystem_promptÚcontext_compressorÚcontext_lengthr   Úmodelz'session inventory: tool snapshot failedTr4   )Úcompute_toolset_availabilityÚtool_availabilityÚcli)Úunknown_toolsets)Úget_available_skills)Úget_mcp_status)Ú__release_date__)Úget_version_info)rw   rx   )Úget_update_result)Úrecommended_update_commandg      à?)Útimeout))Úgateway.session_authoritiesrs   Útui_gatewayrt   r{   rE   r,   Úagent.voice_turn_router   Úgetattrr   r„   r$   r9   r&   r0   r>   r?   ÚwarningÚsortedrR   rS   r   r†   r*   ÚupdaterZ   ra   rq   rŠ   Útools.mcp_tool_discoveryr‹   r;   rŒ   Úhermes_cli.version_infor�   Úbase_versionrŽ   Úhermes_cli.configr�   r	   )Ú	authorityr+   r   rA   rs   rt   Úinfor,   r   ÚviewÚ
compressorr-   r   r†   rŠ   r‹   rŒ   r�   rŽ   r�   s   &&&&                r   Úsession_inventoryr    …   sS  € õ 8Ý%Ø˜2˜x¨¨]¸BÀ	È2È~Ð_aØ! 4Ð)9¸2Ø·S˜I×,Ñ,¨SÔ1¸bÀ)ÌXÐVYË]ð\€Dñ 
�Y×	Õ	Ø<BÒ<N�—‘˜y°%�Ô8ÐTVˆØÒÝCÙ'¨Ó.ˆDÜ& t¨Z¸Ó<×BÐBÀˆD�ÑÜ$¤W¨U°G¸TÓ%BÓCˆD�‰MÜ$+¨EÐ3JÈBÓ$O×$UÐ$UÐSUˆD�Ñ!Ü  Ð(<¸dÓCˆJØÒ%¬'°*Ð>NÐPT×*UÒ*UØ)3×)BÑ)B�Ð%Ñ&Üœ7 5Ð*<¸dÓC×IÐIÀrÓJ‰Gä" F§J¡J¨wÓ$7×$=Ð$=¸2×#BÑ#BÀ:Ó#N×#TÐ#TÐRTÓUˆD�ÑØˆGØÒ!ð]Ü%2°6Ó%B‘N�GÜ$,¨U£O�D˜‘Mô $*¨'£?ˆÐÑ Ü× Ò ¤×+Õ+åFÙ(DÀWÓ(MˆDÐ$Ñ%÷ ,ð Ò &§-¡-°5Ô"8Ø�K‰KÔ,¨WÓ5ÔHYÐZaÓHjˆKÔkÜ× Ò ¤×+Õ+ØÒ! f§m¡m°uÔ&<Ü!,£��X’åBÙ!5Ó!7��X‘÷ ,ô × Ò ¤×+Õ+Ý?Ù"0Ó"2ˆD�Ñ÷ ,÷E 
 ôJ 
×	Ò	œY×	'Õ	'Ý/Ý<Ø�‰Ñ,Ó.×;Ñ;ÐJZˆÔ[÷ 
(ô 
×	Ò	œY×	'Õ	'Ý7Ý@ÜÔ á 1¸#Ô >ˆˆ_ÑÙ!;Ó!=ˆÐÑ÷ 
(ð €Køô; !ô ]Ü—N‘NÐ#LÐW[�N×\ð]ú÷ ,×+Ð+ú÷ ,×+Ð+ú÷ ,×+Ð+ú÷E 
 ×	Ð	ú÷J 
(×	'ú÷ 
(Ö	'ð €Kúsª   Á?N>ÂBN>Ä$N>Ä=N>ÅN>Å'MÆ0N>Æ2N	ÇA$N>È(4N	É*N>ÊN*	ÊN>Ë	/OÌ"-O%Í"M?Í;N>Í>M?Í?N>ÎNÎ	N>ÎN'Î!	N>Î*N;Î5	N>Î>O	ÏO"	Ï%O6	c           	   ƒ  óØ  "  € ^ RI Hp ^ RIHp V! W4      pV! V P                  V P
                  VP                  ,          P                  4      pV P                  V4      p\        P                  ! \        WWdP                  R4      4      G Rj  x€L
 pVP                  R4      f=   \        R VP                  R4      ;'       g    / P                  4        4       4      VR&   / VCVC#  LY5i)zR``local_session_info`` plus main's inventory, the builders run off the owner loop.©Úlocal_session_info©Úpolicy_for_sourcerA   NÚ
tool_countc              3  ó8   "  € T F  p\        V4      x € K  	  R # 5i)N)Úlen)Ú.0Únamess   & r   Ú	<genexpr>Ú snapshot_info.<locals>.<genexpr>Ê   s   é € Ð aÑ9`°¤ U§ Ó9`ùs   ‚r   )Úgateway.session_localr£   Úgateway.session_policyr¥   ÚrunnerÚsessionsÚ
session_idr*   r   ÚasyncioÚ	to_threadr    r&   ÚsumÚvalues)rœ   Úrefr£   r¥   r�   r+   r   Ú	inventorys   &&      r   Úsnapshot_infor¸   À   sÃ   é € å8Ý8Ù˜iÓ-€DÙ˜y×/Ñ/°×1CÑ1CÀCÇNÁNÕ1S×1ZÑ1ZÓ[€FØ�O‰O˜CÓ €EÜ×'Ò'Ô(9¸9Èe×U]ÑU]Ð^cÓUdÓe×e€IØ‡x�x�ÓÒ%ä Ñ a¸)¿-¹-ÈÓ:P×:VÐ:VÐTV×9^Ñ9^Ô9`Ó aÓaˆˆ\ÑØ ˆiÐ ˜4Ð Ð ñ	 fùs   ‚BC*ÂC(Â5C*Ã$C*c               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚdict© )Úformats   "r   Ú__annotate__r¿   Î   s   € ÷ ñ ˜dñ r
   c           	     ó  € / p\         P                  ! \        4      ;_uu_ 4        ^ RIHp \        V! V 4      RR4      ;'       g    RVR&   RRR4       \         P                  ! \        4      ;_uu_ 4        \        \        V RR4      4      VR&   RRR4       \        V RR4      ;'       g    RVR&   \        V RR4      pVe#   \        VR	R4      '       d   VP                  VR	&   V#   + '       g   i     L£; i  + '       g   i     Lr; i)
u   The banner fields only a built agent knows (main's ``_session_info`` read them off it): the
tools it loaded, its cached system prompt (the ``â–¸ System Prompt`` row), provider and context
length. Cheap attribute reads, safe on the agent thread at turn end.r~   r€   r2   Nr   r�   r‚   rƒ   r„   )rR   rS   r>   r“   r   r”   r   r„   )r   r�   r   rŸ   s   &   r   Úagent_inventoryrÁ   Î   sÛ   € ð €DÜ	×	Ò	œY×	'Õ	'Ý?Ü"Ñ#7¸Ó#>À
ÈBÓO×UÐUÐSUˆˆZÑ÷ 
(ô 
×	Ò	œY×	'Õ	'Ü ¤¨°¸Ó!>Ó?ˆˆW‰÷ 
(ä# EÐ+BÀBÓG×MÐMÈ2€DˆÑÜ˜Ð 4°dÓ;€JØÒ¤'¨*Ð6FÈ×"MÒ"MØ!+×!:Ñ!:ˆÐÑØ€K÷ 
(×	'ú÷ 
(×	'ús   ¥'C'Á6C:Ã'C7	Ã:D
	c               ó   € V ^8„  d   QhRR/# )rº   r»   ÚNoner½   )r¾   s   "r   r¿   r¿   ß   s   € ÷ ,6ñ ,6¨ñ ,6r
   c           	     ó®  € Vf   R# \         P                  ! \        4      ;_uu_ 4        ^ RIHp ^ RIHp ^ RIHp ^ RI	H
p V P                  w  rgp\        \        V RR4      RR4      p	\        V! V	4      P                  R4      4      p
RpV
'       du   \        VR	R4      p\        VR
4      '       d   VP                  V4      MRp\        \        V RR4      RR4      pVe'   \!        V4      '       d    V! VP"                  RR7       V! VP(                  V4      p/ \+        V4      CV! Wn4      CpV
'       dž   Veš    \        VRR4      ;'       g    V P,                  pV! VVP.                  4      pVea   VP1                  VRR7      w  pVR&   VP                  R4      p\3        V\4        4      '       d   VP                  R4      MRpV'       d   VVR&   V P7                  RV4       RRR4       R#   \         d    \$        P'                  RRR7        ELi ; i  \         d    \$        P'                  RRR7       Rp LÏi ; i  + '       g   i     R# ; i)u^  Main's end-of-turn ``session.info`` (``session_workdir._emit_settled_session_info``) for a local
viewer: the first turn builds the agent, so this is when the banner's ``â–¸ System Prompt`` row, the
agent's tool list and provider first become known. Never breaks the turn.

A ``model_override`` admission (``/model --once``, ``/moa``) built its agent on the one-turn
route. That agent must not become the route Desktop, the TUI, and resume read. Drop it from
the cache (released once this turn's running slot clears) and publish the model and provider
of the policy route, both from one read of the profile.N)Úcli_turn)Ú
SessionRefr¢   r¤   Ú_ctxÚinbound_message_idÚmodel_overrider°   r&   Ú_runnerÚ_evict_cached_agentT)Úrelease_after_turnz one-turn agent cache drop failedr4   r¯   z!one-turn policy route unavailableFr|   r…   r€   zsession.info)rR   rS   r>   Úgateway.session_cli_turnrÅ   Úgateway.session_contractrÆ   r­   r£   r®   r¥   Ú_approval_ownerr”   Úboolr&   ÚhasattrÚcallableÚrouter?   r@   Ú
profile_idrÁ   rÊ   r*   Ú	effectiveÚ
isinstancer¼   Ú_publish_execution)Úturnr   rÅ   rÆ   r£   r¥   rœ   r±   Ú_generationÚ
message_idÚone_turnÚliver°   Úevictr¶   r�   r¯   r+   r,   Úsectionr€   s   &&                   r   Úpublish_settled_inforß   ß   s  € ð ‚}ÙÜ	×	Ò	œY×	'Õ	'Ý5Ý7Ý<Ý<Ø-1×-AÑ-AÑ*ˆ	˜{ÜœW T¨6°4Ó8Ð:NÐPTÓUˆ
Ü™ Ó,×0Ñ0Ð1AÓBÓCˆØˆßÜ˜y¨*°dÓ;ˆHÜ/6°xÀ×/GÒ/G�8—<‘< 
Ô+ÈTˆDÜœG D¨)°TÓ:Ð<QÐSWÓXˆEØÒ¤H¨U§O¢OðTÙ˜$Ÿ*™*¸Õ>ñ ˜×-Ñ-¨zÓ:ˆØO”/ %Ó(ÐOÑ,>¸yÓ,NÐOˆß˜Ò(ðÜ  ¨H°dÓ;×KÐK¸t¿|¹|�Ù*¨6°4·;±;Ó?�ð Ò!Ø(.×(8Ñ(8¸ÈEÐ(8Ó(RÑ%�˜˜W™Ø Ÿ*™* WÓ-�Ü6@ÀÌ$×6OÒ6O˜7Ÿ;™; zÔ2ÐUY�ßØ'/�D˜Ñ$Ø×Ñ °Ô5÷C 
(Ñ	'øô  !ô TÜ—L‘LÐ!CÈd�L×SðTûô ô Ü—‘Ð@È4�ÔPØ’ðú÷1 
(×	'Ð	'úsa   ©C	IÃ3G0Ä4IÄ<HÅ HÅ0AIÇIÇ0"HÈIÈHÈIÈ$I È=IÈ?I É IÉI	)Ú__doc__Ú
__future__r   r²   rR   ÚloggingÚ	getLoggerÚ__name__r?   r   r	   r   r0   rE   rZ   ra   rq   r    r¸   rÁ   rß   r½   r
   r   Ú<module>rå      sh   ðñ
õ #ã Û Û à	×	Ò	˜8Ó	$€à Ð òòò\ò"lòò,
òò,8òv!õ÷",6r
   