+
    jHàj2  ã                   óÞ  € R t ^ RIt^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t
^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHt ^ RIHt ^ RI H!t" ^ RIH#t$H%t& ^ RI'H(t( ^ RI)H*t*H+t+H,t, ^ RIH-t. ^ RIH/t0 ^ RI1H2t2H3t3 ^ RIH4t5 ^ RI6H7t7H8t8H9t9H:t:H;t;H<t< ^ RI=H>t>H?t?H@t@HAtAHBtBHCtCHDtDHEtEHFtFHGtGHHtHHItIHJtJHKtKHLtLHMtMHNtNHOtOHPtPHQtQHRtR ^ RISHTtTHUtUHVtVHWtWHXtXHYtYHZtZH[t[H\t\H]t]H^t^H_t_H`t`HataHbtbHctcHdtdHeteHftfHgtgHhthHitiHjtjHktkHltlHmtmHntnHotoHptpHqtqHrtrHstsHttt ^ RIuHvtv ^ RIwHxtxHytyHztzH{t{H|t|H}t}H~t~HtH€t€H�t�H‚t‚ ^ RIƒH„t„H…t…H†t†H‡t‡HˆtˆH‰t‰HŠtŠH‹t‹HŒtŒH�t�HŽtŽH�t�H�t�H‘t‘H’t’ ^ RI“H”t”H•t•H–t–H—t—H˜t˜H™t™Hštš ^ RI›HœtœH�t�Hžtž ^ RIŸH t H¡t¡H¢t¢H£t£H¤t¤H¥t¥H¦t¦ ^ RI§H¨t¨H©t©HªtªH«t«H¬t¬H­t­H®t®H¯t¯H°t°H±t±H²t²H³t³H´t´HµtµH¶t¶H·t·H¸t¸H¹t¹HºtºH»t»H¼t¼H½t½H¾t¾H¿t¿HÀtÀHÁtÁHÂtÂHÃtÃHÄtÄHÅtÅHÆtÆ ^ RIÇHÈtÈHÉtÉHÊtÊHËtËHÌtÌHÍtÍHÎtÎHÏtÏHÐtÐHÑtÑHÒtÒHÓtÓHÔtÔHÕtÕHÖtÖH×t×HØtØHÙtÙHÚtÚHÛtÛHÜtÜHÝtÝHÞtÞHßtßHàtàHátáHâtâHãtã ^ RIäHåtå ]EPÌ                  ! ]ç4      tèR  R! ltéR" R# ltêR$ R% ltëR& R' ltìR( R) ltíR* R+ ltîR, tïR- R. ltðR/ R0 ltñRÃtòRÄR1 R2 lltóR3tôR4 R5 ltõR6 R7 ltöR8 R9 lt÷RÅR:R;R<R;/R= lltøR> R? ltùR@ RA ltúRB RC ltûRD RE ltüRÆRF RG lltýRH RI ltþRJ RK ltÿRL RM lEt RN RO lEtRP RQ lEtRR^/RS RT llEtRU RV lEtRW RX lEtRY RZ lEtR[ R\ lEtR]RR^R/R_ lEtRÅR`RRaR;/Rb Rc lllEt	RÇRaR;R`R/Rd Re lllEt
Rf Rg lEtRh Ri lEtRÈRj Rk llEtRl Rm lEtRn Ro lEtRp Rq lEtRr Rs lEtRt Ru lEtRvR/Rw Rx llEtRyRRzR/R{ R| llEtRyRR}R~RzRRR€/R� R‚ llEtRƒR„/R… R† llEtR‡ Rˆ lEtR‰ RŠ lEtR‹ EtRŒ R� lEtRŽ R� lEtRvRR�RRyRR‘R;R’R;R“R;RzRR”R/R• lEtR–.EtR—.EtR˜ EtR™ Rš lEt RÅR› Rœ llEt!R� Rž lEt"] ! RŸ R 4      4       Et#R¡ R¢ lEt$RvR/R£ lEt%] ! R¤ R¥4      4       Et&R¦ R§ lEt'R¨ Et(R© Rª lEt)R«R/R¬ R­ llEt*R® R¯ lEt+R:R;/R° R± llEt,R²RR³RR´R/Rµ R¶ llEt-R· R¸ lEt.RzRR¹R/Rº R» llEt/R¼ R½ lEt0R¾ Et1R¿ RÀ lEt2RÁ RÂ lEt3R# )Éaj  Hermes update pipeline: dispatchers (``_cmd_update_impl``/``_cmd_update_check``) + git plumbing.

Each concern lives in ``update_cmd_<concern>.py`` and is re-imported here so
``hermes_cli.update_cmd.<name>`` keeps resolving (and stays monkeypatchable). Imports are one-way:
main -> update_cmd -> update_cmd_*; ``_m()`` resolves ``hermes_cli.main`` at call time.
N)Úsuppress)Ú	dataclass)ÚPath©ÚNoReturn)Úno_prompt_git_kwargs©Úget_hermes_home)Úupdate_handoff)Ú_best_effortÚ_record_stop)Úrun_completion)Úadopt_retired_channel)Úaccept_worker_receipt)Úupdate_receiptÚupdate_cmd_config©Ústop_for_relaunch)Úgit_operation_in_progressÚinterrupted_pull_markerÚis_object_id)Úupdate_cmd_commit)Úupdate_cmd_posix_pause)Ú_checkout_moveÚ
_moves_for)Úupdate_cmd_check)Ú_abort_recovery_is_completeÚ_qualified_serve_skipsÚ$_recover_gateway_restart_after_abortÚ_serve_unit_recovery_availableÚ$_surviving_pre_update_serve_runtimesÚ_warn_stale_serve_runtimes)Ú_HOLDER_VALUE_FLAGS_FALLBACKÚ(_cold_start_windows_gateway_after_updateÚ_desktop_owns_gateway_lifecycleÚ_detect_venv_python_processesÚ_hermes_holder_subcommandÚ_holder_value_flagsÚ_holder_value_flags_cacheÚ!_looks_like_desktop_control_planeÚ"_pause_windows_gateways_for_updateÚ _refresh_bootstrap_cache_scriptsÚ"_refresh_windows_gateway_launchersÚ"_refuse_gateway_ancestor_tree_killÚ _restore_windows_gateway_serviceÚ%_resume_windows_gateways_after_updateÚ*_resume_windows_gateways_and_merge_outcomeÚ#_self_and_non_gateway_ancestor_pidsÚ_start_windows_gateway_serviceÚ_stop_windows_gateway_serviceÚ_venv_launcher_ancestorsÚ%_wait_for_windows_update_gateway_exitÚ!_write_update_planned_stop_marker)!Ú_FLEET_RESTART_PENDING_NAMEÚ_FRESH_RESTART_SUPERVISORSÚ_GatewayRestartOutcomeÚ#_clear_fleet_restart_pending_markerÚ_current_checkout_shaÚ#_drain_or_signal_gateway_for_updateÚ_fleet_probe_expected_runtimesÚ"_fleet_restart_pending_marker_pathÚ_fleet_restart_skip_reasonÚ_for_each_systemd_gateway_unitÚ_gateway_recovery_partitionÚ _gateway_service_matches_profileÚ_pending_fleet_restart_neededÚ_receipt_looks_unfinishedÚ_receipt_reports_stale_runtimeÚ_resolve_manage_cmdÚ#_restart_gateway_fleet_after_updateÚ%_restart_launchd_gateway_after_updateÚ_restart_macos_launchd_gatewaysÚ$_restart_phase_failure_is_incompleteÚ_restart_systemd_gateway_unitsÚ_run_pending_fleet_restartÚ/_service_unit_supports_graceful_sigusr1_restartÚ,_surviving_gateway_pids_after_failed_restartÚ
_systemctlÚ_systemctl_reset_and_restartÚ_wait_for_service_activeÚ#_warn_gateway_restart_phase_abortedÚ&_warn_incomplete_gateway_fleet_restartÚ_warn_pending_fleet_restartÚ&_warn_pending_fleet_restart_on_startupÚ#_write_fleet_restart_pending_markerÚ_write_gateway_update_exit_code)Ú_verify_fleet_after_update)Ú_ZIP_PRESERVED_TOP_LEVELÚ_ZIP_STAGING_ARTIFACT_SUFFIXESÚ_abort_zip_update_if_dirty_treeÚ_atomic_replace_dirÚ_commit_staged_replacementsÚ_discard_stagedÚ#_is_zip_preserved_entry_status_lineÚ$_is_zip_staging_artifact_status_lineÚ_stage_replacementÚ_update_via_zipÚ_zip_overlay_block_reason)Ú_AUTOSTASH_NAME_PREFIXÚ_AUTOSTASH_WARN_AGE_DAYSÚ_clear_pending_autostashÚ_discard_stashed_changesÚ_git_untracked_pathsÚ_park_stashed_changesÚ_print_stash_cleanup_guidanceÚ_reject_unsafe_stash_restoreÚ_resolve_stash_selectorÚ_restore_stashed_changesÚ_restored_python_pathsÚ._stash_apply_failed_only_on_existing_untrackedÚ_stash_local_changes_if_neededÚ_unrestored_autostash_noticeÚ!_warn_orphaned_update_autostashes)Ú_LAST_SIBLING_SNAPSHOTSÚ!_check_and_apply_config_migrationÚ _migrate_sibling_profile_configsÚ_print_itemsÚ_reload_config_modulesÚ_run_config_check_freshÚ_run_migrate_config_fresh)Ú_UPDATE_CRITICAL_MODULESÚ _critical_module_import_failuresÚ!_validate_critical_modules_import)Ú_capture_active_lazy_featuresÚ_npm_lockfile_changedÚ	_path_uidÚ_rebuild_desktop_after_updateÚ_refresh_active_lazy_featuresÚ,_refresh_active_memory_provider_dependenciesÚ_update_node_dependencies)ÚOFFICIAL_REPO_URLÚOFFICIAL_REPO_URLSÚSKIP_UPSTREAM_PROMPT_FILEÚ_ORPHAN_RESCUE_REFS_TO_KEEPÚ_ORPHAN_RESCUE_REF_MAX_AGE_DAYSÚ_add_upstream_remoteÚ_assess_parked_branch_switchÚ_branch_head_labelÚ_branch_head_suffixÚ_classify_fetch_failureÚ_count_commits_betweenÚ_discard_lockfile_churnÚ_ensure_non_trampoline_gitÚ_get_origin_urlÚ_git_is_trampolineÚ_has_upstream_remoteÚ_is_forkÚ_locate_real_gitÚ_mark_skip_upstream_promptÚ_normalize_managed_eolÚ_park_detached_headÚ_portable_git_candidatesÚ_print_fetch_failureÚ _print_parked_branch_kept_noticeÚ!_print_parked_branch_skip_warningÚ_prune_orphan_rescue_refsÚ_push_synced_forkÚ_should_skip_upstream_promptÚ_sync_fork_with_upstreamÚ_sync_with_upstream_if_neededÚUpstreamTargetBroken)Ú_PRE_UPDATE_SNAPSHOT_KEEPÚ"_PRE_UPDATE_SNAPSHOT_MAX_FILE_SIZEÚ_checkout_versionÚ_ensure_acp_launcherÚ_ensure_fhs_path_guardÚ _finish_dashboard_update_cleanupÚ_format_time_agoÚ"_post_update_sqlite_runtime_statusÚ!_print_bundled_skills_sync_reportÚ_print_curator_first_run_noticeÚ _print_curator_recent_run_noticeÚ$_print_fts_optimize_available_noticeÚ_print_update_completionÚ_print_update_summaryÚ_prepare_updated_checkoutÚ!_print_verified_update_completionÚ_purge_stale_hermes_modulesÚ_read_project_versionÚ_reload_process_scan_modulesÚ_reload_updated_runtime_modulesÚ_resolve_pre_update_backup_modeÚ_restore_state_db_from_snapshotÚ_run_post_update_maintenanceÚ_run_pre_update_backupÚ_sweep_bytecode_after_updateÚ_update_complete_messageÚ _verify_and_restore_one_state_dbÚ)_verify_and_restore_state_dbs_post_update)ÚUTCc                ó$   € V ^8„  d   QhR\         /# ©é   Úreturnr   )Úformats   "Ú:/home/ubuntu/.hermes/hermes-agent/hermes_cli/update_cmd.pyÚ__annotate__rÆ   |   s   € ÷ ñ ¤ñ ó    c                  ó   € \        4        R # ©Nr   © rÇ   rÅ   Úget_default_hermes_rootrË   |   ó   € äÖrÇ   c                óF   € V ^8„  d   QhR\         \        ,          R\        /# )rÂ   Úpip_cmdrÃ   ©ÚlistÚstrr   )rÄ   s   "rÅ   rÆ   rÆ   �   s   € ÷ ñ ¤4¬¥9ð ´ñ rÇ   c                 ó   € \        4        R # rÉ   r   )rÎ   s   &rÅ   Ú_ensure_uv_for_termuxrÓ   �   rÌ   rÇ   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )rÂ   rÎ   Ú
python_exerÃ   rÏ   )rÄ   s   "rÅ   rÆ   rÆ   †   s!   € ÷ ñ œdð ´ð ¼ñ rÇ   c                 ó   € \        4        R # rÉ   r   )rÎ   rÕ   s   &&rÅ   Ú_ensure_venv_pipr×   †   rÌ   rÇ   c                ó$   € V ^8„  d   QhR\         /# rÁ   r   )rÄ   s   "rÅ   rÆ   rÆ   ‹   s   € ÷ ñ ¤8ñ rÇ   c                 ó   € \        4        R # rÉ   r   )Úuv_bins   &rÅ   Ú_pip_install_prefixrÛ   ‹   rÌ   rÇ   c                ó0   € V ^8„  d   QhR\         R\        /# ©rÂ   ÚexcrÃ   )ÚBaseExceptionr   )rÄ   s   "rÅ   rÆ   rÆ   �   s   € ÷ ñ ¬Mð ¼hñ rÇ   c                 ó   € \        4        R # rÉ   r   ©rÞ   s   &rÅ   Ú"_refuse_update_for_contended_shimsrâ   �   rÌ   rÇ   c                ó:   € V ^8„  d   QhR\         \        ,          /# rÁ   )ÚtypeÚ	Exception)rÄ   s   "rÅ   rÆ   rÆ   •   s   € ÷ ñ ¤T¬)¥_ñ rÇ   c                  ó$   €  ! R  R\         4      p V # )c                   ó   € ] tR t^˜tRtR# )Ú1_shim_quarantine_error_type.<locals>._NeverRaisedrÊ   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__rÊ   rÇ   rÅ   Ú_NeverRaisedrè   ˜   s   † ÛrÇ   rî   )rå   )rî   s    rÅ   Ú_shim_quarantine_error_typerï   •   s   € ô”yô ð ÐrÇ   c                 ó   € ^ RI Hp  V # )a  Lazy ``hermes_cli.main`` reference.

Lets callers keep patching ``hermes_cli.main.<helper>`` (the historical
test surface) and have those patches reach this code path, and defers the
import so ``hermes_cli.main`` -> ``hermes_cli.update_cmd`` stays one-way
at import time.
©Úmain)Ú
hermes_clirò   rñ   s    rÅ   Ú_mrô   ž   s   € õ  à€KrÇ   c                ó$   € V ^8„  d   QhR\         /# rÁ   ©Údict)rÄ   s   "rÅ   rÆ   rÆ   «   s   € ÷ 8ñ 8œñ 8rÇ   c                 ó„   € ^ RI Hp  V ! 4       ;'       g    / P                  R/ 4      p\        V\        4      '       d   V# / # )z[The ``updates:`` config section (``{}`` when absent/malformed); may raise on config errors.)Úload_configÚupdates)Úhermes_cli.configrù   ÚgetÚ
isinstancer÷   )rù   Úsections     rÅ   Ú_updates_configrÿ   «   s8   € å-Ù‹}×"Ð" ×'Ñ'¨	°2Ó6€GÜ  ¬$×/Ò/ˆ7Ð7°RÐ7rÇ   c                ó   € V ^8„  d   QhRR/# ©rÂ   rÃ   NrÊ   )rÄ   s   "rÅ   rÆ   rÆ   ²   s   € ÷ *ñ *¨4ñ *rÇ   c                óJ  € \         P                  P                  R4      pV'       d&   \         P                  P                  R4      '       d   R# \        V . RO4      pVP                  ^ 8X  d#   VP
                  P                  4       '       d   R# V\         P                  R&   R# )uF  Point git's libcurl at the same CA bundle Python already trusts.

git ignores ``SSL_CERT_FILE`` (its libcurl reads only ``GIT_SSL_CAINFO`` /
``http.sslCAInfo``), so on a network with a TLS-inspecting proxy whose
corporate root lives only in that variable the channel read succeeds and
the very next ``git fetch`` dies with "certificate signer not trusted" â€”
half the updater trusting a bundle the other half refuses. Written into
``os.environ`` once so every git child the updater spawns sees it: the
network fetches (via ``_no_prompt_git_kwargs``) and the partial-clone
checkout's lazy promisor fetches (which inherit the process env).

An explicit ``GIT_SSL_CAINFO`` or a configured ``http.sslCAInfo`` wins:
the env var outranks the config file in git's precedence, so mapping over
either would silently override a deliberate choice.
ÚSSL_CERT_FILEÚGIT_SSL_CAINFON)Úconfigz--getzhttp.sslCAInfo)ÚosÚenvironrü   Ú_git_runÚ
returncodeÚstdoutÚstrip)Úgit_cmdÚbundleÚ
configureds   &  rÅ   Ú_map_ssl_cert_file_for_gitr  ²   sp   € ô  �Z‰Z�^‰^˜OÓ,€Fß”R—Z‘Z—^‘^Ð$4×5Ò5ÙÜ˜'Ò#HÓI€JØ×Ñ Ô! j×&7Ñ&7×&=Ñ&=×&?Ò&?ÙØ#)„B‡J�JÐÓ rÇ   c                ó@   € V ^8„  d   QhR\         R\        R\         RR/# )rÂ   ÚstepÚokÚdetailrÃ   N©rÑ   Úbool)rÄ   s   "rÅ   rÆ   rÆ   ×   s(   € ÷ &ñ &œcð &¤tð &´Sð &À$ñ &rÇ   c                óŒ   € \        \        4      ;_uu_ 4        ^ RIHp V! WV4       RRR4       R#   + '       g   i     R# ; i)zSBest-effort ``update_receipt.record_step``; the receipt must never break an update.)Úrecord_stepN)r   rå   Úhermes_cli.update_receiptr  )r  r  r  r  s   &&& rÅ   Ú_record_update_stepr  ×   s)   € ä	”)×	Õ	Ý9Ù�D˜fÔ%÷ 
×	×	Ò	ús	   ˜2²A	i,  c                ó4   € V ^8„  d   QhR\         R\         RR/# )rÂ   r  ÚreasonrÃ   N©rÑ   )rÄ   s   "rÅ   rÆ   rÆ   ä   s!   € ÷ "ñ "œcð "¬3ð "°4ñ "rÇ   c                óŠ   € \        \        4      ;_uu_ 4        ^ RIHp V! W4       RRR4       R#   + '       g   i     R# ; i)zSBest-effort ``update_receipt.record_skip``; the receipt must never break an update.)Úrecord_skipN)r   rå   r  r  )r  r  r  s   && rÅ   Ú_record_update_skipr  ä   s'   € ä	”)×	Õ	Ý9Ù�DÔ!÷ 
×	×	Ò	ús	   ˜1±A	c                ó   € V ^8„  d   QhRR/# r  rÊ   )rÄ   s   "rÅ   rÆ   rÆ   ë   s   € ÷ Lñ L¸Dñ LrÇ   c                ó¾   € V'       d   \        RRRV 24       R# \        V 4      R8X  d&   \        V RR4      '       d   RMR	p\        RV4       R# \        RRR
4       R# )aB  Record the pre-update backup as a skip when it was disabled, else as a step.

``snapshot_id`` is None both when the backup was deliberately turned off (config
``updates.pre_update_backup: off``/``false``, or ``--no-backup``) and when a requested backup
produced nothing. Recording both as ``ok=false, "disabled or failed"`` made an opt-out
indistinguishable from a real failure in the receipt, so a disabled safety net read as a
broken one (#94944 is the shipped-opt-out case). A deliberate opt-out is a SKIP WITH its
reason; only a requested-but-empty backup is a failed step.
Úpre_update_backupTz	snapshot=NÚoffÚ	no_backupFzdisabled by --no-backupz1disabled by updates.pre_update_backup (mode: off)zno snapshot captured)r  r·   Úgetattrr  )ÚargsÚsnapshot_idr  s   && rÅ   Ú!_record_pre_update_backup_outcomer(  ë   sa   € ÷ ÜÐ/°¸À;À-Ð7PÔQÙÜ& tÓ,°Ô5Ü/6°t¸[È%×/PÒ/PÑ+ØJð 	äÐ/°Ô8ÙÜÐ+¨UÐ4JÖKrÇ   c                ó   € V ^8„  d   QhRR/# r  rÊ   )rÄ   s   "rÅ   rÆ   rÆ      s   € ÷ sñ s°ñ srÇ   c                 ó®   € V'       * ;'       d    \        V 4      R 8H  p\        P                  ! RV'       d	   R4       R# V'       d	   R4       R# R4       R# )r#  ÚsnapshotÚsuccessÚskippedÚfailedN)r·   Ú_completion_receiptÚrecord_stage)r&  r'  r-  s   && rÅ   Ú_record_snapshot_stager1     s<   € ØŒo×PÐPÔ"AÀ$Ó"GÈ5Ñ"P€GÜ×$Ò$ Z¿k°Ör×\cÈyÖrÐiqÖrrÇ   ÚcheckFÚnetworkc               óþ  € ^ RI Hp V'       d   R\        /\        4       CM/ pVP	                  RV! 4       4       ^ RIHp  T! W3RVf   \        4       P                  MTRRR	RR
RRRRV/VB #   \        P                   dz   p\        P                  ! TP                  ^|RRT^ ,           R\         R2R7      p	T'       d0   \        P                  ! ^|TP                  RT	P                  R7      ThT	u Rp?# Rp?ii ; i)aV  Run git capturing utf-8 text (default cwd: checkout); ``network=True`` disables the
terminal prompt so an HTTP 401 fails fast instead of hanging, and bounds the wait.

Every spawn carries ``windows_hide_flags()``: the updater's git children run under the
console-less desktop backend, and a bare spawn flashes a console window each (#117781).)Úwindows_hide_flagsÚtimeoutÚcreationflags©Úrun_gitÚcwdNÚcapture_outputTÚtextÚencodingúutf-8ÚerrorsÚreplacer2  Ú zgit z timed out after z;s (a stalled remote, or a transfer too large for the limit))r
  Ústderr)ÚoutputrB  )Úhermes_cli._subprocess_compatr5  ÚNETWORK_GIT_TIMEOUT_SECONDSÚ_no_prompt_git_kwargsÚ
setdefaultÚhermes_cli.update_custodyr9  rô   ÚPROJECT_ROOTÚ
subprocessÚTimeoutExpiredÚCompletedProcessÚcmdÚCalledProcessErrorrB  )
r  r&  r:  r2  r3  r5  Úspawn_kwargsr9  rÞ   Úresults
   &&&$$     rÅ   r  r    s  € õ A÷ [b�IÔ:ÐVÔ>SÓ>UÑVÐgi€LØ×Ñ˜OÑ-?Ó-AÔBÝ1ðÙØñØ47²Kœr›t×0Ò0ÀSðØY]ðàðà 'ðà09ðàAFðð ñð 	øô ×$Ñ$ô 	ô ×,Ò,Ø�G‰G�S Ø˜$˜q�'˜Ð"3Ô4OÐ3Pð  QLð  MôNˆ÷ Ü×/Ò/°°S·W±WÀRÐPV×P]ÑP]Ô^ÐdgÐgØ�ûð	ús   Á,A. Á.C<ÂA.C7Ã1C<Ã7C<c                ó4   € V ^8„  d   QhR\         R\        RR/# )rÂ   Ú	repo_rootÚbranchrÃ   N)r   rÑ   )rÄ   s   "rÅ   rÆ   rÆ   &  s&   € ÷ 
tñ 
t¬Dð 
t¼#ð 
tÀ$ñ 
trÇ   c                ó”  € ^ RI Hp  V! W3/ \        4       B '       d   \        R4       R# R#   \        \
        P                  3 d   p\        TRR4      ;'       g    \        T4      P                  4       P                  4       RR ;'       g    \        T4      P                  .p\        RT^ ,           R24        Rp?R# Rp?ii ; i)zˆUnshallow a shallow checkout before the bounded fetch (#123254). Non-fatal: on failure the
update proceeds with the fetch it always ran.)Úheal_shallow_historyuB     âœ“ Fetched the commit history this shallow checkout was missingrB  Nu2     âš  Could not fetch the missing commit history (z$); a very stale install may time outéÿÿÿÿ)Úhermes_cli.gitlockrU  rF  ÚprintÚOSErrorrJ  ÚSubprocessErrorr%  rÑ   r  Ú
splitlinesrä   ré   )rR  rS  rU  rÞ   r  s   &&   rÅ   Ú_heal_stale_shallow_checkoutr\  &  s´   € õ 8ðtÙ 	ÑMÔ5JÓ5L×MÐMÜÐVÖWñ Nøä”Z×/Ñ/Ð0ô tÜ˜#˜x¨Ó.×:Ð:´#°c³(×AÑAÓC×NÑNÓPÐQSÐQTÐU×mÐmÔZ^Ð_bÓZc×ZlÑZlÐYmˆÜÐBÀ6È!Å9À+ÐMqÐr×sÒsûðtús   ˆ". ®CÁ	ACÂ-CÃCc                ó2   € V ^8„  d   QhR\         R,          /# r  r  )rÄ   s   "rÅ   rÆ   rÆ   3  s   € ÷ ñ ¤s¨T¥zñ rÇ   c                óÀ   €  ^ RI Hp V! V RR.VRRRRRR7      pVP                  P                  4       ;'       g    R#   \        P
                  \        3 d     R# i ; i)	z=Return the current HEAD SHA, or None if it can't be resolved.r8  ú	rev-parseÚHEADTr>  r@  )r:  r;  r<  r=  r?  r2  N)rH  r9  r
  r  rJ  rN  rY  )r  r:  r9  rP  s   &&  rÅ   Ú_capture_head_shara  3  sh   € ðÝ5áØ�k 6Ð*ØØØ °	Øô
ˆð �}‰}×"Ñ"Ó$×,Ð,¨Ð,øÜ×)Ñ)¬7Ð3ô Úðús   ‚8> »> ¾AÁAc                ól   € V ^8„  d   QhR\         \        \        R,          \        R,          3,          /# r  ©Útupler  rÑ   )rÄ   s   "rÅ   rÆ   rÆ   H  s(   € ÷ ñ ä
Œ4”�t•œS 4�ZÐ'Õ(ñrÇ   c           	     ó~  € ^ RI p^ RIp\        V 4      p VP                  RR7      ;_uu_ 4       pV F|  pW,          pVP	                  4       '       g   K#  \        V4      \        V4      P                  RR4      R,           ,          p VP                  \        V4      \        V4      RR7       K~  	  RRR4       R#   TP                   d.   pR	\        T4      \        T4      3u Rp?u uuRRR4       # Rp?i\         d(   pR	\        T4      R
T 23u Rp?u uuRRR4       # Rp?ii ; i  + '       g   i     Lƒ; i)zGCompile *relpaths* under *root* without writing bytecode into the tree.Nzhermes-syntax-check-)ÚprefixÚ/Ú__ÚcT)ÚcfileÚdoraiseFzcould not read: )TNN)
Ú
py_compileÚtempfiler   ÚTemporaryDirectoryÚexistsrÑ   r@  ÚcompileÚPyCompileErrorrY  )	ÚrootÚrelpathsrl  rm  ÚtmpdirÚrelpathÚpathrj  rÞ   s	   &&       rÅ   Ú_validate_python_files_syntaxrw  H  s  € ó Ûä�‹:€DØ	×	$Ñ	$Ð,BÐ	$×	CÔ	CÀvÛˆGØ•>ˆDØ—;‘;—=’=ÙÜ˜“L¤C¨£L×$8Ñ$8¸¸dÓ$CÀcÕ$IÕJˆEðBØ×"Ñ"¤3 t£9´C¸³JÈÐ"ÖMñ  ÷ 
Dð Ðøð	 ×,Ñ,ô 2Øœc $›i¬¨S«Ð1Ö1÷ 
DÒ	Cûô ô BØœc $›iÐ+;¸C¸5Ð)AÐAÖA÷ 
DÒ	CûðBú÷ 
D×	CúsZ   ®AD,Â&B;Â-D,Â;D)	ÃC4	Ã"D)	Ã#D,Ã4D)	ÄD)	ÄD$	ÄD)	ÄD,Ä$D)	Ä)D,Ä,D<	c                ól   € V ^8„  d   QhR\         \        \        R,          \        R,          3,          /# r  rc  )rÄ   s   "rÅ   rÆ   rÆ   _  s*   € ÷ Gñ G¬U´4¼¸t½ÄSÈ4ÅZÐ3OÕ-Pñ GrÇ   c                ó"   € \        V \        4      # )us  Compile each file in ``_UPDATE_CRITICAL_FILES`` to catch SyntaxErrors.

These are the files imported on every ``hermes`` startup; if any of them
has a syntax error (orphan merge-conflict markers, bad ref to a name
that no longer exists, etc.) the CLI can't bootstrap at all. We validate
them after a successful ``git pull`` so we can auto-roll-back instead of
leaving the user with a bricked install.

The compiled ``.pyc`` is written to a temp directory rather than the
source tree's ``__pycache__/`` so we don't race with concurrent test
workers that walk the same dir, and so we don't leave a stale pyc
behind in production if the next interpreter run picks a different
Python version. The pyc is discarded on function return either way â€”
we only care about the compile-or-not signal.

Returns ``(ok, failing_path, error_message)``. ``ok=True`` means every
file parsed cleanly.
)rw  Ú_UPDATE_CRITICAL_FILES)rr  s   &rÅ   Ú_validate_critical_files_syntaxr{  _  s   € ô& )¨Ô/EÓFÐFrÇ   c                óH   € V ^8„  d   QhR\         R\         R\        R\         /# )rÂ   Úprompt_textÚdefaultr6  rÃ   )rÑ   Úfloat)rÄ   s   "rÅ   rÆ   rÆ   {  s)   € ÷ 2ñ 2¤ð 2¬sð 2Ä%ð 2ÔTWñ 2rÇ   c           	     óÈ  € ^ RI p^ RIp^ RIHp \        P
                  ! 4       '       d   \        RT  RT;'       g    R R24       V# V! 4       pVR,          pVR,          pVP                  R	R
7       RV RVR\        VP                  4       4      /p	VP                  R4      p
V
P                  VP                  V	4      RR7       V
P                  V4       \        P                  ! 4       V,           p\        P                  ! 4       V8  d€   VP!                  4       '       dR    VP#                  RR7      P%                  4       pVP                  R	R
7       VP                  R	R
7       V'       d   V# T# \        P*                  ! R4       K™  VP                  R	R
7       VP                  R	R
7       \        R\-        V4       RV: R24       V#   \&        \(        3 d     Lmi ; i)a_  File-based IPC prompt for gateway mode.

Writes a prompt marker file so the gateway can forward the question to the
user, then polls for a response file.  Falls back to *default* on timeout.

Used by ``hermes update --gateway`` so interactive prompts (stash restore,
config migration) are forwarded to the messenger instead of being silently
skipped.
Nr   u     â†’ u    â†’ z(empty)z% (gateways are paused for the update)z.update_prompt.jsonz.update_responseT©Ú
missing_okÚpromptr~  Úidz.tmpr>  ©r=  ú	utf-8-sigg      à?z  (no response after zs, using default: Ú))ÚjsonÚuuidÚhermes_constantsr	   Ú_posix_pauseÚgateways_pausedrX  ÚunlinkrÑ   Úuuid4Úwith_suffixÚ
write_textÚdumpsr@  Ú_timeÚ	monotonicro  Ú	read_textr  rY  Ú
ValueErrorÚsleepÚint)r}  r~  r6  Ú_jsonÚ_uuidr	   ÚhomeÚprompt_pathÚresponse_pathÚpayloadÚtmpÚdeadlineÚanswers   &&&          rÅ   Ú_gateway_promptr¡  {  s»  € ó ÛÝ0ä×#Ò#×%Ò%Ü��{�m 5¨×)=Ð)=°IÐ(>Ð>cÐdÔeØˆÙÓ€DØÐ.Õ.€KØÐ-Õ-€Mð ×Ñ DÐÔ)ð 	�+Ø�7ØŒc�%—+‘+“-Ó ð€Gð
 ×
!Ñ
! &Ó
)€CØ‡N�N�5—;‘;˜wÓ'°'€NÔ:Ø‡K�K�Ôô �ŠÓ  7Õ*€HÜ
�/Š/Ó
˜hÔ
&Ø×Ñ×!Ò!ðØ&×0Ñ0¸+Ð0ÓF×LÑLÓN�Ø×$Ñ$°Ð$Ô5Ø×"Ñ"¨dÐ"Ô3ß!'�vÐ4¨WÐ4ô 	�Š�CÖð ×Ñ $ÐÔ'Ø×Ñ DÐÔ)Ü	Ð!¤# g£, Ð/AÀ'ÁÈAÐ
NÔOØ€Nøô œZÐ(ô Ùðús   Ä#AG Å/G Å1G ÇG!Ç G!c                óZ   € V ^8„  d   QhR\         P                  R\        \        ,          /# rÝ   )rJ  rN  rÐ   rÑ   )rÄ   s   "rÅ   rÆ   rÆ   °  s%   € ÷ 'ñ '¬×)FÑ)Fð 'Ì4ÔPSÍ9ñ 'rÇ   c                óˆ  € V P                   pVf   . # \        V\        \        34      '       dU   \        V\        4      '       d   VP	                  RR4      MTp \
        P                  ! V\        P                  R8g  R7      # V Uu. uF  p\        V4      NK  	  up#   \         d    TP                  4       u # i ; iu upi )z<Normalize ``CalledProcessError.cmd`` into argv-style tokens.r>  r@  Únt)Úposix)
rM  rý   rÑ   ÚbytesÚdecodeÚshlexÚsplitr  Únamer•  )rÞ   rM  r<  Úparts   &   rÅ   Ú_called_process_error_cmd_partsr¬  °  sœ   € à
�'‰'€CØ
‚{Øˆ	Ü�#œœU�|×$Ò$Ü1;¸CÄ×1GÒ1Gˆs�z‰z˜' 9Ô-ÈSˆð	 Ü—;’;˜t¬2¯7©7°d©?Ô;Ð;ñ #&Ó&¡#˜$ŒC�ŽI¡#Ñ&Ð&øô ô 	 Ø—:‘:“<Òð	 üâ&s   Á(B ÂB?ÂB<Â;B<c                óD   € V ^8„  d   QhR\         P                  R\        /# rÝ   ©rJ  rN  r  )rÄ   s   "rÅ   rÆ   rÆ   ¾  s    € ÷ &ñ &¤j×&CÑ&Cð &Ìñ &rÇ   c                ó¾   € \        V 4      pV'       g   R# \        P                  P                  V^ ,          P	                  RR4      4      P                  4       pVR9   # )z/True when the failed subprocess was git itself.FÚ\rg  >   Úgitúgit.exe)r¬  r  rv  Úbasenamer@  Úlower)rÞ   Úpartsrª  s   &  rÅ   Ú_called_process_error_is_gitr¶  ¾  sN   € ä+¨CÓ0€EßÙô �7‰7×Ñ˜E !�H×,Ñ,¨T°3Ó7Ó8×>Ñ>Ó@€DØÐ%Ñ%Ð%rÇ   c                óD   € V ^8„  d   QhR\         P                  R\        /# rÝ   r®  )rÄ   s   "rÅ   rÆ   rÆ   É  s"   € ÷ ñ Ü	×	&Ñ	&ðä	ñrÇ   c                ó  € \        V 4       Uu. uF  qP                  4       NK  	  ppV'       g   R# \        P                  P	                  V^ ,          P                  RR4      4      pRV9   d   R# RV9   d   RV9   g   VR9   d   R# R# u upi )	zDTrue when the failed subprocess was a uv/pip (or ensurepip) install.Fr°  rg  Ú	ensurepipTÚinstallÚpip>   Úuvr»  Úpip3úuv.exeúpip.exeúpip3.exe)r¬  r´  r  rv  r³  r@  )rÞ   r«  rµ  Úexes   &   rÅ   Ú+_called_process_error_is_python_dep_installrÂ  É  s}   € ô 'FÀcÔ&JÓKÑ&J˜d�Z‰ZŽ\Ñ&J€EÐKßÙÜ
�'‰'×
Ñ
˜5 �8×+Ñ+¨D°#Ó6Ó
7€CØ�eÔÙØ�EÔØ�Œ˜#Ð!WÔWáÙùò Ls   ŽB
c                óD   € V ^8„  d   QhR\         P                  R\        /# rÝ   )rJ  rN  rÑ   )rÄ   s   "rÅ   rÆ   rÆ   Ú  s    € ÷  ñ  ¤j×&CÑ&Cð  Ìñ  rÇ   c                óR   € \        V 4      '       d   R# \        V 4      '       d   R# R# )as  Name the update stage that actually failed.

The git pull and the Python-dependency install share one ``try`` in
``_cmd_update_impl``. Calling every ``CalledProcessError`` a git failure
(the historical Windows message) sent users hunting in the wrong place
and, worse, keyed the ZIP overlay on exception *type* rather than on git
actually having failed (#87304, #85840).
z Python dependency install failedzGit update failedzUpdate step failed)rÂ  r¶  rá   s   &rÅ   Ú_format_update_failure_stagerÅ  Ú  s#   € ô 3°3×7Ò7Ù1Ü# C×(Ò(Ù"ÙrÇ   c                ó0   € V ^8„  d   QhR\         R\        /# rÝ   )rß   r  )rÄ   s   "rÅ   rÆ   rÆ   ê  s   € ÷ ñ ¬mð Äñ rÇ   c                óü   € \        V \        P                  4      ;'       d\    \        4       P	                  4       ;'       d<    \        V 4      ;'       d)    \        P                  ! \        4       P                  4      # )u®  ZIP fallback is for Windows git file-I/O breakage, not later stages.

A dependency-install failure (locked ``hermes.exe`` / ``uv pip install``
exit 2) is not a git failure. The pull has already succeeded by then, so
re-downloading the source ZIP cannot fix the install and would replace
every top-level entry except ``venv`` / ``node_modules`` / ``.git`` /
``.env`` â€” permanently deleting uncommitted edits and untracked files.
)	rý   rJ  rN  rô   Ú_is_windowsr¶  Ú_commitÚrun_checkout_untouchedrI  rá   s   &rÅ   Ú$_should_zip_fallback_on_update_errorrË  ê  se   € ô 	�3œ
×5Ñ5Ó6÷ 	>ð 	>Ü‹D×ÑÓ÷	>ð 	>ä(¨Ó-÷	>ð 	>ô
 ×*Ò*¬2«4×+<Ñ+<Ó=ðrÇ   Úlimitc                óH   € V ^8„  d   QhR\         P                  R\        RR/# )rÂ   rÞ   rÌ  rÃ   N)rJ  rN  r—  )rÄ   s   "rÅ   rÆ   rÆ   ý  s*   € ÷ ñ Ü	×	&Ñ	&ðÜ25ðà	ñrÇ   c               ó�  € V P                   ;'       g    V P                  ;'       g    Rp\        V\        4      '       d   VP	                  RR4      p\        V4      P                  4        Uu. uF  q3P                  4       '       g   K  VNK  	  ppV'       g   R# \        R4       WA) R  F  p\        RV 24       K  	  R# u upi )zGPrint a captured stderr/stdout tail when the failing call recorded one.rA  r>  r@  Nz  Last output:ú    )	rB  r
  rý   r¦  r§  rÑ   r[  r  rX  )rÞ   rÌ  ÚblobÚlineÚliness   &$   rÅ   Ú _print_called_process_error_tailrÓ  ý  sœ   € ð �:‰:×)Ð)˜Ÿ™×)Ð) r€DÜ�$œ×ÒØ�{‰{˜7 IÓ.ˆÜ! $›i×2Ñ2Ô4ÓEÑ4�d¿
¹
¿�TˆTÑ4€EÐEßÙÜ	Ð
ÔØ�f�g“ˆÜ��T�FˆmÖó ùò	 Fs   Á.CÂ
Cc                ó   € V ^8„  d   QhRR/# r  rÊ   )rÄ   s   "rÅ   rÆ   rÆ     s   € ÷ ñ ¨ñ rÇ   c                  ó   € \        4        R # rÉ   r   rÊ   rÇ   rÅ   Ú_write_update_incomplete_markerrÖ    rÌ   rÇ   c                ó   € V ^8„  d   QhRR/# r  rÊ   )rÄ   s   "rÅ   rÆ   rÆ     s   € ÷ ñ ¨tñ rÇ   c                  ó   € \        4        R # rÉ   r   rÊ   rÇ   rÅ   Ú%_write_lazy_refresh_incomplete_markerrÙ    rÌ   rÇ   c                ó    € V ^8„  d   QhR\         \        \        \        3,          ,          R\         \        \        \        3,          ,          /# )rÂ   ÚmatchesrÃ   )rÐ   rd  r—  rÑ   )rÄ   s   "rÅ   rÆ   rÆ   #  s6   € ÷ ñ Ü”%œœS˜•/Õ"ðä	Œ%””S��/ÕñrÇ   c                 ó   € \        4        R # rÉ   r   )rÛ  s   &rÅ   Ú(_filter_non_gateway_concurrent_instancesrÝ  #  s
   € ô ÖrÇ   c                ó(   € V ^8„  d   QhR\         RR/# )rÂ   r<  rÃ   Nr  )rÄ   s   "rÅ   rÆ   rÆ   *  s   € ÷ ñ œ#ð  $ñ rÇ   c           	     ó$  € V '       g   R# \        4       P                  P                  p\        VRR4      p\	        \
        4      ;_uu_ 4        Vfo   ^ RIHp V! 4       R,          R,          pVP                  P                  RRR7       VP                  RR	R
7      ;_uu_ 4       pVP                  V 4       RRR4       M!VP                  V 4       VP                  4        RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)aü  Write ``text`` to ``~/.hermes/logs/update.log`` only, never the terminal.

During ``hermes update`` ``sys.stdout`` is an ``_UpdateOutputStream`` that
mirrors to both the terminal and ``update.log``. Loud, low-signal
subprocess output (npm installs, the Electron/vite build, the cua-driver
installer's "Next steps" wall) should be captured and tucked into the log
so failures stay debuggable, without flooding the user's terminal. This
reaches past the mirroring stream straight to the underlying log handle.
NÚ_log)rË   Úlogsz
update.logT)ÚparentsÚexist_okÚar>  r…  )rô   Úsysr
  r%  r   rå   rŠ  rË   ÚparentÚmkdirÚopenÚwriteÚflush)r<  ÚstreamÚlog_filerË   Úlog_pathÚfallbacks   &     rÅ   Ú_log_only_writerï  *  sÂ   € ÷ ÙÜ‹T�X‰X�_‰_€FÜ�v˜v tÓ,€HÜ	”)×	Õ	ØÒÝ@á.Ó0°6Õ9¸LÕHˆHØ�O‰O×!Ñ!¨$¸Ð!Ô>Ø—‘˜s¨W�×5Ô5¸Ø—‘˜tÔ$÷ 6Ð5ð �N‰N˜4Ô Ø�N‰NÔ÷ 
Ñ	÷ 6×5ú÷ 
×	Ð	ús%   ÁAC>Â%C+	Â7*C>Ã+C;Ã6C>Ã>D	r:  Úenvc               ó  € ^ RI p^ RIp^ RIHpHp \        Vf   \        P                  MT4      pVP                  RR4       \        P                  R8X  d
   RV! 4       /MR^ /p\        P                  ! V 3RVR	VR
\        P                  R\        P                  R\        P                  /VB p	VP                  VP!                  R4      ! R4      R4      p
. p  V	P"                  P%                  R4      pV
P'                  WÌ'       * R7      pVP)                  V4       \+        V4       V'       d   KY   \        P,                  ! Y	P/                  4       RP1                  T4      R7      T	P"                  P3                  4        #   \4         dZ    T! T	4       \7        \        P8                  4      ;_uu_ 4        T	P/                  ^R7       RRR4       h   + '       g   i     h ; ii ; i  T	P"                  P3                  4        i ; i)zOStream combined build output to update.log, retaining it for failure reporting.N)Úkill_process_treer5  ÚPYTHONUNBUFFEREDÚ1r¤  r7  Úprocess_groupr:  rð  Ústdinr
  rB  r>  r@  Ti    )ÚfinalrA  )r
  )r6  )ÚcodecsÚiorD  rò  r5  r÷   r  r  rG  rª  rJ  ÚPopenÚDEVNULLÚPIPEÚSTDOUTÚIncrementalNewlineDecoderÚgetincrementaldecoderr
  Úread1r§  Úappendrï  rL  ÚwaitÚjoinÚcloserß   r   rK  )rM  r:  rð  rø  rù  rò  r5  Ú	child_envÚspawnÚprocÚdecoderrC  Úchunkr<  s   &$$           rÅ   Ú_run_logged_subprocessr
  E  s®  € ãÛßSä 3¢;”R—Z’Z°CÓ8€IØ×ÑÐ+¨SÔ1Ü79·w±wÀ$´ˆ_Ñ0Ó2Ñ3È_Ð^_ÐL`€EÜ×ÒØñCØðCØ#ðCÜ+5×+=Ñ+=ðCä�‰ðCä'1×'8Ñ'8ðCà<AñC€Dð
 ×*Ñ*¨6×+GÑ+GÈÔ+PÐQZÓ+[Ð]aÓb€GØ€FðØØ—K‘K×%Ñ% dÓ+ˆEØ—>‘> %¬y�>Ó9ˆDØ�M‰M˜$ÔÜ˜DÔ!ß‘5ØÜ×*Ò*¨3·	±	³ÀBÇGÁGÈFÃOÔTð 	�‰×ÑÕøô ô á˜$ÔÜ”j×/Ñ/×0Õ0Ø�I‰I˜aˆIÔ ÷ 1à÷ 1Ö0àúðûð 	�‰×ÑÕús7   ÃAF Ä25F Æ4G&Æ6GÇ		G&ÇG"Ç	G&Ç&G) Ç)HÚchannelÚbranch_explicitc                ó$   € V ^8„  d   QhR\         /# rÁ   r  )rÄ   s   "rÅ   rÆ   rÆ   h  s   € ÷ =ñ =ÔQTñ =rÇ   c               óò   € V'       g   \        V RR4      '       d   R# Ve   TM\        V RR4      pVe   ^ RIHp V! V4      # ^ RIHp ^ RIHpHp V! V! 4       4      pV! V\        4       P                  4      # )zOExplicit branches win; otherwise transient channel, then this install's record.rS  Nrò   r  )Úvalidate_name)Úresolve_update_channel)Úget_config_pathÚ$require_readable_config_before_write)
r%  Úhermes_cli.release_channelsr  Úhermes_cli.update_channelr  rû   r  r  rô   rI  )	r&  r  r  Ú	transientr  r  r  r  r  s	   &$$      rÅ   Ú_source_update_channelr  h  sg   € çœ' $¨°$×7Ò7ÙØ"Ò.‘´G¸DÀ)ÈTÓ4R€IØÒÝ=Ù˜YÓ'Ð'Ý@çWá1±/Ó2CÓD€FÙ! &¬"«$×*;Ñ*;Ó<Ð<rÇ   c                ó0   € V ^8„  d   QhR\         R\        /# )rÂ   rS  r  r  )rÄ   s   "rÅ   rÆ   rÆ   x  s   € ÷ >Fñ >Fœcð >FÄñ >FrÇ   c          	     ój  € ^ RI HpHp V! \        4       P                  4      pVe4   \        VP                  4       V! V4       \        P                  ! ^4       \        4       P                  pVR,          P                  4       '       g"   \        R4       \        P                  ! ^4       \        4       p\        V4       \        P                  ! V4       \        W!R7      pV'       g   \        P                  ! W‡V4      p V f   R# \        P                   ! Wv4      p	\        P"                  ! YvY	'       d   RR.M. 4      w  r«V
P$                  ^ 8w  d.   \'        V
P(                  WvR7       \        P                  ! ^4       V	'       d   \        P*                  ! V4       \        P,                  ! WvV4      '       g@   \        R	V  R
VP/                  R^4      ^ ,           R24       \        P                  ! ^4       V	'       d   \        P0                  ! WvV4       R# \        P2                  ! WvV4       R# )aÒ  Implement ``hermes update --check``: fetch and report without installing.

``branch`` selects which branch the check compares against. Default is
"main"; callers can pass another branch to ask "are there new commits
on origin/<branch>?" without performing the update.

``branch_explicit`` is True iff the caller passed --branch on the CLI.
Installs that can't honor non-default branches (e.g. Docker) surface a
one-line notice instead of silently dropping the flag.
)Úevaluate_update_admissionÚrecord_refusal_receiptNú.gitu6   âœ— Not a git repository â€” cannot check for updates.)r  r  z--depthrô  ©r  rr  õ   âœ— Branch 'z' not found on rg  Ú.)Úhermes_cli.update_contractr  r  rô   rI  rX  Úmessagerå  Úexitro  Ú_base_git_cmdr  Ú_checkÚclear_git_debrisr  Úchannel_compare_branchÚis_shallow_repositoryÚfetch_compare_branchr	  rš   rB  Úrepair_shallow_graftsÚcompare_ref_existsr©  Úreport_shallow_verdictÚreport_rev_list_verdict)rS  r  r  r  r  Úrefusalrr  r  Úselected_channelÚ
is_shallowÚfetch_resultÚcompare_branchs   &$$         rÅ   Ú_cmd_update_checkr1  x  sš  € ÷ñ
 (¬«×(9Ñ(9Ó:€GØÒÜˆg�o‰oÔÙ˜wÔ'Ü�Š�Œä‹4×Ñ€DØ�6�M×!Ñ!×#Ò#ÜÐFÔGÜ�Š�Œä‹o€Gô ˜wÔ'Ü
×Ò˜DÔ!ä-°gÔ_ÐßÜ×.Ò.Ð/?È$ÓOˆØŠ>Ùô
 ×-Ò-¨gÓ<€JÜ#)×#>Ò#>Ø�v¶: 	¨3Ñ/À2ó$Ñ €Lð ×Ñ !Ô#Ü˜\×0Ñ0¸'ÕMÜ�Š�ŒßÜ×$Ò$ TÔ*ä×$Ò$ W°N×CÒCÜ�˜V˜H O°N×4HÑ4HÈÈaÓ4PÐQRÕ4SÐ3TÐTUÐVÔWÜ�Š�ŒßÜ×%Ò% g°^ÖDä×&Ò& w°nÖErÇ   c                ó:   € V ^8„  d   QhR\         \        ,          /# rÁ   )rÐ   rÑ   )rÄ   s   "rÅ   rÆ   rÆ   ¹  s   € ÷ ñ ”tœC•yñ rÇ   c                 ó:   € \         P                  R8X  d   . RO# R.# )zœ``git`` argv; Windows adds ``-c windows.appendAtomically=false`` (git can fail "unable to
write loose object file: Invalid argument" on non-atomic appends).Úwin32r±  )r±  z-czwindows.appendAtomically=false)rå  ÚplatformrÊ   rÇ   rÅ   r"  r"  ¹  s   € ô ‡|�|�wÔÚ>Ð>Øˆ7€NrÇ   c                ó$   € V ^8„  d   QhR\         /# rÁ   ©r  )rÄ   s   "rÅ   rÆ   rÆ   Á  s   € ÷ `ñ `¤Tñ `rÇ   c                 óT   € \        V R R.4      P                  P                  4       R8H  # )r_  z--is-shallow-repositoryÚtrue©r  r
  r  )r  s   &rÅ   Ú_is_shallow_checkoutr;  Á  s*   € Ü�G˜kÐ+DÐEÓF×MÑM×SÑSÓUÐY_Ñ_Ð_rÇ   c                ó^   € V ^8„  d   QhR\         R\         R\        \         \         3,          /# )rÂ   Ú
target_refÚbaserÃ   )rÑ   rd  )rÄ   s   "rÅ   rÆ   rÆ   Å  s.   € ÷ eñ e¤3ð e¬cð e¼uÄSÌ#ÀX½ñ erÇ   c                ól   a € \         ;QJ d    . V 3R lW!3 4       F  NK  	  5# ! V 3R lW!3 4       4      # )zR``(<base> sha, <target_ref> sha)`` as printed by rev-parse ("" when unresolvable).c              3   óp   <"  € T F+  p\        SR V.4      P                  P                  4       x € K-  	  R# 5i)r_  Nr:  ©Ú.0Úrefr  s   & €rÅ   Ú	<genexpr>Ú_tip_shas.<locals>.<genexpr>Ç  s1   øé € ÐdÑQcÈ#”˜' K°Ð#5Ó6×=Ñ=×CÑC×EÐEÓQcùs   ƒ36)rd  )r  r=  r>  s   f&&rÅ   Ú	_tip_shasrF  Å  s-   ø€ çŒ5ÔdÐRVÑQcÓd�5Ðdˆ5ÔdÐRVÑQcÓdÓdÐdrÇ   c                óB   € V ^8„  d   QhR\         R,          R\        RR/# )rÂ   ÚbehindNr0  rÃ   )r—  rÑ   )rÄ   s   "rÅ   rÆ   rÆ   Ê  s*   € ÷ 
Añ 
A¤s¨T¥zð 
AÄ3ð 
AÈ4ñ 
ArÇ   c           	     óÆ   € V ^ 8X  d   \        R4       R# V e    \        RT  RV ^8X  d   RMR RV R24       M\        R	V R
24       ^ RIHp \        RV! 4        R24       R# )zZReport ``--check``'s verdict: up to date, N commits behind, or behind by an unknown count.u   âœ“ Already up to date.Nu   â˜¤ Update available: Ú ÚcommitÚcommitsz behind r  u   â˜¤ Update available (behind ú).)Úrecommended_update_commandz  Run 'z' to install.)rX  rû   rN  )rH  r0  rN  s   && rÅ   Ú_print_update_check_resultrO  Ê  sr   € à�„{ÜÐ'Ô(ÙØÒÜÐ& v h¨a¸FÀa¼K±ÈYÐ/WÐW_Ð`nÐ_oÐopÐqÕräÐ-¨nÐ-=¸RÐ@ÔAÝ<Ü	ˆGÑ.Ó0Ð1°Ð
?Ö@rÇ   c                ó$   € V ^8„  d   QhR\         /# rÁ   rö   )rÄ   s   "rÅ   rÆ   rÆ   ×  s   € ÷ ñ Ôbfñ rÇ   c                ó  € ^ RI Hp \        P                  P	                  4       pVf4   \        P
                  ! 4        \        P                  P	                  4       pR^R\        \        4       P                  P                  4       4      R\        \        4       4      RRRTR	V P                  R
TR\        V RR4      RV P                  RTRV! \        P                  4      RVe   VP!                  4       MRRV! VP"                  4      RV/# )zGFreeze data before mutation; no pre-swap module objects cross the seam.©ÚdeepcopyNÚschemaÚsourcerš  rS  rò   ÚdesktopÚ
assume_yesÚgateway_modeÚno_gateway_restartFÚpre_update_versionr'  Úsibling_snapshotsÚplanÚreceiptÚwindows_resume)ÚcopyrS  r/  Ú_currentrü   Úbegin_update_receiptrÑ   rô   rI  Úresolver	   rW  r%  rZ  Ú_completion_configrs   Úto_dictÚdata)Úoptsr\  r'  r^  rV  rX  rS  Úcurrents   &&&&&&  rÅ   Ú_source_completion_requestrh  ×  sÝ   € åÜ!×*Ñ*×.Ñ.Ó0€GØ‚Ü×0Ò0Ô2Ü%×.Ñ.×2Ñ2Ó4ˆà�!�Xœs¤2£4×#4Ñ#4×#<Ñ#<Ó#>Ó?Ø””OÓ%Ó&¨°&¸)ÀWØ�d—o‘o ~°|Øœg dÐ,@À%ÓHØ˜d×5Ñ5°}ÀkØ™XÔ&8×&PÑ&PÓQØ $Ò"2�—‘”¸Ø‘8˜GŸL™LÓ)Ð+;¸^ð	ð 	rÇ   c                ó(   € V ^8„  d   QhR\         RR/# )rÂ   ÚrequestrÃ   Nrö   )rÄ   s   "rÅ   rÆ   rÆ   ê  s   € ÷ -ñ -¤Dð -¨Tñ -rÇ   c                ó    € ^ RI p^ RIHp VP                  \	        4       P
                  4       VP                  VP
                  4       RV R&   R# )a"  This run's post-commit resume attempt is over (the completion child's, or the A6 branch's).

A failure is already the ``windows_resume`` follow-up, so neither the command's ``finally``
nor the atexit net may replay it: a replay waits again and its error would fail a committed
update (C3).
N)Úupdate_cmd_windowsTÚwindows_resume_settled)Úatexitró   rl  Ú
unregisterrô   r/   )rj  rn  rl  s   &  rÅ   Ú_settle_windows_resumerp  ê  s@   € ó å-à
×Ñ”b“d×@Ñ@ÔAØ
×ÑÐ(×NÑNÔOØ(,€GÐ$Ó%rÇ   c                óP   € V ^8„  d   QhR\         R,          R\         R,          RR/# )rÂ   ÚtokenNrj  rÃ   rö   )rÄ   s   "rÅ   rÆ   rÆ   ú  s/   € ÷ @ñ @¬4°$­;ð @ÄÈÅð @ÐQUñ @rÇ   c                óF  € V '       d9   V P                  R4      '       d"   T;'       g    / P                  R4      '       d   R#  \        4       P                  V 4       R#   \         d7   p^ RIHp T! T'       d   TR,          R,          MRRRT 24        Rp?R# Rp?ii ; i)	a  The command's last resume of gateways it paused; a failure is reported, never raised.

Raising here would replace the run's own exit (a committed update's 0, or the original
failure) with the restart's error. Skipped when the post-commit attempt already ran.
Úresume_neededrm  N©Úowe_followupr]  Ú	update_idr^  ú!Windows gateway recovery failed: )rü   rô   r/   rå   r  rv  )rr  rj  rÞ   rv  s   &&  rÅ   Ú_resume_paused_gateways_at_exitry  ú  s†   € ÷ ˜Ÿ	™	 /×2Ò2°w·}°}À"×6IÑ6IÐJb×6cÒ6cÙð@Ü
‹×2Ñ2°5Ö9øÜô @Ý:á¿�W˜YÕ'¨Ö4ÀTÐK[Ø8¸¸Ð>÷	@ò 	@ûð@ús   ÁA ÁB Á*+BÂB c                ó6   € V ^8„  d   QhR\         R,          RR/# )rÂ   rj  NrÃ   rö   )rÄ   s   "rÅ   rÆ   rÆ     s&   € ÷ GGñ GG¤T¨D¥[ð GG°Tñ GGrÇ   c                 ó¢  € \        4       pV f    V'       d   \        V4       \        RR7       V'       d   WR&   ^ RIHp \
        P                  ! RV P                  R4      '       d   RMRV P                  RR	4      R
7       \
        P                  P                  4       pVe   V! VP                  4      V R&   \        V P                  R4      ;'       g    \        4       ;'       g    RR7       ^ RIHp Rp \        V 4      pT'       g9   TP                  R4      f&   TR,          ^‚8X  d   \
        P                   ! R4       MVT'       gO   TP                  R4      f<   TR,          '       d-   T! YP                  R4      ;'       g    RTR,           24      RrV\+        TP                  R4      T R,          R,          4       TP                  R4      ei   \
        P,                  ! TR,          4       \
        P                  P                  4       pTe*   \
        P                  P/                  TP0                  4       T R,          p	T	eS   TP                  R4      e@   \3        TR,          4      p
T	P5                  4        T	P7                  T
4       \9        T 4       MST	'       dL   T	P                  R4      '       d5   TR,          '       g&    \;        4       P=                  T	4       \9        T 4       TR,          '       d   \#        TR,          4      hT'       d   R #  \C        T 4      '       d   \        RT R,          R,           24       R # R #   \         d(   p\
        P                   ! R4       \#        ^‚4      ThR p?i\$         d.   pT! T \'        T4      P(                   RT 24      RrV R p?EL¬R p?ii ; i  \$         d-   p^ RIH p T! T R,          R,          RRT 24        R p?ELR p?ii ; i  \$         dR   p^ RIH p T! T R,          R,          R \E        T4      ;'       g    \'        T4      P(                  R!R"7        R p?R # R p?ii ; i)#NT)Ú
incompleteÚcompletion_messagerR  Úapplyr-  r,  Ú
apply_moder±  )Úmoder]  Úexpected_sharA  )r�  )Úsettle_lost_completionFz9KeyboardInterrupt: interrupted after the code was updatedú: Ú	exit_codez9the completion was interrupted after the code was updatedÚerrorzthe completion process exited Ú
pm_receiptrw  r^  rt  ru  rx  u!   â†’ Source subscription moved to Úchannel_retirementÚdestinationÚchannel_adoptionz(the next `hermes update` adopts it again)Úretry)#rq   rX  r   r_  rS  r/  r0  rü   r`  re  rV   r;   Úhermes_cli.update_completionr‚  r   ÚKeyboardInterruptÚ#finalize_interrupted_update_receiptÚ
SystemExitrå   rä   ré   Ú_accept_completion_pm_receiptÚadopt_terminal_receiptÚresetÚcurrent_tokenr÷   ÚclearÚupdaterp  rô   r/   r  rv  r   rÑ   )rj  Ú
unrestoredrS  rg  r‚  ÚlostrP  Ú	interruptrÞ   rr  Úresumedrv  s   &           rÅ   Ú_complete_source_updater™    s�  € ä-Ó/€JØ‚ßÜ�*ÔÜ TÕ*ßØ(2Ð$Ñ%ÝÜ×$Ò$Ø˜gŸk™kÐ*>×?Ò?‘ÀYÐU\×U`ÑU`ÐamÐotÓUuõwä!×*Ñ*×.Ñ.Ó0€GØÒÙ% g§l¡lÓ3ˆ�	Ñô (°W·[±[ÀÓ5P×5qÐ5qÔTiÓTk×5qÐ5qÐoqÕråCØ€Dð]Ü Ó(ˆ÷ �F—J‘J˜yÓ)Ò1°f¸[Õ6IÈSÔ6PÜ×?Ò?Ð@{Õ|ß�f—j‘j Ó+Ò3¸¸{×8KÔ8Kñ .Ø—Z‘Z Ó(×bÐbÐ.LÈVÐT_ÕM`ÐLaÐ,bódØeið ä! &§*¡*¨\Ó":¸GÀIÕ<NÈ{Õ<[Ô\Ø‡z�z�)ÓÒ(ô 	×2Ò2°6¸)Õ3DÔEÜ%×.Ñ.×2Ñ2Ó4ˆØÒÜ×(Ñ(×.Ñ.¨w×/DÑ/DÔEØÐ$Õ%€EØÒ˜VŸZ™ZÐ(8Ó9ÒEÜ�vÐ.Õ/Ó0ˆØ�‰ŒØ�‰�WÔÜ˜wÕ'ß	�5—9‘9˜_×-Ò-°f¸[×6IÔ6Ið	wÜ‹D×6Ñ6°uÔ=ô
 	˜wÔ'Øˆk×ÔÜ˜ Õ,Ó-Ð-ßÙðGÜ  ×)Ò)ÜÐ5°gÐ>RÕ6SÐTaÕ6bÐ5cÐdÖeñ *øôU ô -ä×?Ò?Ð@{Ô|Ü˜‹o 9Ð,ûÜô ]Ù-¨g¼$¸s»)×:LÑ:LÐ9MÈRÐPSÈuÐ7UÓVÐX\–ûð]ûô8 ô 	wÝ>á˜ Õ+¨KÕ8Ð:JÐNoÐpsÐotÐLu×vÒvûð	wûô ô GÝ:á�W˜YÕ'¨Õ4Ð6HÌ#ÈcË(×JhÐJhÔVZÐ[^ÓV_×VhÑVhØE÷	Gó 	GûðGús[   Ã9M ËN8 Ì-O2 ÍN5Í"M:Í:N5ÎN5Î"N0Î0N5Î8O/Ï!O*Ï*O/Ï2QÏ=AQ	Ñ	Qr=  c                ó(   € V ^8„  d   QhR\         RR/# )rÂ   rS  rÃ   Nr  )rÄ   s   "rÅ   rÆ   rÆ   U  s   € ÷ Bñ B´#ð BÐ\`ñ BrÇ   c          
     ól  € Ve   TMRV 2p\        V RR.4      P                  ;'       g    RP                  4       pV'       dÆ   WQ8w  dÀ   \        RV RV R24       \        V R	R
\        P
                  ! R4       2.4       \        V RRV.4      P                  ^ 8w  di   \        V RR.4       \        R4       \        R\        4       P                   RV 24       \        R4       \        R4       \        P                  ! ^4       R# \        V RRV.4      p\        VP                  ^ 8H  ;'       d    VP                  P                  4       4      pV'       Ed)   ^ RIHpHp	 V'       d   RMRp
RV
 RV RVP                  \         4      P                  R4       RVR,           2pV'       d   RV R2MRV R2p\        V R W².4      P                  ^ 8X  dz   \        V R!V R"\"         R#24       V'       dY   \        V R$R%RV R&V 2.4      P                  ;'       g    RP                  4       p\        R'T;'       g    R( R)V R*V R&V 24       M\        V R+V R,V R-24       \%        V \        4       P                  V4       \        R.4       \        V R/R0V.4      pVP                  ^ 8w  d‡   \        R1V R224       VP&                  P                  4       '       d'   \        R3VP&                  P                  4        24       \        R4V 24       \        R54       \        P                  ! ^4       R# R# )6a�  Reconcile a proven non-fast-forwardable checkout.

The caller must first establish that HEAD is not an ancestor of the update target; ordinary
fast-forward failures (locks, object transport errors) must never reach this destructive path.
Merge on a custom branch (local commits survive) or reset --hard on the same branch after
parking the old HEAD behind a rescue ref. ``sys.exit(1)`` on failure.Núorigin/rS  z--show-currentrA  u$     âš  Checkout is on custom branch 'u   ' â€” merging origin/z1 instead of resetting so local commits survive...Útagzpre-update-z%Y%m%d-%H%M%SÚmergez	--no-editz--abortu^   âœ— Merge conflict between local commits and upstream â€” update stopped, nothing was changed.z  Resolve manually: cd z && git merge origin/z2  Then re-run the update. Local work is untouched.Úmerge_conflictú
merge-baser`  )ÚdatetimeÚtimezoneÚdivergedÚorphanzrefs/hermes-update-backups/Ú-:Né   Nu-     âš  Local history has diverged from origin/u    â€” u:     âš  Local history shares no common ancestor with origin/u    (orphan divergence) â€” ú
update-refzbacked up current HEAD to z- before resetting. This backup expires after z days.úrev-listú--countú..rÏ  ÚSomez commit(s) not on origin/z2 leave the branch; list them with: git log origin/z%attempted to back up current HEAD to zB before resetting, but the backup write failed (pre-reset SHA was rM  uP     âš  Fast-forward not possible (history diverged), resetting to match remote...r‘  ú--hardu   âœ— Failed to reset to origin/r  ú  z<  Try manually: git fetch origin && git reset --hard origin/Úcheckout_move_failed)r  r
  r  rX  r’  Ústrftimer	  rô   rI  r   rå  r!  r  r¡  r¢  Únowr¿   rˆ   r�   rB  )r  rS  Úpre_pull_shar=  Ú	merge_refÚ_cur_branchÚmerge_base_resultÚhas_common_ancestorÚ_dtr¢  ÚkindÚ
rescue_refÚheadÚdroppedÚreset_results   &&&$           rÅ   Ú_reconcile_diverged_checkoutr¼  U  sa  € ð )Ò4‘
¸GÀFÀ8Ð:L€IÜ˜G hÐ0@Ð%AÓB×IÑI×OÐOÈR×VÑVÓX€Kß�{Ô,ÜØ2°;°-ð @Ø$˜XÐ%VðXô	Yô 	�˜5 K´·²¸Ó0OÐ/PÐ"QÐRÔSÜ�G˜g {°IÐ>Ó?×JÑJÈaÔOÜ�W˜w¨	Ð2Ô3ÜÐrÔsÜÐ+¬B«D×,=Ñ,=Ð+>Ð>SÐTZÐS[Ð\Ô]ÜÐFÔGÜÐ)Ô*Ü�HŠH�QŒKÙô
 ! ¨<¸ÀÐ*KÓLÐÜØ×$Ñ$¨Ñ)×NÐNÐ.?×.FÑ.F×.LÑ.LÓ.NóPÐç€|ß6ç0‰z°hˆà)¨$¨¨q°°¸Ø�w‰w”s‹|×$Ñ$ _Ó5Ð6°a¸ÀSÕ8IÐ7JðLð 	÷
 #ð <¸F¸8À5ÑIàHÈÈÐPiÐjð 	ô �G˜l¨JÐEÓF×QÑQÐUVÔVÜØ�&Ð2°:°,ð ?-Ü-LÐ,MÈVðUôV÷ #Ü#Ø˜j¨)°w¸v¸hÀbÈÈÐ5WÐXóZßZ`ÑZ`÷gð gØdf×hmÑhmÓhoð ä˜˜W×.Ð.¨Ð/Ð/HÈÈð Q8Ø8>°x¸rÀ*ÀðOô Pøô Ø�&Ð=¸j¸\ð JBØBNÀÈrðSôTô 	" '¬2«4×+<Ñ+<¸fÔEÜ	Ð
\Ô]Ü˜G g¨x¸Ð%CÓD€LØ×Ñ !Ô#ÜÐ.¨v¨h°aÐ8Ô9Ø×Ñ×$Ñ$×&Ò&Ü�B�|×*Ñ*×0Ñ0Ó2Ð3Ð4Ô5ÜÐLÈVÈHÐUÔVÜÐ+Ô,Ü�Š�Žñ $rÇ   Úrollback_branchÚ_windows_gateway_resumec                ó   € V ^8„  d   QhRR/# r  rÊ   )rÄ   s   "rÅ   rÆ   rÆ   š  s   € ÷ Rñ RÐvzñ RrÇ   c          	     óÆ  € \        \        4       P                  4      R,          pVP                  4       '       dn   \        P
                  ! VP                  4       4      '       dD   \        P                  ! \        4       P                  \        4      pVRJ .T;'       g    RO5w  rgpM \        \        4       P                  4      w  rgpV'       g   \        WWxVVR7       R# R# )z£Post-pull syntax guard: roll back to *pre_pull_sha* and ``sys.exit(1)`` when a critical
file no longer compiles (a bad admin-merge past CI must not brick the CLI).zpyproject.tomlN©r½  r¾  )NN)r   rô   rI  Úis_filerÉ  Úrequires_other_pythonÚ
read_bytesÚtree_syntax_errorrz  r{  Ú_roll_back_broken_update)	r  r±  r½  r¾  Ú	pyprojectÚbrokenÚ	syntax_okÚfailing_pathÚsyntax_errors	   &&$$     rÅ   Ú _rollback_if_pulled_syntax_errorrÌ  š  s±   € ô ”R“T×&Ñ&Ó'Ð*:Õ:€IØ×Ñ×Òœw×<Ò<¸Y×=QÑ=QÓ=S×TÒTä×*Ò*¬2«4×+<Ñ+<Ô>TÓUˆØ17¸4°Ð0[À6×CYÐCYÈ\Ñ0[Ñ-ˆ	¡ä0OÔPRÓPT×PaÑPaÓ0bÑ-ˆ	 ßÜ  ¸ÐdsØ9P÷	Rñ rÇ   Úheaderu6   âœ— Pulled code has a syntax error in a critical file:Ú
stop_classÚsyntax_rollbackc                ó$   € V ^8„  d   QhR\         /# rÁ   r   )rÄ   s   "rÅ   rÆ   rÆ   ©  s   € ÷ Iñ Iä\dñIrÇ   c          
     ó¾  € \        4        \        V4       \        RV 24       V'       d!   \        V4      P                  4       R,          MR& F  p\        RV 24       K  	  \        4        V'       EdO   \        4       P                  p	VR'9  p
\        RV
'       d   TMVR,           R24       Vf   R	MR
p\        W	4      p \        P                  ! W	WRVR7       \        Wa4      ;_uu_ 4        \        P                  ! W	W4      pVR
8X  d   RRRV.p\        W4      pVR	8X  g   XP                  ^ 8X  d   RRV.p\        W4      pVP                  ^ 8X  dW   RRV.p\        W4      pVP                  ^ 8X  d6   \        P                  ! Wž4      '       g   \        P                   ! V^RR4      pVP                  ^ 8X  dA   \        P"                  ! W	V4      '       g$   \        P                   ! X^RRVR,           24      pVP                  ^ 8w  d6   \        P$                  ! V	4      '       d   \        P                   ! X^ RR4      pVP                  ^ 8X  d5   V
'       d-   \        V RV.4      P                  ^ 8w  d   \        RV R24       RRR4       XP                  ^ 8X  dI   \'        V	4      P)                  RR7       \        P*                  ! 4        \        R4       \        R4       EM\        R4       \        RV	 R\,        P.                  ! X4       24       VP0                  P3                  4       '       d=   \        R VP0                  P3                  4       P                  4       ^ ,           R!24       \'        V	4      P5                  4       '       d-   \        P6                  ! W‘4       \        R"VR,           R#24       M,\        R$4       \        R\        4       P                   R%24       \9        V4       \:        P<                  ! ^4       R#   \        \        P                  3 d   p\        RT R24        Rp?ELfRp?ii ; i  + '       g   i     ELÉ; i)(zjRestore the checkout to *pre_pull_sha* after a startup file failed the syntax check, then
``sys.exit(1)``.r­  :Né   NrÏ  Nr`  u   â†’ Rolling back to ºNé
   Nú...rS  Údetach)ÚpreÚtargetÚstashÚrollbacku3     âš  Could not write the interrupted-pull marker (z); rolling back without it.r§  z
--no-derefr‘  ú-qr¬  rA  z1could not remove the broken release's added fileszthe checkout is not whole at Úcheckoutu     âœ— Could not check out z ; restoring its commit detached.Tr�  u6     âœ“ Rollback complete â€” your install is unchanged.z5  Try ``hermes update`` again later once a fix lands.u-     âœ— Rollback failed. Recover manually with:z    cd z && git z    (r‡  z9  The next `hermes` launch also finishes the rollback to z on its own.u;     Could not capture pre-pull SHA â€” recover manually with:z- && git reflog && git reset --hard <prev-sha>rÊ   )Nr`  )rX  rÑ   r[  rô   rI  ra  rÉ  Úarm_tree_moverY  rJ  rZ  r   Úfiles_added_byr  r	  Údrop_added_filesrL  Útree_whole_atÚsettle_failed_tree_mover   r�  Údisarm_commit_obligationsr¨  r  rB  r  rÂ  Úowe_restore_ofr   rå  r!  )r  r±  rÊ  rË  r½  rÍ  r¾  rÎ  rÑ  rr  Úparkedr€  Ú
target_sharÞ   ÚaddedÚrollback_argsÚrollback_results   &&&&$$$$         rÅ   rÆ  rÆ  ©  sÂ  € ô
 
„GÜ	ˆ&„MÜ	ˆBˆ|ˆnÐ
Ôç6B”�LÓ!×,Ñ,Ó.¨rÖ2ÈÒJˆÜ��T�FˆmÖñ Kä	„Gß€|ô ‹t× Ñ ˆØ ¨Ñ6ˆÜÐ$¿¡_ÀLÐQTÕDUÐ$VÐVYÐZÔ[ð
 +Ò2‰x¸ˆÜ& wÓ5ˆ
ð	jÜ×!Ò! '°\Ð\`ÐkoÕpô Ð3×BÕBÜ×*Ò*¨7¸,ÓSˆEØ�xÔØ!-¨|¸VÀ\Ð R�Ü"*¨7Ó"B�Ø�xÔ ?×#=Ñ#=ÀÔ#BØ!(¨$°Ð =�Ü"*¨7Ó"B�Ø×)Ñ)¨QÔ.Ø!(¨(°LÐ A�Ü"*¨7Ó"B�Ø"×-Ñ-°Ô2¼7×;SÒ;SÐTX×;`Ò;`Ü&0×&AÒ&AØ% q¨"Ð.aó'c�Oà×)Ñ)¨QÔ.´w×7LÒ7LÈWÐ\h×7iÒ7iä",×"=Ò"=Ø! 1 bÐ,IÈ,ÐWZÕJ[ÐI\Ð*]ó#_�à×)Ñ)¨QÔ.´7×3RÒ3RÐSW×3XÒ3XÜ",×"=Ò"=¸mÈQÐPRÐTVÓ"W�Ø×)Ñ)¨QÔ.·6ô ˜G j°/Ð%BÓC×NÑNÐRSÔSÜÐ6°Ð6GÐGgÐhÔi÷1 Cð2 ×%Ñ%¨Ô*Ü# DÓ)×0Ñ0¸DÐ0ÔAÜ×-Ò-Ô/ÜÐJÔKÜÐIÖJäÐAÔBÜ�G˜D˜6 ¬%¯*ª*°]Ó*CÐ)DÐEÔFØ×%Ñ%×+Ñ+×-Ò-Ü˜˜o×4Ñ4×:Ñ:Ó<×GÑGÓIÈ!ÕLÐMÈQÐOÔPÜ& tÓ,×4Ñ4×6Ò6Ü×&Ò& tÔ:ÜÐQÐR^Ð_bÕRcÐQdÐdpÐqÔrøäÐKÔLÜ�œ›×)Ñ)Ð*Ð*WÐXÔYÜ�ÔÜ‡H‚HˆQ†Køô_ œ×3Ñ3Ð4ô 	jô ÐGÈÀuÐLgÐh×iÒiûð	jú÷
 C×BÐBús1   ÃP Ã0D<QÈ-1QÉ,QÐQÐ.QÑQÑQ	ÚmergedTc                óJ   € V ^8„  d   QhR\         R\        R\         R,          /# )rÂ   rå  ré  rÃ   Nr  )rÄ   s   "rÅ   rÆ   rÆ   õ  s&   € ÷ *ñ *¬Cð *¼Dð *ÌCÐRVÍJñ *rÇ   c               óæ   € \        V . RO4      P                  ;'       g    RP                  4       pW18X  g/   V'       d)   V'       d!   \        V RRW.4      P                  ^ 8X  d   R# T;'       g    R# )z½The HEAD a git move landed on when it is neither ``target_sha`` nor (``merged``: a custom
branch's merge) a commit containing it, else None: the identity the marker and debt were armed for.rA  r   ú--is-ancestorNzan unreadable HEAD)r_  rÛ  ú--verifyr`  )r  r
  r  r	  )r  rå  ré  Úlandeds   &&$ rÅ   Ú_landed_off_targetrï  õ  sg   € ô �wÒ GÓH×OÑO×UÐUÐSU×\Ñ\Ó^€FØÔ§¯6´hØ�l O°ZÐHó7JßJTÉ*ÐXYô7ZáØ×)Ð)Ð)Ð)rÇ   c                óB   € V ^8„  d   QhR\         R\         R,          RR/# )rÂ   rå  ÚunmovedNrÃ   r  )rÄ   s   "rÅ   rÆ   rÆ   ÿ  s%   € ÷ ñ ´ð ¼sÀT½zð Èdñ rÇ   c                ó´   € \        W4      ;pRV39  dD   \        RVR,           RVR,           R24       \        R4       \        P                  ! ^4       R# R# )zñ``sys.exit(1)`` (the caller settles it as a failed move, its marker still on disk) when git
landed on a commit other than the armed one (review O2/O3). A HEAD still on ``unmoved`` is
``_verify_head_after_pull``'s "code did not move" refusal.Nu   âœ— The checkout landed on rÓ  z, not the selected commit z! (a ref moved during the update).Ú
head_moved)rï  rX  r   rå  r!  )r  rå  rñ  rî  s   &&& rÅ   Ú_refuse_unselected_headrô  ÿ  s`   € ô % WÓ9Ð9ˆÀ4ÈÀ/ÔQÜÐ+¨F°3­K¨=Ð8RÐS]Ð^aÕSbÐRcð d1ð 1ô 	2ä�\Ô"Ü�Š�Žñ	 RrÇ   c                ó$   € V ^8„  d   QhR\         /# rÁ   r  )rÄ   s   "rÅ   rÆ   rÆ   
  s   € ÷ nñ n¤sñ nrÇ   c                 ó0   € R V P                   R,           R2# )u   âœ— upstream/main (rÓ  z;) has a syntax error in a critical file; it was not merged:)Úsha)rÈ  s   &rÅ   Ú_upstream_broken_headerrø  
  s   € Ø  §¡¨C¥Ð 1Ð1lÐmÐmrÇ   c                ó†   € Ve3   V'       d+   V'       d#   \        V RRWA.4      pVP                  ^ 8w  d   V# T;'       g    T# )zHDistinguish a branch awaiting repair from an already-applied early sync.r   rì  )r  r	  )r  r±  Úpre_sync_shar½  rå  Úcontains_targets   &&&&& rÅ   Ú_update_movement_baselinerü    sG   € àÒ"§|¿
ô #Ø�l O°ZÐNóPˆà×%Ñ%¨Ô*ØÐØ×'Ð'˜<Ð'rÇ   c                ó0   € V ^8„  d   QhR\         R\         /# )rÂ   rC  rÃ   r  )rÄ   s   "rÅ   rÆ   rÆ     s   € ÷ jñ j¤3ð j¬3ñ jrÇ   c                ól   € \        V RRRV R2.4      P                  ;'       g    RP                  4       # )z9The commit *ref* names now, or ``""`` when it names none.r_  rÛ  rí  ú	^{commit}rA  r:  )r  rC  s   &&rÅ   Ú_resolved_commitr     s7   € ä�W˜{¨D°*ÀÀÀ[Ð>QÐRÓS×ZÑZ×`Ð`Ð^`×gÑgÓiÐirÇ   c                ó   € V ^8„  d   QhRR/# r  rÊ   )rÄ   s   "rÅ   rÆ   rÆ      s   € ÷ "ñ "Ètñ "rÇ   c                ón  € VRV 28w  d3   \        V \        4       P                  V4       \        V RRV.RR7       R# \        V RRV.4      pVP                  ^ 8X  d   R# \        V R	R
RV.4      pVP                  ^8X  d   \        WWCR7       R# \        R4       VP                  ;'       g    VP                  ;'       g    RP                  4       pV'       d   \        RV 24       VP                  ^ 8X  d   \        RV R24       M]\        RV R24       VP                  ;'       g    VP                  ;'       g    RP                  4       pV'       d   \        RV 24       \        R4       ^ RI
Hp	 \        V	! VR.VP                  4      ;'       g    R4       \        P                  ! ^4       R# )zWThe principal pull's one checkout move onto *target_sha*; exits when it cannot be made.rœ  rÜ  z--detachT©r2  Nrž  z	--ff-onlyr   rì  r`  )r=  uU   âœ— Fast-forward failed; refusing to reset because history divergence was not proven.rA  r­  z  HEAD is still an ancestor of r  z2  Could not verify whether HEAD is an ancestor of zK  Resolve the Git error and re-run `hermes update`; no reset was attempted.)Úgit_output_stop_classr®  )r˜   rô   rI  r  r	  r¼  rX  rB  r
  r  r  r  r   rå  r!  )
r  rS  r²  rå  r±  Úmerge_resultÚancestryr  Úancestry_detailr  s
   &&&&&     rÅ   Ú_move_checkout_tor     s~  € ð
 �g˜f˜XÐ&Ô&ô 	˜G¤R£T×%6Ñ%6¸Ô?Ü�˜: z°:Ð>ÀdÕKÙÜ˜G g¨{¸JÐ%GÓH€LØ×Ñ !Ô#ÙÜ˜ ,°ÀÈÐ!TÓU€HØ×Ñ˜aÔÜ$ W°lÕZÙÜ	Ð
aÔbØ×!Ñ!×>Ð> \×%8Ñ%8×>Ð>¸B×EÑEÓG€FßÜ��6�(ˆmÔØ×Ñ˜aÔÜÐ/°	¨{¸!Ð<Õ=äÐBÀ9À+ÈQÐOÔPØ#Ÿ?™?×CÐC¨h¯o©o×CÐCÀ×JÑJÓLˆßÜ�B�Ð'Ð(Ô)Ü	Ð
WÔXÝ?ô Ñ& v°¨y¸,×:QÑ:QÓR×lÐlÐVlÔmÜ‡H‚HˆQ†KrÇ   rú  Úsync_upstreamrW  Úin_place_updater�  c               óø	  € Rp\        V \        4       P                  4      p\        \        4       P                  4      pVe   TMRV 2p \	        V RRRV R2.4      P
                  ;'       g    RP                  4       p\        V4      '       g1   \        R	V R
24       \        R4       \        P                  ! ^4       \        V VW‰V4      pV'       dL   VV8w  dE   \        RV RVR,           RVR,           R24       \        R4       \        P                  ! ^4       \        P                  ! V \        4       P                  VVVVR7      pV'       d1   \        RV R24       \        R4       \        P                  ! ^4        \        VV4      ;_uu_ 4        \!        WVVV4       RRR4       \#        V VV4       TP/                  RR7       T
'       dI   \1        YTTTR7        \        4       P3                  T \        4       P                  Y´\5        T4      R7       \1        YTTTR7       \A        Y;'       g    TT	TR7       T
'       d   \C        T \        4       P                  4       RpTeÂ   T'       g'   \        RT R24       \        R4       \E        4        T# T'       d0   \        4       PG                  T \        4       P                  T4       T# T'       d   \        4       PI                  T4       T# \        4       PK                  T \        4       P                  Y#T\5        T4      R7       T#   + '       g   i     EL–; i  \$         d    h \&         dp    \        P(                  ! \        4       P                  4      '       d   \        P*                  ! 4        h \        P,                  ! \        4       P                  T4       h i ; i  \6         dS   p\1        YTTTR7       \9        Y;'       g    TTP:                  TP<                  T	\?        T4      TR7        Rp?EL
Rp?ii ; i  TeÀ   T'       g&   \        RT R24       \        R4       \E        4        i T'       d/   \        4       PG                  T \        4       P                  T4       i T'       d   \        4       PI                  T4       i \        4       PK                  T \        4       P                  Y#T\5        T4      R7       i i ; i)a  Fast-forward onto ``origin/<branch>`` and settle the autostash. Divergence by shape:
custom branch -> merge, same branch -> rescue ref then reset; a
post-pull syntax error in a critical file rolls back. Exits on failure; returns the SHA HEAD had to move off.FNrœ  r_  rÛ  rí  rÿ  rA  u   âœ— Could not resolve z$ to a commit. No update was applied.Útarget_unresolvedõ   âœ— z resolves to rÓ  z", not the selected channel commit z. No update was applied.ró  ©r×  rØ  rÙ  r  Úcommit_point_refusedTr�  ©r
  r¾  ©rW  Úinput_fnÚcheckout_move)r½  rÍ  r¾  rÁ  õ1     â„¹ï¸�  Local changes preserved in stash (ref: r‡  ú(  Restore manually with: git stash apply©Úprompt_userr  r  )&ra  rô   rI  r   r  r
  r  r   rX  r   rå  r!  rü  rÉ  Úarm_commit_pointr   r  rô  rŒ  rß   rá  râ  rã  r�  Ú_verify_head_after_pullr¡   r   r¢   rÆ  rv  r…  rø  rÌ  rž   rf   rg   ri   rm   )r  rS  Úauto_stash_refÚprompt_for_restoreÚgw_input_fnÚdiscard_local_changesÚ
keep_stashr=  rú  r½  r	  rW  r
  r¾  r�  Úupdate_succeededr±  Úpull_markerr²  rå  Úmovement_baselineÚrefusedrÈ  s   &&&$$$$$$$$$$$$        rÅ   Ú_pull_updatesr#  E  si  € ð Ðô % W¬b«d×.?Ñ.?Ó@€Lô *¬"«$×*;Ñ*;Ó<€Kà(Ò4‘
¸GÀFÀ8Ð:L€IðU]Ü˜w¨°d¸JÈ9È+ÐU`ÐHaÐ(bÓc×jÑj÷ ð ØŸU™U›Wð 	ä˜J×'Ò'äÐ*¨9¨+Ð5YÐZÔ[ÜÐ,Ô-Ü�HŠH�QŒKÜ5Ø�\ <À*óNÐç˜J¨,Ô6ä�D˜˜ =°¸CµÐ0AÐAcØ! #Õ&Ð'Ð'?ðAô Bä˜Ô&Ü�HŠH�QŒKä×*Ò*¨7´B³D×4EÑ4EÀzÐWcØ2<ÀNôTˆçÜ�D˜˜	 Ð#Ô$ÜÐ/Ô0Ü�HŠH�QŒKð	äÐ 7¸×DÕDÜ! '°9¸jÈ,ÔW÷ Eä# G¨Z¸ÔFð 	×Ñ dÐÔ+ßô $ØÐ!2ÀOØ(?õAð
ZÜ“×2Ñ2ØœR›T×.Ñ.¸:Ü",Ð-DÓ"Eð 3ô Gô 	 ØÐ.ÀØ$;õ	=ô 	)Ø×1Ð1 \À?Ø$;õ	=÷ ä˜g¤r£t×'8Ñ'8Ô9ØÐàÒ%ç#ÜÐIÈ.ÐIYÐYZÐ[Ô\ÜÐ@ÔAÜ(Ô*ð Ð÷ 'ä“×-Ñ-¨g´r³t×7HÑ7HÈ.ÔYð Ð÷ ä“×*Ñ*¨>Ô:ð
 Ðô “×-Ñ-ØœR›T×.Ñ.°Ø(¼
ÐCZÓ8[ð .ô ]ð Ð÷{ E×DÐDûô !ô 	ØÜô 		ô
 ×.Ò.¬r«t×/@Ñ/@×AÒAÜ×1Ò1Ô3ð ô ×&Ò&¤r£t×'8Ñ'8¸,ÔGØð		ûô* (ô ZÜ'ØÐ%6ÈØ,CõEô )¨×2NÐ2NÀ,ÐPV×P[ÑP[Ð]c×]iÑ]iØ9HÔQhÐioÓQpØAX÷Zó Zûð	Zûð& Ò%ç#ÜÐIÈ.ÐIYÐYZÐ[Ô\ÜÐ@ÔAÜ(Õ*ß&ä“×-Ñ-¨g´r³t×7HÑ7HÈ.ÕYßä“×*Ñ*¨>Õ:ä“×-Ñ-ØœR›T×.Ñ.°Ø(¼
ÐCZÓ8[ð .õ ]ð &ús”   Á
#P4 Á.DP4 ÆM ÆL8Æ+M Ç P4 ÇP4 Ç*8O È".P4 É P4 Ì8M		Í	M ÍOÍ!A0OÏP4 ÏP1ÏAP,Ð&P4 Ð,P1Ð1P4 Ð4S9Ñ,S9Ñ.5S9Ò$AS9r  Ú	ref_movedc               ó  a € \        4       P                  pV 3R lpV! RV 24      V! RV 24      r‡RRV.V3RRY;'       g    RV 2.V3.p	Rp
V	 EF¼  w  r¼V'       g9   W¹^ ,          ^ ,          J d   K#  \        P                  ! 4        \	        S V4      u # \        P
                  ! S W\W<VR7      pV'       d    \        P                  ! \        ^R	V4      u #  \	        S V4      p
T
P                  ^ 8X  d²   \        S TR
R7      ;pe    \        RTR,           RTR,           R24       \        P                  ! T4      '       d   \        P                  ! 4        M\        P                  ! YS4       \        P                  ! \         ^T
P"                  RT RTR,           R24      u # T
P                  ^ 8X  d    \%        T4      P'                  RR7       T
u # \        P                  ! T4      '       d   EK¥  \        P                  ! YS4       T
u # 	  \        P                  ! 4        V
#   \         d    h \         dK    \        P                  ! T4      '       d   \        P                  ! 4        h \        P                  ! YS4       h i ; i)z°CP0: switch the parked checkout to *branch* under the interrupted-pull marker and the armed
obligations, so a kill mid-switch is restored by the next launch like a killed pull.c                 ón   <€ \        SR RRV  R2.4      P                  ;'       g    RP                  4       # )r_  rÛ  rí  rÿ  rA  r:  )rC  r  s   &€rÅ   rb  Ú/_switch_branch_at_commit_point.<locals>.resolve»  s8   ø€ Ü˜ ;°°jÀSÀEÈÐBUÐ"VÓW×^Ñ^×dÐdÐbd×kÑkÓmÐmrÇ   úrefs/heads/rœ  rÜ  z
--no-guessz-BNr  rA  F)ré  u     âœ— The branch moved to rÓ  z after z was selected.Ú'z' moved to z* during the switch; re-run `hermes update`Tr�  )rô   rI  rÉ  râ  r  r  rJ  rL  Ú_ARM_REFUSEDrŒ  rß   rá  rã  r	  rï  rX  Ú
_REF_MOVEDr
  r   r�  )r  rS  r=  r×  rÙ  rr  rb  ÚlocalÚremoteÚattemptsrP  r&  rØ  r"  rî  s   f&&$$          rÅ   Ú_switch_branch_at_commit_pointr/  ¶  sK  ø€ ô ‹4×Ñ€Dõnñ ˜k¨&¨Ð2Ó3±W¸wÀvÀhÐ=OÓ5Pˆ6Ø˜l¨FÐ3°UÐ;Ø˜d F×,HÐ,H¸À¸xÐ6HÐIÈ6ÐRðT€Hà€FÜ ‰ˆßØ •{ 1•~Ó%ÙÜ×-Ò-Ô/Ü˜G TÓ*Ò*ô ×*Ò*¨7°DÀcÐ`eÔfˆßÜ×.Ò.¬|¸QÀÀGÓLÒLð		Ü˜g tÓ,ˆFð ×Ñ Ô!Ô1CÀGÈVÐ\aÔ1bÐ'b vÒ&oô Ð.¨v°c­{¨m¸7À6È#Å;À-È~Ð^Ô_Ü×.Ò.¨t×4Ò4Ü×1Ò1Õ3ä×&Ò& tÔ1Ü×.Ò.¬z¸1¸f¿m¹mØ�F�8˜; v¨c¥{ mÐ3]Ð^óaò aà×Ñ Ô!Ü# DÓ)×0Ñ0¸DÐ0ÔAØŠMÜ×.Ò.¨t×4Õ4Ü×"Ò" 4Ô-ØŠMñI !ôL ×%Ò%Ô'Ø€Møô5 !ô 	ØÜô 	Ü×.Ò.¨t×4Ò4Ü×1Ò1Ô3ð ô ×&Ò& tÔ1Øð	ús   ÃH(È(JÈ=JÉ.Jc                ó   € V ^8„  d   QhRR/# r  rÊ   )rÄ   s   "rÅ   rÆ   rÆ   ð  s   € ÷ ñ ÐQUñ rÇ   c                ód  € \         P                  ! V \        4       P                  V\        4      pVf2   ^ RIHp V! V \        4       P                  V4      pVe   \        R4       Vf   R# \        V4       \        R4       \        4       P                  V4       \        P                  ! ^4       R# )zRPreconditions that used to fail AFTER the swap: refuse with the install untouched.N)Údowngrade_refusalÚdowngrade_refusedz3  No update was applied; your install is unchanged.)rÉ  Úpreflight_refusalrô   rI  rz  Ú!hermes_cli.update_downgrade_guardr2  r   rX  r/   rå  r!  )r  r=  r¾  r  r2  s   &&&  rÅ   Ú_refuse_before_commit_pointr6  ð  s‚   € ä×&Ò& w´³×0AÑ0AÀ:ÔOeÓf€FØ‚~ÝGÙ" 7¬B«D×,=Ñ,=¸zÓJˆØÒÜÐ,Ô-Ø‚~ÙÜ	ˆ&„MÜ	Ð
?Ô@ÜƒD×.Ñ.Ð/FÔGÜ‡H‚HˆQ†KrÇ   c                ó$   € V ^8„  d   QhR\         /# rÁ   r   )rÄ   s   "rÅ   rÆ   rÆ      s   € ÷ ñ ÜemñrÇ   c           
     ó’  € VP                   ;'       g    RP                  4       p\        \        4       P                  4      P                  4       '       d„   \        RV R24       V'       d$   \        RVP                  4       ^ ,           24       Ve%   \        RV R24       \        R4       \        4        \        R	4       \        P                  ! ^4       Ve;   \        4       P                  V \        4       P                  VR
V\        V4      R7       VP                  \        \         39   d2   \        RV R24       \        VP                  \        J d   RMR4       MN\        RV R24       V'       d$   \        RVP                  4       ^ ,           24       \        \#        W4      4       \        P                  ! ^4       R# )a  CP0 did not land: say which of refused / torn / missing branch it was, then ``sys.exit(1)``.

A torn switch keeps its marker for the next launch's restore, so the autostash stays parked:
re-applying it onto a half-written tree would mix the user's edits into git's partial writes.
rA  u   âœ— Switching to 'zD' stopped part-way; the next `hermes` launch puts the checkout back.r­  Nr  r‡  r  r®  Fr  r  r  r  ró  r  ú&' does not exist locally or on origin.)rB  r  r   rô   rI  rÂ  rX  r[  rf   r   rå  r!  rm   r   r&  r*  r+  Ú_missing_branch_stop)r  rS  Útrack_resultr  r  r¾  r  s   &&&&&& rÅ   Ú _exit_after_failed_branch_switchr<     sp  € ð ×!Ñ!×'Ð' R×.Ñ.Ó0€FÜœr›t×0Ñ0Ó1×9Ñ9×;Ò;ÜÐ" 6 (Ð*nÐoÔpßÜ�B�v×(Ñ(Ó*¨1Õ-Ð.Ð/Ô0ØÒ%ÜÐEÀnÐEUÐUVÐWÔXÜÐ<Ô=Ü$Ô&ÜÐ+Ô,Ü�Š�ŒàÒ!Ü
‹×%Ñ%Ø”R“T×&Ñ&¨ÀEÐT_Ü$Ð%<Ó=ð 	&ô 	?ð ×Ñœ\¬:Ð6Ô6Ü��V�H˜AÐÔÜ¨|×/@Ñ/@ÄLÓ/PÑ+ÐVbÕcä�˜V˜HÐ$JÐKÔLßÜ�B�v×(Ñ(Ó*¨1Õ-Ð.Ð/Ô0ÜÔ)¨'Ó:Ô;Ü‡H‚HˆQ†KrÇ   c                ó$   € V ^8„  d   QhR\         /# rÁ   r  )rÄ   s   "rÅ   rÆ   rÆ   "  s   € ÷ &ñ &¬Sñ &rÇ   c                óÒ   a €  \         ;QJ d'    V 3R lRV 2RV 23 4       F  '       g   K   RM	  RM! V 3R lRV 2RV 23 4       4      '       d   R# R#   \         d     R# i ; i)zZ``branch_missing`` unless the branch resolves (then git refused the switch). Never raises.c              3   ó<   <"  € T F  p\        SV4      x € K  	  R # 5irÉ   ©r   rA  s   & €rÅ   rD  Ú'_missing_branch_stop.<locals>.<genexpr>%  s!   øé € ð -dÙ6b¨sÔ˜W c×*Ð*Ó6bùó   ƒr(  rœ  TFr®  Úbranch_missing)Úanyrå   )r  rS  s   f&rÅ   r:  r:  "  s�   ø€ ð&ß),«ô -dØ9DÀVÀHÐ7MÐQXÐY_ÐX`ÐOaÑ6bó-d¯¯ªô -dØ9DÀVÀHÐ7MÐQXÐY_ÐX`ÐOaÑ6bó-d÷ *dò *dÐ%ð 	zØiyð	zøäô &Ú%ð&ús'   ƒ
A ŽA ­%A ÁA ÁA ÁA&Á%A&c                   ó<   a € ] tR tRt o RtRtRtRtV 3R ltRt	V t
R# )Ú_CheckoutPlani+  zPWhat the pre-pull checkout phase decided (see ``_prepare_checkout_for_update``).NFc                óÊ   <€ V ^8„  d   Qh/ S[ R,          ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[ R,          ;R&   S[;R&   S[ R,          ;R	&   S[ R,          ;R
&   S[;R&   # )rÂ   Nr  Úcommit_countr
  Úparked_branch_switchedr  Úswitch_block_reasonÚupstream_checkedrú  r½  Úswitched_without_new_commits)rÑ   r—  r  )rÄ   Ú__classdict__s   "€rÅ   rÆ   Ú_CheckoutPlan.__annotate__+  s—   ø‡ ‚ ñ ˜$•JÑñ	 ñ
 Ññ ñ Ññ ñ !Ñ ñ ñ Ññ ñ ˜t�Ñ#ñ ñ Ññ ñ ˜•*Ñ#ñ ñ ˜4•ZÑ&ñ ñ #'Ñ.ò rÇ   rÊ   )ré   rê   rë   rì   Ú__doc__rú  r½  rL  Ú__annotate_func__rí   Ú__classdictcell__©rM  s   @rÅ   rF  rF  +  s!   ø‡ € áZð  $€LØ"&€Oà).Ð ÷ ƒ rÇ   rF  c                ó^   € V ^8„  d   QhR\         \        \        \        R,          3,          /# r  rc  )rÄ   s   "rÅ   rÆ   rÆ   <  s$   € ÷ +,ñ +,ä
Œ4””s˜T•zÐ!Õ"ñ+,rÇ   c               ó  € W!8X  g   VR8X  d   R# \        4       P                  V \        4       P                  W!4      w  rVV'       g�   \        4       P                  V \        4       P                  W!V4       \	        4        \	        R\        V \        4       P                  4       24       \        4       P                  V4       \        R4       \        P                  ! ^4       VP                  R4      '       g   \	        RV RV R	24       R
RV3# Rp\        R4      ;_uu_ 4        \        4       P                  RR4      R8H  pRRR4       V'       d	   V'       d7   \        4       P                  W!VP                  R^4      ^,          4       R
RV3# \!        V RRRRV 2.4      P"                  ^ 8w  d1   \	        RV R24       \        R4       \        P                  ! ^4       \	        RV RV R24       RR
V3#   + '       g   i     L¿; i)ad  Decide how a checkout parked on another branch is brought to *branch* (stash-switch-pull-
switch-back used to "update" main while the running code stayed behind).

By branch contents + updates.parked_branch_strategy: fully merged -> switch back;
unmerged -> "switch" (default; loud "kept" notice) or "update_in_place" (merge origin/<target>
INTO the branch, checkout never moves; --switch-branch overrides once); dirty/unverifiable ->
touch nothing, warn, ``sys.exit(1)`` with the code update SKIPPED (also when the target is
missing). Returns ``(parked_branch_switched, in_place_update, switch_block_reason)``.
r`  FNu+   âš  Update finished â€” code update SKIPPEDÚparked_branch_blockedú	unmerged:u     âš  Checkout was parked on 'u'   ' (fully merged) â€” switching back to rÕ  Tz1Could not read updates.parked_branch_strategy: %sÚparked_branch_strategyÚswitchÚupdate_in_placeÚ:r_  rí  z--quietrœ  r  r9  rC  u     â„¹ On branch 'u'   ' â€” updating it in place from origin/z- (no branch switch; local commits preserved).)FFN)rô   rŠ   rI  rœ   rX  rŒ   r/   r   rå  r!  Ú
startswithr   rÿ   rü   r›   r©  r  r	  )r  rS  Úcurrent_branchÚswitch_branchr¾  Úswitch_saferJ  Ú_in_place_configureds   &&&$$   rÅ   Ú_apply_parked_branch_guardr`  <  sê  € ð Ô >°VÔ#;Ø!Ð!Ü')£t×'HÑ'HØ”“×"Ñ" Nó(<Ñ$€KçÜ
‹×.Ñ.Ø”R“T×&Ñ&¨Ð@Sô	UäŒÜÐ;Ô<OÐPWÔY[ÓY]×YjÑYjÓ<kÐ;lÐmÔnÜ
‹×2Ñ2Ð3JÔKÜÐ,Ô-Ü�Š�ŒØ×)Ñ)¨+×6Ò6ÜÐ.¨~Ð.>Ð>eÐflÐemÐmpÐqÔrØ�UÐ/Ð/Ð/Ø ÐÜ	ÐI×	JÕ	JäÓ×!Ñ!Ð":¸HÓEÐIZÑZð 	÷ 
K÷  §=Ü
‹×-Ñ-ØÐ$7×$=Ñ$=¸cÀ1Ó$EÀaÕ$Hô	Jà�UÐ/Ð/Ð/ä�˜+ z°9ÀÈÀxÐ>PÐQÓR×]Ñ]ÐabÔbÜ�˜V˜HÐ$JÐKÔLÜÐ%Ô&Ü�Š�ŒÜ	Ø
˜NÐ+ð ,Ø�ÐFð	HôIð �$Ð+Ð+Ð+÷ 
K×	Jús   Ä&G;Ç;H	c               óš  a € Vf   RV 2pVRV 28g  p
V
'       d   RRRrÜpM\        S WVV	R7      w  r¼pV
'       gI   V'       gA   VRu;8X  d   V8w  d2   M M.\        RV R24       \        S \        4       P                  V4       \        4       P                  S \        4       P                  \        V	4      R	7      pRpRpV
'       g¢   V'       gš   W!8w  d”   \        S \        4       P                  4      pTp\        P                  ! 4        \        V	.V 3R
 lRV 2RV 23 4       O5!  ;_uu_ 4        \        S WWþR7      pRRR4       XP                  ^ 8w  d   \        S VVWæV	4       VRJ;'       d^    V'       * ;'       dO    T;'       gE    \        P                  P!                  4       ;'       d    \        P"                  P!                  4       pV
'       d:   \        S \        4       P                  4      p\%        TVV8X  d   ^ MRRRVRRR7      # T;'       g    Rp\'        S RV RV 2R.RR7      p\)        VP"                  P+                  4       4      p\-        S 4      pV^ 8”  d(   V'       d    ^ RIHp V! \3        S VV4      !  pVe   TMRpRpV^ 8X  d:   V'       d2   \        S \        4       P                  4      pV'       d   VV8w  d   RpRpRpV^ 8X  dÜ   V'       dÔ   VR8X  dÍ   V
'       gÅ   \        S \        4       P                  4      p \        4       P5                  S \        4       P                  WF\        V	4      R7      p\        S \        4       P                  4      pV'       dH   V'       d@   VV8w  d9   \C        S \        4       P                  VV4      p \E        ^V 4      pT;'       g    Tp\%        VVVVVVVVVVR7
      #   + '       g   i     EL”; i  \6         db   pTe%   \        RT R24       \        R4       \9        4        \;        S TTP<                  TP>                  \A        T4      T	RR7        Rp?LýRp?ii ; i)zéParked-branch guard, land on the target, stash, count new commits. Exits when the
checkout is unsafe to move or the target is missing. ``commit_count`` is 0 when up to
date, -1 when tips differ but the shallow count is unrecoverable.Nrœ  FT)r]  r¾  r`  u2     âš  Currently on detached HEAD â€” switching to z for update...©r  c              3   ó<   <"  € T F  p\        SV4      x € K  	  R # 5irÉ   r@  rA  s   & €rÅ   rD  Ú/_prepare_checkout_for_update.<locals>.<genexpr>Œ  s(   øé € ð 7=ñ b<ÐZ]Ô7GÈÐQT×7UÐ7Uó b<ùrB  r(  )r×  rÙ  )r  rH  r
  rI  r  rJ  rK  r¨  rª  r©  r  )Ú_github_compare_behindrò   r  r  r‡  r  Útarget_syntax_error)rÍ  r¾  rÎ  )
r  rH  r
  rI  r  rJ  rK  rú  r½  rL  rV  )#r`  rX  r˜   rô   rI  rp   r   ra  r‹  Úpause_at_commit_pointr   r/  r	  r<  rå  rö  Úisattyr
  rF  r  r—  r  r;  Úhermes_cli.source_checkre  rF  r¡   r¢   rf   rÆ  rv  r…  rø  rŽ   Úmax)!r  rS  r\  Úis_forkrW  rX  r  r]  r=  r¾  Úrelease_tagrI  r
  rJ  r  Úmoved_from_shar½  r;  r  Úhead_shar>  rP  rH  Úapply_is_shallowre  ÚcountedrL  Ú
landed_sharK  rú  rÈ  Úpost_sync_shaÚsynced_counts!   f&&$$$$$$$                       rÅ   Ú_prepare_checkout_for_updatert  j  s0  ø€ ð ÒØ˜v˜hÐ'ˆ
Ø '¨&¨Ð 2Ñ2€Kßð HMÈdÐTXÐ1DÐÐ1DäGaØ�V¸=Ø$;ôH=ÑDÐÐ1D÷ Ÿ°>ÀVÖ3UÈv×3UÜÐBÀ6À(È.ÐYÔZä˜G¤R£T×%6Ñ%6¸Ô?Ü“T×8Ñ8Ø”“×"Ñ"´*Ð=TÓ2Uð 9ó W€Nà€NØ€OßŸ°>Ô3Kô +¨7´B³D×4EÑ4EÓFˆØ(ˆô 	×*Ò*Ô,ÜÐ3ð >ô 7=Ø˜f˜XÐ&¨'°&°Ð(:ñb<ó 7=÷ >õ >ä9Ø˜°ôWˆL÷>ð ×"Ñ" aÔ'Ü,Ø˜ ¨~ÐLcôeð 	˜dÐ"÷ 	Kð 	KØŒN÷	Kð 	Kà×IÐIœcŸi™i×.Ñ.Ó0×HÐH´S·Z±Z×5FÑ5FÓ5Hð ÷
 ä$ W¬b«d×.?Ñ.?Ó@ˆÜØ)¸XÈÔ=S¹ÐY[Ø ¸Ø1ÀtÐ^bôdð 	dð ×#Ð#˜V€DÜ�g 
¨t¨f°B°z°lÐ,CÀYÐOÐW[Ô\€FÜ�v—}‘}×*Ñ*Ó,Ó-€Lä+¨GÓ4ÐØ�aÔ×,ÝBÙ(¬)°G¸ZÈÓ*NÑOˆà")Ò"5‘w¸2ˆð $)Ð Ø�qÔŸ^Ü& w´³×0AÑ0AÓBˆ
ß˜*¨Ô6ØˆLØ+/Ð(ð ÐØ�qÔŸW¨°6Ô)9Ç+Ü(¨´"³$×2CÑ2CÓDˆð	GÜ!›t×AÑAØœ›×*Ñ*°zÜ(Ð)@ÓAð  Bó  CÐô *¨'´2³4×3DÑ3DÓEˆßŸM¨l¸mÔ.KÜ1Øœ›×*Ñ*¨L¸-óIˆLô ˜q ,Ó/ˆLØ+×;Ð;¨|ˆNäØ%°LÐRaØ5ÐJ\Ø/ÐBRØ#°_Ø%AôCð C÷[>÷ >ð >ûôx $ô 	GØÒ)ÜÐIÈ.ÐIYÐYZÐ[Ô\ÜÐ@ÔAÜ(Ô*Ü$ W¨l¸F¿K¹KÈÏÉÜ,CÀFÓ,KØ=TØ0E÷Gò Gûð	Gús%   Ä0O
Ì8O Ï
O	ÏQ
Ï)AQÑQ
c                   ó4   a € ] tR tRt o RtRtV 3R ltRtV tR# )Ú_UpdateOptionsiá  zHResolved ``hermes update`` inputs (flags, config, pre-update snapshots).Fc                ón   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[;R&   S[;R&   S[;R&   S[;R&   S[;R&   # )rÂ   rZ  r  rW  r  r]  r  rY  )Úobjectr  )rÄ   rM  s   "€rÅ   rÆ   Ú_UpdateOptions.__annotate__á  s`   ø‡ ‚ ñ Ññ	 ñ
 Ññ ñ Ññ ñ Ññ ñ Ññ ñ  Ññ ñ Ñ$ò rÇ   rÊ   N)	ré   rê   rë   rì   rO  rY  rP  rí   rQ  rR  s   @rÅ   rv  rv  á  s   ø‡ € áRð  %Ð÷ ƒ rÇ   rv  c                ó0   € V ^8„  d   QhR\         R\        /# )rÂ   rX  rÃ   )r  rv  )rÄ   s   "rÅ   rÆ   rÆ   î  s   € ÷  /ñ  /´ð  /¼ñ  /rÇ   c           
     ó‚  € \        4       pV'       d   RR lMRp\        \        V RR4      4      p\        \        V RR4      4      p\        \        V RR4      4      p\        \        V RR4      4      pRpV'       gQ   V'       gI   \        P                  P                  4       '       d%   \        P                  P                  4       '       gS   \        R4      ;_uu_ 4        \        \        4       P                  R	R
4      4      P                  4       p	V	R8H  pRRR4       \        VW4VWhVR7      #   + '       g   i     L ; i)zTSnapshot pre-update state and resolve the flags/config ``_cmd_update_impl`` runs on.c                 ó   € \        W4      # rÉ   )r¡  )rƒ  r~  s   &&rÅ   Ú<lambda>Ú)_resolve_update_options.<locals>.<lambda>ô  s	   € ¤O°FÔ$DrÇ   NÚyesFr  r]  rY  z8Could not read updates.non_interactive_local_changes: %sÚnon_interactive_local_changesrÙ  Údiscard)rZ  r  rW  r  r]  r  rY  ©rA  )r¥   r  r%  rå  rö  rh  r
  r   rÑ   rÿ   rü   r´  rv  )
r&  rX  rZ  r  rW  r  r]  rY  r  Ú_modes
   &&        rÅ   Ú_resolve_update_optionsr„  î  s  € ô +Ó,ÐçIUÔ	DÐ[_ð ä”g˜d E¨5Ó1Ó2€Jô ”g˜d L°%Ó8Ó9€Jô œ  ¸Ó>Ó?€Mô œg dÐ,@À%ÓHÓIÐð "Ðß—z¬#¯)©)×*:Ñ*:×*<Ò*<ÄÇÁ×ARÑAR×ATÒATäÐT×UÕUÜœÓ)×-Ñ-Ð.MÈwÓWÓX×^Ñ^Ó`ˆEØ$)¨YÑ$6Ð!÷ Vô Ø-ØÀ:Ø#Ø-ô	/ð /÷ V×Uús   Ã7D.Ä.D>	c           
     ó\  € \        R4      ;_uu_ 4        ^ RIHp V! 4        \        4        RRR4       Rp\        R4      ;_uu_ 4        ^ RIHpHp V! 4       pV! V4       VP                  '       dd   \        VP                  4      pRP                  \        VP                   Uu0 uF  qfP                  kK  	  up4      4      p\        RV RV 24       RRR4       \        P                  ! R	Vf	   R
4       V# R4       V#   + '       g   i     Lß; iu upi   + '       g   i     LM; i)zEOpen the receipt and snapshot the fleet before changing the checkout.zUpdate receipt unavailable: %s)ra  NzUpdate plan phase failed: %s)Úcollect_runtime_inventoryÚrecord_plan_in_receiptz, u   â†’ Fleet: z% running service(s) across profiles: r\  r.  r,  )r   r  ra  Ú_record_update_initiatorÚhermes_cli.update_inventoryr†  r‡  ÚruntimesÚlenr  ÚsortedÚprofilerX  r/  r0  )r&  ra  Ú_pre_update_planr†  r‡  Ú_nÚrÚ	_profiless   &       rÅ   Ú_begin_update_receipt_and_planr’    s÷   € ô 
Ð6×	7Õ	7åBÙÔÜ Ô"÷	 
8ð ÐÜ	Ð4×	5Õ	5ßaÙ4Ó6ÐÙÐ/Ô0Ø×$×$Ð$ÜÐ%×.Ñ.Ó/ˆBØŸ	™	¤&Ð=M×=VÒ=VÓ)WÑ=V¸¯)¬)Ñ=VÑ)WÓ"XÓYˆIÜ�K ˜tÐ#HÈÈÐTÔU÷ 
6ô ×$Ò$ VÐ9IÒ9Q¨XÔaØÐð XaÔaØÐ÷/ 
8×	7üò( *X÷ 
6×	5ús*   ”DÁ	ADÂ&DÂ:DÄD	ÄDÄD+	c                ó   € V ^8„  d   QhRR/# r  rÊ   )rÄ   s   "rÅ   rÆ   rÆ   .  s   € ÷ Dñ D $ñ DrÇ   c                 óˆ  € \        R4      ;_uu_ 4        ^ RIHp  V ! 4       P                  RR7      P	                  R4      ^ ,          P                  4       pVP                  4       '       d;   \        V4      \        P                  ! 4       8w  d   \        P                  ! RR4       RRR4       R#   + '       g   i     R# ; i)	u  We hold the update lock, so a claim naming another pid is our orchestrator's: the Desktop
hand-off (posix shim, windows script, Tauri updater) â€” the metric's ``kind``. Read the marker
raw: a liveness probe or stale-marker cleanup is lock policy, not a metrics side effect.z Update initiator unavailable: %s)Úupdate_marker_pathr†  r…  Ú
Ú	initiatorrV  N)r   Úhermes_cli.update_lockr•  r”  Ú	partitionr  Úisdigitr—  r  Úgetpidr/  Úrecord_fact)r•  Úfirsts     rÅ   rˆ  rˆ  .  s~   € ô 
Ð8×	9Õ	9Ý=Ù"Ó$×.Ñ.¸Ð.ÓD×NÑNÈtÓTÐUVÕW×]Ñ]Ó_ˆØ�=‰=�?Š?œs 5›z¬R¯YªY«[Ô8Ü×+Ò+¨K¸ÔC÷	 
:×	9×	9Ò	9ús   ”BB0Â0C	r  c                óP   € V ^8„  d   QhR\         \        \        \        3,          /# rÁ   )rd  r  rÐ   )rÄ   s   "rÅ   rÆ   rÆ   9  s   € ÷ ',ñ ',´5¼¼tÄTÐ9IÕ3Jñ ',rÇ   c                óH  € \        4       P                  R,          pVP                  4       '       * pV'       dM   \        P                  R8w  d8   \        R4       \        R4       \        R4       \        P                  ! ^4       ^ RIH	p V! \        4       P                  4       \        4       p\        P                  R8X  d%   VP                  4       '       d   \        V. R
O4       \        V4       \        V4      p\        V\        4       P                  V R7       \        V\        4       P                  V R7       \        4       P!                  V\        4       P                  4      p\#        V4      pV'       d$   \        R4       \        R	V 24       \        4        W$V3# )a  Return ``(use_zip_update, git_cmd, is_fork)``; ``sys.exit(1)`` when not a git repo
on a non-Windows host (Windows falls back to ZIP: broken git file I/O, AV, NTFS filters).
*checkout_move* binds the churn cleanups' file writes to the paused gateways' tree gate.r  r4  u+   âœ— Not a git repository. Please reinstall:zD  curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bashÚnot_git_checkout)Úexpose_pm_gitrb  u   âš  Updating from fork:r­  )r  zwindows.appendAtomicallyÚfalse)rô   rI  ro  rå  r5  rX  r   r!  rD  r¡  r"  r  r  r�   r�   r—   r‘   r”   )r  Úgit_dirÚuse_zip_updater¡  r  Ú
origin_urlrk  s   $      rÅ   Ú_prepare_git_commandr¦  9  s'  € ô ‹d×Ñ &Õ(€GØ Ÿ™Ó)Ô)€Nßœ#Ÿ,™,¨'Ô1ÜÐ;Ô<ÜÐTÔUÜÐ'Ô(Ü�Š�Œå;á”"“$×#Ñ#Ô$Ü‹o€GÜ
‡|�|�wÔ 7§>¡>×#3Ò#3Ü�ÒIÔJô ˜wÔ'ô )¨Ó1€Gô ˜G¤R£T×%6Ñ%6ÀmÕTÜ˜7¤B£D×$5Ñ$5À]ÕSä“×%Ñ% g¬r«t×/@Ñ/@ÓA€JÜ�zÓ"€GçÜÐ'Ô(Ü��:�,ÐÔ ÜŒØ GÐ+Ð+rÇ   c                óJ   € V ^8„  d   QhR\         R\        R\         R,          /# )rÂ   rS  r
  rÃ   Nr  )rÄ   s   "rÅ   rÆ   rÆ   c  s(   € ÷ *ñ *Üð*Ü<@ð*äˆ4…Zñ*rÇ   c               óÚ  € \        V \        4       P                  4      pV'       d¨   WR8X  d¢   \        4        \        R4       \        RVR,           RV R24       \        R\        4       P                   RV R24       \        P
                  ! 4        \        4       P                  V4       \        R	4       \        P                  ! ^4       \        V 4      pV'       g‹   V'       dƒ   WaR
09  d{   \        4        \        RV RV R24       \        R\        4       P                   RV R24       \        4       P                  V4       \        R4       \        P                  ! ^4       V# )z\Return the post-pull HEAD SHA; ``sys.exit(1)`` if the pull was a no-op or landed off-branch.u-   âœ— Code did not move â€” update was a no-op.z  HEAD is pinned to rÓ  z (detached checkout); origin/z* advanced but the working tree stayed put.z+  Reattach to the branch and retry: git -C z
 checkout z && hermes updateÚdetached_headr`  u   âœ— Update pulled origin/z, but the checkout is on 'u   ' â€” not claiming success.z0  Switch to the target branch and retry: git -C Úunexpected_branch)ra  rô   rI  rX  rÉ  râ  r/   r   rå  r!  Ú_current_branch_name)r  rS  r±  r
  r¾  Úpost_pull_shaÚpost_pull_branchs   &&&$$  rÅ   r  r  c  sV  € ô & g¬r«t×/@Ñ/@ÓA€Mß˜Ô5ÜŒÜÐ=Ô>ÜØ" <°Õ#4Ð"5ð 6Ø�XÐGðIô	Jô 	ðÜ“d×'Ñ'Ð(¨
°6°(Ð:KðMô	Nô 	×)Ò)Ô+Ü
‹×2Ñ2Ð3JÔKÜ�_Ô%Ü�Š�Œô ,¨GÓ4Ðß×/Ð4DÐU[ÐL\Ô4\ÜŒÜØ'¨ xð 0Ø Ð!Ð!<ð>ô	?ô 	ðÜ“d×'Ñ'Ð(¨
°6°(Ð:KðMô	Nô 	‹×2Ñ2Ð3JÔKÜÐ(Ô)Ü�Š�ŒØÐrÇ   c                ó0   € V ^8„  d   QhR\         R\        /# )rÂ   r2  rÃ   ©r  rÑ   )rÄ   s   "rÅ   rÆ   rÆ   �  s   € ÷ `ñ `¬Dð `¼Sñ `rÇ   c               óR   € \        V . ROVR7      P                  P                  4       # )z?``rev-parse --abbrev-ref HEAD`` (literal "HEAD" when detached).r  )r_  z--abbrev-refr`  r:  )r  r2  s   &$rÅ   r«  r«  �  s!   € ä�GÒBÈ%ÔP×WÑW×]Ñ]Ó_Ð_rÇ   rå  Útarget_repositoryÚcompletion_requestc          
      óh   € V ^8„  d   QhR\         R\         R\        R,          R\        R,          RR/# )rÂ   rX  Úhad_desktop_app_before_updaterå  Nr±  rÃ   r¯  )rÄ   s   "rÅ   rÆ   rÆ   •  s<   € ÷ #ñ #Üð#Ü@Dð#ä˜•:ð#ä9<¸t½ð#àhlñ#rÇ   c          	     óê  € \        4       ;p'       d   \        V4       \        V 4      p\        V 4      '       dG   \        RV RV  24       \        R4       \        4        \	        V3RVRVRV/V'       d   RV/M/ B  R# \        V 4      '       dp   \        RV R	24       \        V 4       \        4        \        R
4       \        R4       \        4       P                  4       '       d   \        R4       \        R4       M(\        RV R24       \        RV  24       \        V 4       \        P                  ! V 4      ;p	'       d   \        V	4       \        RR4       \        P                  ! ^4       R# )zOGit/installer failure: ZIP-fallback when safe, else report and ``sys.exit(1)``.u   âš  rƒ  u#   â†’ Falling back to ZIP download...r´  rå  r²  r±  r  z$ (the code update itself succeeded).zP  Hermes may not start until the dependencies are installed. Fix the error abovezB  (usually network or disk space), then run `hermes update` again.zO  If `hermes update` itself will not start, retry through the venv interpreter:zV    venv\Scripts\python.exe -c "from hermes_cli.main import main; main()" update --yesr  z  Details: r.  z"Update receipt finalize failed: %sN)rq   rX  rÅ  rË  rb   rÂ  rÓ  rô   rÈ  r/  Úgit_error_stop_classr   Ú_finalize_receiptrå  r!  )
Úer&  rX  r´  rå  r±  r²  r•  ÚstageÚstops
   &&&&$$$   rÅ   Ú#_handle_update_called_process_errorr»  •  sV  € ô 2Ó3Ð3€zÖ3ÜˆjÔÜ(¨Ó+€EÜ+¨A×.Ò.Ü��U�G˜2˜a˜SÐ!Ô"ÜÐ3Ô4ÜŒÜØñ	WØ0Mð	Wà!ð	Wà6Hð	W÷ <MÐ#Ð%6Ñ7ÐRTô	Wô 7°q×9Ò9Ü�D˜˜ÐCÐDÔEÜ,¨QÔ/ÜŒGÜÐdÔeÜÐVÔWÜ‹t×Ñ×!Ò!ÜÐgÔhÜðNôOøô �D˜˜˜q�/Ô"Ü�K ˜sÐ#Ô$Ü,¨QÔ/Ü&×;Ò;¸AÓ>Ð>ˆ4Ö>Ü˜ÔÜ˜(Ð$HÔIÜ�Š�ŽrÇ   c                ó4   € V ^8„  d   QhR\         R\         RR/# )rÂ   ÚstatusÚdebug_messagerÃ   Nr  )rÄ   s   "rÅ   rÆ   rÆ   »  s!   € ÷ (ñ (œcð (´#ð (¸$ñ (rÇ   c                ó‚   € \        V4      ;_uu_ 4        ^ RIHp V! V 4       RRR4       R#   + '       g   i     R# ; i)zXBest-effort ``finalize_update_receipt(status)``; the receipt must never break an update.)Úfinalize_update_receiptN)r   r  rÀ  )r½  r¾  rÀ  s   && rÅ   r·  r·  »  s'   € ä	�m×	$Õ	$ÝEÙ Ô'÷ 
%×	$×	$Ò	$ús   ”-­>	Úheld_messagec          
      óZ   € V ^8„  d   QhR\         R\         R\        R\         R,          RR/# )rÂ   rS  r\  r²  rÁ  NrÃ   )rÑ   r÷   )rÄ   s   "rÅ   rÆ   rÆ   Â  s8   € ÷ 0ñ 0Üð0Ü*-ð0ÜZ^ð0ä03°dµ
ð0àFJñ0rÇ   c               óz  € VP                   eO   \        4       P                  V \        4       P                  VP                   VP                  V\        V4      R7       VP                  '       dp   VP                  P                  R4      '       d=   VP                  P                  R^4      ^,          p\        RV RV RV RV R	2	4       M\        RV R
V R24       VeO   \        V \        4       P                  4      ;'       g    RVR&   T;'       g    VP                  '       d   RMRVR&   \        V4       R# )a  "Already up to date" path: restore stash, repair the checkout, catch up the fleet.
``held_message`` replaces "Already up to date!" when the channel's release was held, not reached.
``sys.exit(1)`` when the repair is incomplete (after gateway exit code + partial receipt).Nr  rV  rZ  u     âœ“ Checkout was parked on 'u   ' â€” switched back to z; z unmerged commit(s) kept on 'z'.u&   ' (fully merged) â€” switched back to r  rA  r�  u   âœ“ Already up to date!u:   âœ“ Up to date with your fork (official repo not checked).r}  )r  rô   rm   rI  r  r   rI  rJ  r[  r©  rX  ra  rK  r™  )	r  rS  r\  Ú_planr  r²  r¾  rÁ  Ú_counts	   &&&&$$$$ rÅ   Ú_finish_already_up_to_daterÆ  Â  sC  € ð ×ÑÒ'Ü
‹×%Ñ%Ø”R“T×&Ñ&¨×(<Ñ(<È%×JbÑJbØ ´
Ð;RÓ0Sð 	&ô 	Uð ×#×#Ð#Ø×$Ñ$×/Ñ/°×<Ò<Ø×.Ñ.×4Ñ4°S¸!Ó<¸QÕ?ˆFÜØ0°Ð0@Ð@WÐX^ÐW_Ð_aØ�(Ð7¸Ð7GÀrðKõLô Ð2°>Ð2BÐBhÐioÐhpÐpqÐrÔsàÒ%ô .?¸wÌË×HYÑHYÓ-Z×-`Ð-`Ð^`Ð˜>Ñ*Ø3?÷ 4Oð 4OØ).×)?×)?Ð)?Ñ%ØMð 	Ð/Ñ0ô Ð.Ö/rÇ   c                ó(   € V ^8„  d   QhR\         RR/# )rÂ   r²  rÃ   Nrö   )rÄ   s   "rÅ   rÆ   rÆ   â  s   € ÷ 0ñ 0Ü_cð0Øhlñ0rÇ   c               ó‚  € \        WW#P                  VR7      pVe˜   \        V \        4       P                  4      ;'       g    TpVP                  R4      pVeL   Wx8w  dF   \        R4       \        4       P                  V4       \        R4       \        P                  ! ^4       T;'       g    TVR&   \        V4       R# )z°Post-pull phase: verify HEAD, sync Python/Node/web/Desktop, maintenance, fleet restart.

``movement_baseline`` is what ``_pull_updates`` returned: the SHA HEAD had to move off.r  Nr�  uV   âœ— Checkout no longer matches the selected channel commit. No completion was applied.ró  )r  r
  ra  rô   rI  rü   rX  r/   r   rå  r!  r™  )	r  rS  r!  rÄ  r¾  r²  r¬  ÚobservedÚpinneds	   &&&&$$   rÅ   Ú_apply_pulled_updaterË  â  s¥   € ô
 ,ØÐ*×<QÑ<QØ 7ô9€Mð Ò%Ü$ W¬b«d×.?Ñ.?Ó@×QÐQÀMˆØ#×'Ñ'¨Ó7ˆØÒ (Ô"4ÜÐjÔkÜ‹D×6Ñ6Ð7NÔOÜ˜Ô&Ü�HŠH�QŒKØ-3×-?Ð-?°xÐ˜>Ñ*ÜÐ.Ö/rÇ   c                ó¼   €  \        4       P                  4       ;'       g"    \        P                  ! V P                  R7      #   \
         d    \        R4       h i ; i)zYWindows pauses here (venv locks); Linux/macOS only arm a pause the commit point performs.)rY  Úgateway_pause_failed)rô   r*   r‹  Ú	arm_pauserY  ÚRuntimeErrorr   )rf  s   &rÅ   Ú_pause_gateways_for_updaterÐ  ÷  sU   € ðÜ‹t×6Ñ6Ó8÷ 8ð 8¼L×<RÒ<RØ#×6Ñ6ô=8ð 	8øäô ÜÐ+Ô,Øðús   ‚A ¡!A ÁAc                ó$   € V ^8„  d   QhR\         /# rÁ   r  )rÄ   s   "rÅ   rÆ   rÆ     s   € ÷ ñ ¤ñ rÇ   c                óP   €  \        V 4      #   \         d    \        R4       h i ; i)z```_source_update_channel`` for this run, naming the exit when the configured channel is invalid.Úchannel_unresolved)r  r•  r   )r&  s   &rÅ   Ú_update_run_channelrÔ    s-   € ðÜ% dÓ+Ð+øÜô ÜÐ)Ô*Øðús   ‚
 �%c                ó$   € V ^8„  d   QhR\         /# )rÂ   rX  r7  )rÄ   s   "rÅ   rÆ   rÆ   
  s   € ÷ oYñ oY¬ñ oYrÇ   c                óŠ  a'€ Rp\         P                  ! 4        \        \        4       P                  4      pV'       dY   \        4       P                  p\        RV RV R24       \        RV R24       \        RRR	7       \        P                  ! ^4       ^ R
I	H
p V! \        4       P                  4      '       d   \        R4       \        P                  ! \        4       P                  4       \        W4      pVP                  VP                  r‡\        R4       \        4        \!        V 4      p	\        4       P#                  V 4      p
\%        W
4       \'        W
4       \)        V4      o'S''       d)   ^ RIpVP-                  \        4       P.                  S'4       \        4       P                  R,          R,          p\        4       P1                  V4      RJ;'       gC    \        4       P3                  V4      ;'       g"    \5        \        4       P7                  4       4      p\9        \;        S'4      R7      w  rïp\=        WiV
S'WÑ4      p\        4       P?                  V 4      pVVR&   \        P@                  ! T TTV'       d   RMTV'3R lR7      w  ppppVR,          pV'       d.    \C        V 3RVRVRV/V'       d   RV/M/ B  \E        S'V4       R#  \        PF                  ! \        4       P                  4       ^ RI	H$pH%p V! \        4       P                  4      pV'       d   \        RV R24       V! \        4       P                  4      pV'       d   \        RV R24       \        4       PM                  V\        4       P                  4       \O        \        4       P                  V4       V'       d   V'       d   RpM)V'       d   RRRV.pMRR\        PP                  ! RV4      .p^ R I	H)pH*p Vf   \V        PX                  ! . ^ 4      pM)\        R!4       V! R" VV\        4       P                  4      pVPZ                  ^ 8w  dÂ   T! VP\                  ;'       g    R#4      '       d   \        R$4       \_        VP\                  V\        4       P                  R%7       \        4       P/                  S'4       \        VPZ                  ^|8X  d   R&MR'VP\                  ;'       g    R#9   d   R(MR)4       \        P                  ! ^4       \a        VRR*7      p\         Pb                  ! V\        4       P                  4       Rp V'       d<   V'       g4   \e        V 4      p!\        Pf                  ! VVV!4      p"V"'       d	   T"pR+V! R,2p \i        VVS'4       \k        VVVVVWVPl                  VS'R-7
      p#V#Pn                  p$V$^ 8X  d   \q        VVVV#VVS'V R.7       R# V'       d   \        R/VR0,           24       MDV$^ 8”  d   \        R1V$ R224       M-V#Pr                  '       d   \        R3V R424       M\        R54       \        R64       \u        TTV#Pv                  V#Px                  YvPz                  VP|                  TV#P~                  V#P€                  T;'       d    VR78H  ;'       d    V'       * VV#P‚                  S'VP…                  R84      R97      p%\‡        VVV%V#S'VR:7       R#   \E        S'T4       i ; i  \V        Pˆ                   d;   p& \‹        T&YTTTTR;7       \E        S'T4        Rp&?&R#   \E        S'T4       i ; iRp&?&ii ; i)<zGApply the update; the command boundary owns errors, receipts and stdio.Tu   âœ— Cannot update while a Git z is in progress in r  z  Finish it or run `git z' --abort`, then re-run `hermes update`.Úgit_in_progressr.  )Úwithout_receipt)Úrelease_dead_index_lockz9  (removed .git/index.lock left by a git that was killed)u   â˜¤ Updating Hermes Agent...NÚappsrV  rb  rS  c                  ó6   <€ \        4       P                  S 4      # rÉ   )rô   r/   )r¾  s   €rÅ   r}  Ú"_cmd_update_impl.<locals>.<lambda>I  s   ø€ ”R“T×?Ñ?Ð@WÔXrÇ   )r  rº  r´  rå  r²  r±  )Ú repair_broken_shallow_boundariesÚprune_stale_shallow_graftsz  (restored z broken shallow boundary(ies))z
  (pruned z4 stale shallow graft(s) left by past depth-1 checks)Úfetchz	--no-tagsÚorigin)Ú!fetch_with_partial_clone_recoveryÚ#is_partial_clone_pack_objects_crashu   â†’ Fetching updates...c                 ó   € \        WR R7      # )T)r3  )r  )Úgcrä  s   &&rÅ   r}  rÜ  {  s   € œh r°dÕ;rÇ   rA  u«   âœ— git still crashed after marking this checkout's packs. See 'Fetch fails with should_include_obj' in https://hermes-agent.nousresearch.com/docs/getting-started/updatingr  Úgit_timeoutzNo space left on deviceÚ	disk_fullÚfetch_failedr  u(   âœ“ Holding at this build until a newer z release ships.)rk  rW  rX  r  r]  r=  r¾  )r  r²  r¾  rÁ  u   â†’ Switching to source commit rÓ  u
   â†’ Found z new commit(s)u%   â†’ Switched the running checkout to z (no new commits to count)uE   â†’ Updates available (commit count unknown on this shallow checkout)u   â†’ Pulling updates...rò   r�  )r  r  r  r  r=  rú  r½  r	  rW  r
  r¾  r�  )r¾  r²  )rå  r±  r²  )FrÉ  Úbegin_update_attemptr   rô   rI  rX  r   rå  r!  rW  rÙ  r#  r$  r„  r  rW  r’  rº   r(  r1  rÐ  rn  Úregisterr/   Ú_desktop_packaged_executableÚ_desktop_dist_existsr  Ú_installed_desktop_appsr¦  r   rh  Ú_resolve_update_branchÚselect_apply_targetrb   ry  Úreport_pack_tidyrÝ  rÞ  rr   r\  Útracking_refspecrá  râ  rJ  rL  r	  rB  rš   r«  Úrecord_run_startrÔ  Ú#hold_channel_release_behind_runtimer6  rt  r]  rH  rÆ  rL  r#  r  r  r  r  rú  r½  r
  rü   rË  rN  r»  )(r&  rX  Ú_hermes_current_updater_frameÚgit_operationrr  rÙ  rf  r  rW  rŽ  Úpre_update_snapshot_idÚ_atexitÚdesktop_dirr´  r¤  r  rk  r²  rS  r=  Úrelease_shaÚtarget_is_headr±  rÝ  rÞ  ÚrepairedÚprunedÚ
fetch_argsrá  râ  r/  r\  rÁ  r  ÚheldrÄ  rH  r!  r¸  r¾  s(   &&                                     @rÅ   Ú_cmd_update_implrþ  
  sp  ø€ ð
 %)Ð!Ü× Ò Ô"Ü-¬b«d×.?Ñ.?Ó@€MßÜ‹t× Ñ ˆÜÐ.¨}¨oÐ=PÐQUÐPVÐVWÐXÔYÜÐ(¨¨Ð7^Ð_Ô`ÜÐ&¸ÕAÜ�Š�Œõ ;Ùœr›t×0Ñ0×1Ò1ÜÐIÔJÜ
×ÒœB›D×-Ñ-Ô.ä" 4Ó6€DØ"×.Ñ.°·±�ä	Ð
(Ô)Ü	„Gä5°dÓ;Ðô
  ›T×8Ñ8¸Ó>ÐÜ% dÔCÜ˜4Ô8ä8¸Ó>ÐßÛ Ø×Ñœ›×CÑCÐE\Ô]Ü“$×#Ñ# fÕ,¨yÕ8€Kô 	‹×)Ñ)¨+Ó6¸dÐB÷ 	0ð 	0Ü‹4×$Ñ$ [Ó1÷	0ð 	0ä”“×,Ñ,Ó.Ó/ð "ô
 (<Ì*ÐUlÓJmÔ'nÑ$€N˜Wä3ØÐ 6Ð8OØ%ó5Ðô ‹T×(Ñ(¨Ó.€FØ#)Ð�xÑ ÜAG×A[ÒA[ØˆfÐ(¿.±$ÈgÜXôBZÑ>€J�˜^Ð->ð   Õ)€Fçð	YÜØñ[Ø4Qð[à&ð[à;Mð[÷ @QÐ'Ð):Ñ;ÐVXò[ô
 ,Ð,CÐEWÔXáðbYÜ×Ò¤£× 1Ñ 1Ô2÷ 	dÙ3´B³D×4EÑ4EÓFˆßÜ�L  
Ð*HÐIÔJÙ+¬B«D×,=Ñ,=Ó>ˆßÜ�J˜v˜hÐ&ZÐ[Ô\ô
 	‹×.Ñ.¨w¼»×8IÑ8IÔJô
 	%¤R£T×%6Ñ%6¸Ô?çŸ>à‰JßØ! ;°¸*ÐE‰Jà! 8¬V×-DÒ-DÀXÈvÓ-VÐWˆJßmàÒÜ%×6Ò6°r¸1Ó=‰LäÐ+Ô,Ù<Ù;¸WÀjÔRTÓRV×RcÑRcóeˆLà×"Ñ" aÔ'Ù2°<×3FÑ3F×3LÐ3LÈ"×MÒMÜð tô uä  ×!4Ñ!4¸gÌBËD×L]ÑL]Õ^Ü‹D×6Ñ6Ð7NÔOÜ¨,×*AÑ*AÀSÔ*H™Ø5¸,×:MÑ:M×:SÐ:SÐQSÔTñ OZØZhôjä�HŠH�QŒKä-¨g¸TÔBˆÜ× Ò  ¬"«$×*;Ñ*;Ô<ØˆßŸ~Ü)¨$Ó/ˆGÜ×=Ò=¸gÀzÐSZÓ[ˆDßØ!�
Ø!IÈ'ÈÐRaÐb�Ü# G¨ZÐ9PÔQÜ,Ø�V˜^°WÈØ%Èd×N`ÑN`Ø!Ð;RôTˆð ×)Ñ)ˆà˜1ÔÜ&Ø˜ °ÀKØ#5ÐOfØ)õ+ñ çÜÐ3°KÀÕ4DÐ3EÐFÕGØ˜AÔÜ�J˜|˜n¨NÐ;Õ<Ø×/×/Ð/ÜÐ9¸&¸ÐA[Ð\Õ]ô ÐYÔZäÐ&Ô'Ü)Ø�V˜U×1Ñ1Àe×F^ÑF^Ø#×;UÑ;UØ—‘°:ÈE×L^ÑL^Ø!×1Ñ1Ø!×JÐJ f°Ñ&6×JÐJ¸{¼?ÐWaØ!×1Ñ1ÐKbØ+×/Ñ/°Ó?ôAÐô 	Ø�VÐ.°Ø$;ÐPb÷	døô{ ,Ð,CÐEWÕXûô@ ×(Ñ(ô Yð	YÜ/Ø�4Ð'DÐQ\Ø"3ÐHZõ\ô ,Ð,CÐEW×XÒXøÔ+Ð,CÐEWÕXþðYúsx   Ê&[" ËC+[3 Î?
[3 Ï
B[3 Ñ[3 Ñ+A9[3 Ó%A,[3 ÕB[3 ×[3 × >[3 ØB[3 Ú%;[3 Û"[0Û3]Ü	\,Ü\=Ü,\:Ü:\=Ü=])zhermes_bootstrap.pyzhermes_cli/_parser.pyzhermes_cli/_launchers.pyzhermes_cli/_early_recovery.pyzhermes_cli/update_lock.pyzhermes_cli/update_custody.pyzhermes_cli/update_handoff.pyzhermes_cli/venv_sync.pyzpm/__init__.pyzpm/environments.pyzhermes_cli/main.pyzhermes_cli/config.pyzhermes_cli/__init__.pyzhermes_cli/web_server.pyzcli.pyzrun_agent.pyzmodel_tools.pyztoolsets.pyzhermes_constants.pyr‚  rÉ   )rA  g     Àr@rñ   )r`  (4  rO  ÚloggingÚ
contextlibr   r  r¨  ÚshutilrJ  rå  Útimer’  Údataclassesr   Úpathlibr   Útypingr   rD  r   rF  rû   r	   ró   r
   Ú_update_handoffÚhermes_cli.update_cmd_commonr   r   r‹  r   r  r   Ú
pm.receiptr   r�  r   r/  r   rc  Úhermes_cli._old_updaterr   Úhermes_cli._early_recoveryr   r   r   r   rÉ  r   r‹  Ú hermes_cli.update_cmd_pause_gater   r   r   r#  Ú hermes_cli.update_abort_recoveryr   r   r   r   r    r!   Úhermes_cli.update_cmd_windowsr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   Úhermes_cli.update_cmd_fleetr7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   Ú"hermes_cli.update_cmd_fleet_verifyrX   Úhermes_cli.update_cmd_ziprY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   Úhermes_cli.update_cmd_stashrd   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   Úhermes_cli.update_cmd_configrs   rt   ru   rv   rw   rx   ry   Ú hermes_cli.update_cmd_validationrz   r{   r|   Úhermes_cli.old_updater_depsr}   r~   r   r€   r�   r‚   rƒ   Úhermes_cli.update_cmd_gitr„   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¢   Úhermes_cli.update_cmd_maintr£   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¿   Ú	getLoggerré   ÚloggerrË   rÓ   r×   rÛ   râ   rï   rô   rÿ   r  rz  r  rE  r  r(  r1  r  r\  ra  rw  r{  r¡  r¬  r¶  rÂ  rÅ  rË  rÓ  rÖ  rÙ  rÝ  rï  r
  r  r1  r"  r;  rF  rO  rh  rp  ry  r™  r¼  rÌ  rÆ  rï  rô  rø  rü  r   r  r#  r*  r+  r/  r6  r<  r:  rF  r`  rt  rv  r„  r’  rˆ  r¦  r  r«  r»  r·  rÆ  rË  rÐ  rÔ  rþ  rÊ   rÇ   rÅ   Ú<module>r     s¿  ðñó Ý Û 	Û Û Û Û 
Û Ý !Ý Ý õ XÝ -Ý 8ß Cå 7Ý ;Ý Mß eÝ 5ß gÑ gÝ 3Ý =ß GÝ 1÷ ÷  ÷N÷ N÷ N÷ N÷ Nõ N÷%÷ %÷ %÷ %÷ %÷ %÷ %÷ %õ %õ" J÷0÷ 0÷ 0ñ 0÷
'÷ '÷ '÷ 'ñ '÷^÷ ^ñ ^÷'ñ '÷M÷ Mñ M÷	9÷ 	9÷ 	9÷ 	9÷ 	9÷ 	9÷ 	9÷ 	9ñ 	9÷/÷ /÷ /÷ /÷ /÷ /÷ /ó /õ Ø	×	Ó	˜8Ó	$€õõ
õ
õ
õ
õ
ò
õ8õ*ð8Ð ÷&ð "Ð õ"õLõ*sñ¨uð ¸eõ õ@
tõõ*õ.G÷82õj'õ&öö" ö ð&Ø8:÷ð ö6ö
ööð6  tð  °õ  ñF=°ð =Àu÷ =ñ =ñ >FÀuð >FÐVZ÷ >Fñ >FöBö`÷eð eö

Aöö&-ö @ö"GGðTBÐSW÷ Bð BðJRÈtð RÐmq÷ Rð RðIÐcgð IØ$\ðIà59ðIàFW÷Ið IðX*À4÷ *ð *öönó
(öjö
"ðJhàðhà.2ðhàDHðhàX]ðhàjoðhð ðhð 48ðhð GKõhðX #Ð#�àˆ]�
ó7öt÷ ð öD&ð ÷/ð /ó ñ/ö +,ð\tCà"õtCðn ÷	%ð 	%ó ñ	%ö /óFö:Dð',¨$÷ ',ð ',öT*ðZ`°5÷ `ð `ð
#à $ð#àFJð#à_c÷#ð #öL(ð0à ð0à=A÷0ð 0ö@0ó*ö÷oYð oYrÇ   