§
    SòÂj{ˆ  ã            	      óD  — U d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZ d d	lmZmZmZ d d
lmZmZ d dlm Z  d dl!m"Z" d dl#m$Z$m%Z% d dl&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZC  ejD        d¦  «        ZE e"ejF         G                    d¦  «        ¬¦  «        ZH eIejF         G                    dd¦  «        ¦  «        ZJ e ejF         G                    dd¦  «        ¦  «        ZK e'ejF         G                    dd ¦  «        ¦  «        ZLejM         N                    ejM         O                    eP¦  «        d!d"¦  «        ZQ e%¦   «         ZR e;ejF         G                    d#d$¦  «        ¦  «        ZS eA¦   «         ZTd% e=eSeReT¬&¦  «        iZUejF         G                    d'd(¦  «        d)k    r e?eSeT¬&¦  «        eUd*<   d¸d-„ZVd¹d/„ZWe	 G d0„ d1¦  «        ¦   «         ZX G d2„ d3e¦  «        ZY G d4„ d5e¦  «        ZZ G d6„ d7e¦  «        Z[ G d8„ d9e¦  «        Z\i Z]d:e^d;<   dºd@„Z_dA„ Z` e+ e,¦   «         dB„ dC„ e_e`dD„ ¦  «        ZadE„ Zb e/ejF         G                    dFdG¦  «        ¦  «        Zc e. e0¦   «          e1¦   «         ecdH„ e_e`eb¦  «        ZddIdIdJœdK„ZedL„ ZfdM„ ZgdN„ Zhd»dO„Zid¼dP„ZjdQ„ ZkdR„ Zled½dU„¦   «         Zm edVdWem¬X¦  «        Znen o                    e6¦  «        d¾d[„¦   «         Zpd¿d^„Zqen G                    d_¦  «        d`„ ¦   «         Zren s                    da¦  «        dÀdd„¦   «         Zten G                    de¦  «        df„ ¦   «         Zuen s                    dedg¬h¦  «        dÁdk„¦   «         Zven w                    dldm¬h¦  «        dÂdo„¦   «         Zxen G                    dp¦  «        dq„ ¦   «         Zyen G                    dr¦  «        dÂds„¦   «         Zzen G                    dt¦  «        dÃdv„¦   «         Z{en s                    dw¦  «        dÃdx„¦   «         Z|en s                    dydz¬h¦  «        dÄd|„¦   «         Z}en G                    d}¦  «        dÃd~„¦   «         Z~en s                    d}¦  «        dÅd€„¦   «         Zen G                    d�¦  «        dÆd‚„¦   «         Z€en G                    dƒd„¬…¦  «        dÇd‡„¦   «         Z�en G                    dˆd„¬…¦  «        dÈdŠ„¦   «         Z‚en G                    d‹d„¬…¦  «        dÈdŒ„¦   «         Zƒen G                    d�¦  «        dÆdŽ„¦   «         Z„en G                    d�¦  «        dÉd‘„¦   «         Z…en G                    d’¦  «        dÆd“„¦   «         Z†	 dÊdËd–„Z‡	 dÊdÌd—„ZˆdÍdš„Z‰d›„ ZŠdÎdœ„Z‹i ZŒd�„ Z�en s                    džd„¬…¦  «         edI¬Ÿ¦  «        fdÏd¡„¦   «         ZŽen s                    d¢¦  «        dÐd¥„¦   «         Z�en s                    d¦¦  «        dÑd¨„¦   «         Z�en s                    d©¦  «        dÒd«„¦   «         Z‘ G d¬„ d­e¦  «        Z’ G d®„ d¯e¦  «        Z“en s                    d°¦  «        dÓd±„¦   «         Z”en s                    d²¦  «        dÔd³„¦   «         Z•en –                    d´¦  «        dÕd·„¦   «         Z—dS )Öé    )ÚannotationsN)ÚasynccontextmanagerÚsuppress)Ú	dataclassÚfield)ÚdatetimeÚtimezone)ÚAnyÚLiteral)Úuuid4)ÚFastAPIÚHeaderÚHTTPExceptionÚ	WebSocketÚWebSocketDisconnect)ÚFileResponseÚRedirectResponseÚJSONResponse)Ú	BaseModelÚField)ÚDeviceCredentialStore)ÚSystemCollector)ÚPiSessionEventÚPiSessionRegistry)ÚTargetStoreÚnormalize_targetÚsplit_target)ÚVoiceManagerÚconfigured_stt)ÚSpeechManagerÚSpeechPreferencesÚconfigured_ttsÚHaihubSummaryÚMODES)Úquick_catalog)ÚControlErrorÚInputÚProjectÚSettings)ÚProjectRegistry)Ú	PiAdapter)ÚCodexAdapter)ÚApprovalRegistry)ÚPiApprovalServerzuvicorn.error.device_gatewayÚGATEWAY_SERVER_NAME)ÚhostnameÚGATEWAY_SNAPSHOT_INTERVALÚ2ÚDEVICE_CREDENTIALS_FILEz*~/.config/esp32-device-gateway/device.jsonÚGATEWAY_STATE_FILEz+~/.config/esp32-device-gateway/targets.jsonÚstaticz
admin.htmlÚGATEWAY_PROJECTS_FILEz,~/.config/esp32-device-gateway/projects.jsonÚpi)Ú	approvalsÚGATEWAY_CODEX_ENABLEDÚ0Ú1ÚcodexÚreturnr   c                 ó>   — t          j        t          j        ¦  «        S ©N)r   Únowr	   Úutc© ó    úR/home/lighthouse/esp32-dev/.cache/wearable-shell-0.6a/server/device_gateway/app.pyÚutc_nowrE   7   s   € ÝŒ<�œÑ%Ô%Ð%rC   Úintc                 óº  — t           j                             d¦  «        } | �\	 t          | ¦  «        }n-# t          $ r  d}t
                               d| ¦  «         Y nw xY wt          dt          d|¦  «        ¦  «        S t          j
        ¦   «                              ¦   «                              ¦   «         }|�$t          |                     ¦   «         dz  ¦  «        ndS )NÚGATEWAY_TIMEZONE_OFFSET_MINUTESr   z5invalid GATEWAY_TIMEZONE_OFFSET_MINUTES=%r; using UTCi0ýÿÿiH  é<   )ÚosÚenvironÚgetrF   Ú
ValueErrorÚloggerÚwarningÚmaxÚminr   r@   Ú
astimezoneÚ	utcoffsetÚtotal_seconds)Ú
configuredÚvalueÚoffsets      rD   Úgateway_timezone_offset_minutesrX   ;   sÕ   € Ý”—’Ð AÑBÔB€JØÐð	`Ý˜
‘O”OˆEˆEøÝð 	`ð 	`ð 	`ØˆEÝ�NŠNÐRÐT^Ñ_Ô_Ð_Ð_Ð_ð	`øøøõ �4�˜S %™œÑ)Ô)Ð)ÝŒ\‰^Œ^×&Ò&Ñ(Ô(×2Ò2Ñ4Ô4€FØ06Ð0B�3ˆv×#Ò#Ñ%Ô%¨Ñ+Ñ,Ô,Ð,ÈÐIs   £3 ³'AÁAc                  ó`  — e Zd ZU ded<   ded<   ded<   ded<    ed„ ¬¦  «        Zded	<   d
Zded<    ee¬¦  «        Zded<   dZ	ded<    ee
j        d¬¦  «        Zded<    edd¬¦  «        Zded<   dZded<   dZded<    ee¬¦  «        Zded<    ee
j        d¬¦  «        Zded<   d#d"„ZdS )$ÚDeviceÚstrÚ	device_idÚboardÚfirmwarezWebSocket | NoneÚ	websocketc                 ó(   — t          ¦   «         j        S r?   )r   ÚhexrB   rC   rD   ú<lambda>zDevice.<lambda>N   s   € µu±w´w´{€ rC   )Údefault_factoryÚconnection_idTÚboolÚonliner   Ú	last_seenNzdict[str, Any] | NoneÚ
last_eventF)rc   Úreprzasyncio.LockÚsettings_lock)Údefaultri   zasyncio.Task | NoneÚsettings_taskz
str | NoneÚsettings_idÚ Úlast_agent_statezset[str]ÚcapabilitiesÚ	send_lockr=   údict[str, Any]c                óš   — | j         | j        | j        | j        t	          | j        ¦  «        | j                             ¦   «         | j        dœS )N)r\   r]   r^   rf   rp   rg   rh   )	r\   r]   r^   rf   Úsortedrp   rg   Ú	isoformatrh   )Úselfs    rD   ÚpubliczDevice.publicY   sI   € àœØ”ZØœØ”kÝ" 4Ô#4Ñ5Ô5Øœ×1Ò1Ñ3Ô3Øœ/ð
ð 
ð 	
rC   ©r=   rr   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   rd   rf   rE   rg   rh   ÚasyncioÚLockrj   rl   rm   ro   Úsetrp   rq   rw   rB   rC   rD   rZ   rZ   H   sX  € € € € € € à€N€N�NØ€J€J�JØ€M€M�MØÐÐÑØ˜Ð/BÐ/BÐCÑCÔC€MÐCÐCÐCÑCØ€FÐÐÐÑØ˜%°Ð8Ñ8Ô8€IÐ8Ð8Ð8Ñ8Ø(,€JÐ,Ð,Ð,Ñ,Ø"' %¸¼È5Ð"QÑ"QÔ"Q€MÐQÐQÐQÑQØ).¨°tÀ%Ð)HÑ)HÔ)H€MÐHÐHÐHÑHØ"€KÐ"Ð"Ð"Ñ"ØÐÐÐÐÑØ"˜U°3Ð7Ñ7Ô7€LÐ7Ð7Ð7Ñ7Ø#˜e°G´LÀuÐMÑMÔM€IÐMÐMÐMÑMð	
ð 	
ð 	
ð 	
ð 	
ð 	
rC   rZ   c                  ó   — e Zd ZU ded<   dS )ÚApprovalDecisionzLiteral['approve', 'reject']ÚdecisionN©ry   rz   r{   r|   rB   rC   rD   r�   r�   e   s   € € € € € € Ø*Ð*Ð*Ñ*Ð*Ð*rC   r�   c                  óX   — e Zd ZU  edd¬¦  «        Zded<    edd¬¦  «        Zded<   dS )	ÚDisplayMessageé   éP   ©Ú
min_lengthÚ
max_lengthr[   Útitleiô  ÚbodyN)ry   rz   r{   r   r‹   r|   rŒ   rB   rC   rD   r…   r…   i   sR   € € € € € € Ø� !°Ð3Ñ3Ô3€EÐ3Ð3Ð3Ñ3Ø� ¨sÐ3Ñ3Ô3€DÐ3Ð3Ð3Ñ3Ð3Ð3rC   r…   c                  ó2   — e Zd ZU  ed¬¦  «        Zded<   dS )ÚTargetSelectionz;^(server|(?:agent:(?:pi|codex)|pi):[A-Za-z0-9._:-]{1,160})$)Úpatternr[   ÚtargetN©ry   rz   r{   r   r�   r|   rB   rC   rD   rŽ   rŽ   n   s1   € € € € € € Ø�%Ð ^Ð_Ñ_Ô_€FÐ_Ð_Ð_Ñ_Ð_Ð_rC   rŽ   c                  ó   — e Zd ZU ded<   dS )ÚNotificationTestzLiteral['done', 'failed']ÚkindNrƒ   rB   rC   rD   r“   r“   r   s   € € € € € € Ø#Ð#Ð#Ñ#Ð#Ð#rC   r“   zdict[str, Device]ÚdevicesÚdeviceÚpayloadrr   ÚNonec              ƒ  ó  K  — | j         r| j        €t          d¦  «        ‚| j        4 ƒd {V —† t	          j        | j                             |¦  «        d¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )Núdevice is offlineé   )rf   r_   ÚRuntimeErrorrq   r}   Úwait_forÚ	send_json)r–   r—   s     rD   Úsend_to_devicerŸ   y   sJ  è è € ØŒ=ð 0˜FÔ,Ð4ÝÐ.Ñ/Ô/Ð/ØÔð Gð Gð Gð Gð Gð Gð Gð GÝÔ˜vÔ/×9Ò9¸'ÑBÔBÀAÑFÔFÐFÐFÐFÐFÐFÐFÐFðGð Gð Gñ Gô Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gð Gøøøð Gð Gð Gð Gð Gð Gs   ­4A4Á4
A>ÂA>c                ód   — t                                | j        ¦  «        | u o| j        o| j        d uS r?   )r•   rL   r\   rf   r_   )r–   s    rD   Úcurrent_devicer¡   �   s1   € Ý�;Š;�vÔ'Ñ(Ô(¨FÐ2Ðe°v´}ÐeÈÔIYÐaeÐIeÐerC   c                ó6   — t                                | ¦  «        S r?   ©Útarget_storerL   ©Údids    rD   rb   rb   …   s   € µL×4DÒ4DÀSÑ4IÔ4I€ rC   c                ó    — t          | ¦  «        S r?   )Úadapter_for©Úagents    rD   rb   rb   …   s   € ÕYdÐejÑYkÔYk€ rC   c                 óN   — t          t                               ¦   «         ¦  «        S r?   )re   r8   Úlist_pendingrB   rC   rD   rb   rb   †   s   € ­Dµ×1GÒ1GÑ1IÔ1IÑ,JÔ,J€ rC   c                óÆ   — t           j                             | j        ¦  «        }t	          t
                               ¦   «         ¦  «        pt	          |o|j        dv ¦  «        S )N)Ú	RECORDINGÚTRANSCRIBINGÚAWAITING_CONFIRMATIONÚSENDING)ÚvoicesÚrequestsrL   rd   re   r8   r¬   Ústate)r–   Úvoices     rD   Úspeech_blockedr¶   ‰   sd   € ÝŒO×Ò Ô 4Ñ5Ô5€EÝ•	×&Ò&Ñ(Ô(Ñ)Ô)ð  N­T°%ð  3M¸E¼Kð  LMð  =Mñ  .Nô  .Nð  NrC   ÚGATEWAY_SPEECH_FILEz*~/.config/esp32-device-gateway/speech.jsonc                ó6   — t                                | ¦  «        S r?   r£   r¥   s    rD   rb   rb   �   s   € •× Ò  Ñ%Ô%€ rC   rn   ©ÚnameÚlatest_activityc          
     ó˜   — t          t                               ¦   «         ¦  «        D ]"}t                               || |||||¦  «         Œ#d S r?   )Úlistr•   ÚvaluesÚspeechesÚterminal)rª   Ú
session_idr´   Ú
final_textrº   r»   r–   s          rD   Úon_agent_terminalrÃ   “   sT   € Ý•w—~’~Ñ'Ô'Ñ(Ô(ð _ð _ˆÝ×Ò˜& %¨°U¸JÈÈoÑ^Ô^Ð^Ð^ð_ð _rC   c                ó(  — t                                ¦   «         rdt          t                               ¦   «         ¦  «        D ]=}t
                               |¦  «         t                               |¦  «         d |_        Œ>|  	                    ¦   «          d S r?   )
r8   r¬   r½   r•   r¾   r¿   Úcancelr²   rm   r   )Úchangedr–   s     rD   Úapprovals_changedrÇ   ˜   sw   € Ý×ÒÑÔð &Ý�7Ÿ>š>Ñ+Ô+Ñ,Ô,ð 	&ð 	&ˆFÝ�OŠO˜FÑ#Ô#Ð#Ý�MŠM˜&Ñ!Ô!Ð!Ø!%ˆFÔÐØ‡K‚K�M„M€M€M€MrC   c              ƒ  ó   K  — |d         dk    r'| j         |                     d¦  «        k    rd | _         d S | j        4 ƒd {V —† t          | |¦  «        ƒ d {V —† d d d ¦  «        ƒd {V —† d S # 1 ƒd {V —†swxY w Y   d S )NÚtypeÚsettings_cancelÚ
request_id)rm   rL   rj   Ú_device_settings)r–   Úevents     rD   Údevice_settingsrÎ   ¡   s%  è è € ØˆV„}Ð)Ò)Ð)ØÔ §¢¨<Ñ!8Ô!8Ò8Ð8Èt¸&Ô:LØˆØÔ#ð .ð .ð .ð .ð .ð .ð .ð .Ý˜v uÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð .ð .s   ÁA-Á-
A7Á:A7c              ƒ  óê  ‡ ‡‡K  — |                      d¦  «        Št          ‰t          ¦  «        rdt          ‰¦  «        cxk    rdk    sn d S |d         dk    r‰ j        ‰k    rd ‰ _        d S t
                                ‰ j        ¦  «        Št          ‰¦  «        }|st          ‰ d‰ddœ¦  «        ƒ d {V —† d S t           
                    ¦   «         st          ‰ ¦  «        sd S |d         d	k    r‰‰ _        n&‰ j        ‰k    s|                      d
¦  «        ‰k    rd S ˆ ˆˆfd„}	 |\  }}t          |¦  «        }|                     |¦  «        ƒ d {V —†} |¦   «         sd S |d         dk    rE|                     |t          j        |                      di ¦  «        ¦  «        |¬¦  «        ƒ d {V —†}n|                     |¦  «        ƒ d {V —†} |¦   «         sd S |                     t&                                |j        ¦  «        ¦  «        ƒ d {V —†}	t+          |d„ t-          |	d„ d¬¦  «        D ¦   «         ¦  «        } |¦   «         rMt          ‰ t/          d|d         dk    rdnd‰‰|j        dœ|¤Ž¦  «        ƒ d {V —† |d         dk    rd ‰ _        d S d S d S # t2          $ rQ}
 |¦   «         r<t          ‰ d‰t          |
t4          ¦  «        r|
j        nddœ¦  «        ƒ d {V —† Y d }
~
d S Y d }
~
d S d }
~
ww xY w)NrË   r†   é@   rÉ   rÊ   Úsettings_errorzNO AGENT SELECTED©rÉ   rË   ÚmessageÚsettings_getr�   c                 ó²   •— t          ‰ ¦  «        oG‰ j        ‰k    o<t                               ‰ j        ¦  «        ‰k    ot
                               ¦   «          S r?   )r¡   rm   r¤   rL   r\   r8   r¬   )r–   Úridr�   s   €€€rD   Úvalidz_device_settings.<locals>.valid¼   st   ø€ Ý˜fÑ%Ô%ð  V¨&Ô*<ÀÒ*Cð  VÍ×HXÒHXÐY_ÔYiÑHjÔHjÐntÒHtð  Võ  ~G÷  ~Tò  ~Tñ  ~Vô  ~Vð  zVð  	VrC   Úsettings_applyÚsettings)Ústill_validc                ó*   — g | ]}|j         ¯	|j         ‘ŒS rB   )Úmodel)Ú.0Úss     rD   ú
<listcomp>z$_device_settings.<locals>.<listcomp>Ê   s8   € ð  ,Að  ,Að  ,A¸ÐxyÔxð  ,A¨A¬Gð  ,Að  ,Að  ,ArC   c                ó   — | j         S r?   )Ú
updated_at)rÞ   s    rD   rb   z"_device_settings.<locals>.<lambda>Ê   s
   € ÐYZÔYe€ rC   T)ÚkeyÚreverseÚsettings_updatedÚsettings_state)rÉ   rË   r�   rº   zUPDATE FAILEDrB   )rL   Ú
isinstancer[   Úlenrm   r¤   r\   r   rŸ   r8   r¬   r¡   r¨   Úget_sessionÚupdate_settingsr)   Úmodel_validateÚget_settingsÚlist_sessionsÚproject_registryÚ
project_idr%   rt   Údictrº   Ú	Exceptionr&   Údetail)r–   rÍ   Úparsedr×   rª   ÚsidÚadapterÚsessionrÙ   ÚrecentÚexcrÖ   r�   s   `          @@rD   rÌ   rÌ   ©   s‰  øøøè è € Ø
�)Š)�LÑ
!Ô
!€CÝ�c�3ÑÔð  q­C°©H¬HÐ':Ð':Ò':Ð':¸Ò':Ð':Ð':Ð':ØˆØˆV„}Ð)Ò)Ð)ØÔ Ò$Ð$Ø!%ˆFÔØˆÝ×Ò˜fÔ.Ñ/Ô/€FÝ˜&Ñ!Ô!€FØð Ý˜VÐ-=È3ÐYlÐ%mÐ%mÑnÔnÐnÐnÐnÐnÐnÐnÐnØˆÝ×ÒÑÔð ¥~°fÑ'=Ô'=ð ØˆØˆV„}˜Ò&Ð&Ø ˆÔÐØ	Ô	˜sÒ	"Ð	" e§i¢i°Ñ&9Ô&9¸VÒ&CÐ&CØˆðVð Vð Vð Vð Vð Vð Vð]Ø‰
ˆˆsÝ˜eÑ$Ô$ˆØ×+Ò+¨CÑ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0ˆØˆu‰wŒwÐ˜˜Ø�Œ=Ð,Ò,Ð,à$×4Ò4°S½(Ô:QÐRW×R[ÒR[Ð\fÐhjÑRkÔRkÑ:lÔ:lÐzÐ4ñ  Aô  Að  Að  Að  Að  Að  Að  AˆHˆHà$×1Ò1°#Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6ˆHØˆu‰wŒwÐ˜˜Ø×,Ò,Õ-=×-AÒ-AÀ'ÔBTÑ-UÔ-UÑVÔVÐVÐVÐVÐVÐVÐVˆÝ  ð  ,Að  ,A½VÀFÐPeÐPeÐosÐ=tÑ=tÔ=tð  ,Añ  ,Aô  ,Añ  Bô  BˆØˆ5‰7Œ7ð 	JÝ  ­ð *NÈÈvÌÐXhÒIhÐIhÐ3EÐ3EÐn~Ø v°G´Lð*Nð *NØDLð*Nð *Nñ Oô Oð Oð Oð Oð Oð Oð Oð Oà�VŒ}Ð.Ò.Ð.ÀT°Ô0BÐ0BÐ0Bð	Jð 	Jð /Ð.øÝð ]ð ]ð ]Øˆ5‰7Œ7ð 	]Ý  Ð1AÈsÝ(2°3½Ñ(EÔ(EÐZ˜#œ*˜*È?ð*\ð *\ñ ]ô ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð	]ð 	]ð 	]ð 	]ð 	]ð 	]øøøøð]øøøs'   Ä&9J Å!A6J ÇB8J Ê
K2Ê!A K-Ë-K2c              ƒ  óx  K  — t          t                               ¦   «         ¦  «        D �]}|j        r|j        €Œ	 t          || ¦  «        ƒ d {V —† Œ*# t          $ rÚ t                               |dd¬¦  «         t                               |dd¬¦  «         d |_
        |j        rMt          t          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t          ¦   «         |_        t                               d|j        ¦  «         Y �Œw xY wd S )NFT©ÚnotifyÚforgetéó  ©Úcodez4device %s disconnected while pushing server_snapshot)r½   r•   r¾   rf   r_   rŸ   rð   r¿   rÅ   r²   rm   r   ÚcloserE   rg   rN   rO   r\   )r—   r–   s     rD   Úbroadcast_server_snapshotr   Õ   s~  è è € Ý•w—~’~Ñ'Ô'Ñ(Ô(ð eñ eˆØŒ}ð 	 Ô 0Ð 8Øð	eÝ  ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øÝð 		eð 		eð 		eÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�NŠNÐQÐSYÔScÑdÔdÐdÐdÑdð		eøøøðeð es7   ¼AÁA&D7Â9"C'ÃD7Ã'C+Ã+D7Ã.C+Ã/AD7Ä6D7c               ƒ  óð   K  — 	 t                                ¦   «         } t          |                      ¦   «         ¦  «        ƒ d {V —† t	          ¦   «         ƒ d {V —† t          j        t          ¦  «        ƒ d {V —† Œtr?   )Úsystem_collectorÚcollectr   Ú
model_dumpÚpush_agent_targetsr}   ÚsleepÚsnapshot_interval_seconds©Úsnapshots    rD   Úmonitor_systemr
  ç   sŽ   è è € ð7Ý#×+Ò+Ñ-Ô-ˆÝ'¨×(;Ò(;Ñ(=Ô(=Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ý Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ÝŒmÕ5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð	7rC   c            	   ƒ  óž  K  — t          t                               ¦   «         ¦  «        D �]Z} | j        }| j        r| j        s!t          j                             |d ¦  «         Œ9	 t          j         	                    |¦  «        }t           	                    |¦  «        }|rP|�|j
        dk    rCt          | d||r|j
        nddœ¦  «        ƒ d {V —† t          j                             |d ¦  «         |t          j        vr³t                               ¦   «         }|r˜|d         }t                               | ¦  «         t                               | ¦  «         d | _        |j        t          j        |<   t%          j        t          | t                               |¦  «        ¦  «        d¦  «        ƒ d {V —† �Œˆ# t*          $ rÇ t          j                             |d ¦  «         t                               | dd¬	¦  «         t                               | dd¬	¦  «         d | _        d| _        | j        rMt-          t*          ¦  «        5  | j                             d
¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d | _        Y �ŒXw xY wt          t0          j                             ¦   «         ¦  «        D ]}t5          |j        ¦  «        ƒ d {V —† Œd S )NÚPENDINGÚapproval_cancelledÚ	CANCELLED)rÉ   Úapproval_idr´   r   r›   FTrù   rü   rý   )r½   r•   r¾   rd   rf   r_   r8   ÚpresentationsÚpoprL   r´   rŸ   r¬   r¿   rÅ   r²   rm   r  r}   r�   Úwirerð   r   rÿ   Úpi_sessionsÚsessionsÚpush_selected_pi_sessionrÁ   )r–   Ú
connectionÚ
current_idÚcurrentÚpendingÚapprovalrõ   s          rD   Úsynchronize_approvalsr  ï   s7  è è € õ •w—~’~Ñ'Ô'Ñ(Ô(ð $ñ $ˆØÔ)ˆ
ØŒ}ð 	 FÔ$4ð 	ÝÔ#×'Ò'¨
°DÑ9Ô9Ð9Øð	$Ý"Ô0×4Ò4°ZÑ@Ô@ˆJÝ—m’m JÑ/Ô/ˆGØð >˜w˜°'´-À9Ò2LÐ2LÝ$ VÐ6JÐ[eØ.5ÐF˜Wœ]˜]¸;ð.Hð .Hñ Iô Ið Ið Ið Ið Ið Ið Ið IåÔ'×+Ò+¨J¸Ñ=Ô=Ð=Ø¥Ô!8Ð8Ð8Ý#×0Ò0Ñ2Ô2�Øð `Ø& qœz�HÝ—O’O FÑ+Ô+Ð+Ý—M’M &Ñ)Ô)Ð)Ø)-�FÔ&Ø:BÔ:N•IÔ+¨JÑ7Ý!Ô*­>¸&Å)Ç.Â.ÐQYÑBZÔBZÑ+[Ô+[Ð]^Ñ_Ô_Ð_Ð_Ð_Ð_Ð_Ð_Ð_ùøÝð 		$ð 		$ð 		$ÝÔ#×'Ò'¨
°DÑ9Ô9Ð9Ý�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØ!ˆFŒMØÔð <Ý�iÑ(Ô(ð <ð <Ø Ô*×0Ò0°dÐ0Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð<ð <ð <ñ <ô <ð <ð <ð <ð <ð <ð <øøøð <ð <ð <ð <à#ˆFÔÐÑð		$øøøõ �Ô,×3Ò3Ñ5Ô5Ñ6Ô6ð ;ð ;ˆÝ& wÔ'9Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ð;ð ;s8   Á#EF1Æ1BJÈ>"I,É JÉ,I0É0JÉ3I0É4
JÊJc              ƒ  óŽ   K  — 	 |                       ¦   «         ƒ d {V —† |                      ¦   «          t          ¦   «         ƒ d {V —† ŒCr?   )ÚwaitÚclearr  ©rÆ   s    rD   Úapproval_deliveryr     s[   è è € ð&Ø�lŠl‰nŒnÐÐÐÐÐÐÐØ�Š‰ŒˆÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð&rC   Ú_r   c           	    ó.  ‡K  — t          j        ¦   «         Šˆfd„t          _        dt          v r.t
          t          d         _        t          t          d         _        t          t          t          ¦  «        }|                     ¦   «         ƒ d {V —† t          j        t          ‰¦  «        d¬¦  «        }t          j        t          ¦   «         d¬¦  «        }	 d W V — t                               ¦   «          t                                ¦   «         ƒ d {V —† t"                               ¦   «         ƒ d {V —† |                     ¦   «         ƒ d {V —† t          j        d„ t                               ¦   «         D ¦   «         Ž ƒ d {V —† t)          ¦   «         ƒ d {V —† d t          _        ||fD ]O}|                     ¦   «          t-          t           j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ŒPd S # t                               ¦   «          t                                ¦   «         ƒ d {V —† t"                               ¦   «         ƒ d {V —† |                     ¦   «         ƒ d {V —† t          j        d„ t                               ¦   «         D ¦   «         Ž ƒ d {V —† t)          ¦   «         ƒ d {V —† d t          _        ||fD ]O}|                     ¦   «          t-          t           j        ¦  «        5  |ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   ŒPw xY w)Nc                 ó"   •— t          ‰ ¦  «        S r?   )rÇ   r  s   €rD   rb   zlifespan.<locals>.<lambda>!  s   ø€ Õ"3°GÑ"<Ô"<€ rC   r<   zapproval-delivery)rº   zsystem-monitorc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S r?   )rÿ   )rÝ   rô   s     rD   ú	<genexpr>zlifespan.<locals>.<genexpr>0  s*   è è € ÐPÐP°7˜wŸ}š}™œÐPÐPÐPÐPÐPÐPrC   )r}   ÚEventr8   Ú	on_changeÚadaptersÚqueue_codex_activityÚon_activityrÃ   Úon_terminalr.   rí   ÚstartÚcreate_taskr   r
  rÿ   r¿   r²   Úgatherr¾   r  rÅ   r   ÚCancelledError)r!  Úapproval_serverÚdelivery_taskÚmonitor_taskÚtaskrÆ   s        @rD   Úlifespanr4    s¶  øè è € åŒm‰oŒo€GØ<Ð<Ð<Ð<…IÔØ•(ÐÐÝ(<��ÔÔ%Ý(9��ÔÔ%Ý&¥yÕ2BÑCÔC€OØ
×
Ò
Ñ
!Ô
!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ÝÔ'Õ(9¸'Ñ(BÔ(BÐI\Ð]Ñ]Ô]€MÝÔ&¥~Ñ'7Ô'7Ð>NÐOÑOÔO€LðØˆˆˆˆå�ŠÑÔÐÝ�nŠnÑÔÐÐÐÐÐÐÐÝ�lŠl‰nŒnÐÐÐÐÐÐÐØ×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ÝŒnÐPÐP½h¿oºoÑ>OÔ>OÐPÑPÔPÐQÐQÐQÐQÐQÐQÐQÐQÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø"�	ÔØ! =Ð1ð 	ð 	ˆDØ�KŠK‰MŒMˆMÝ�'Ô0Ñ1Ô1ð ð Ø�
�
�
�
�
�
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð	ð 	øõ 	�ŠÑÔÐÝ�nŠnÑÔÐÐÐÐÐÐÐÝ�lŠl‰nŒnÐÐÐÐÐÐÐØ×#Ò#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ÝŒnÐPÐP½h¿oºoÑ>OÔ>OÐPÑPÔPÐQÐQÐQÐQÐQÐQÐQÐQÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø"�	ÔØ! =Ð1ð 	ð 	ˆDØ�KŠK‰MŒMˆMÝ�'Ô0Ñ1Ô1ð ð Ø�
�
�
�
�
�
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð	øøøsC   ÃG8 Ç	G*Ç*G.	Ç1G.	Ç8C:LË2	L	Ë;LÌLÌLÌLÌLzDevice Lab Gatewayú0.5.0)r‹   Úversionr4  r÷   r&   c              ƒ  ó@   K  — t          |j        d|j        i¬¦  «        S )Nrñ   )Ústatus_codeÚcontent)r   Ústatusrñ   )Úrequestr÷   s     rD   Úcontrol_error_handlerr<  <  s"   è è € å C¤J¸À3Ä:Ð8NÐOÑOÔOÐOrC   rª   r[   c                óN   — | t           vrt          dd¦  «        ‚t           |          S )Nzagent adapter not enabledé”  )r(  r&   r©   s    rD   r¨   r¨   A  s(   € Ø•HÐÐÝÐ6¸Ñ<Ô<Ð<Ý�EŒ?ÐrC   z/api/approvalsc               ƒ  óL   K  — d„ t                                ¦   «         D ¦   «         S )Nc                ó:   — g | ]}|                      d ¬¦  «        ‘ŒS )Újson)Úmode)r  )rÝ   r  s     rD   rß   z"list_approvals.<locals>.<listcomp>I  s)   € ÐVÐVÐV°ˆH×Ò VÐÑ,Ô,ÐVÐVÐVrC   )r8   r¬   rB   rC   rD   Úlist_approvalsrC  G  s&   è è € àVÐV½Y×=SÒ=SÑ=UÔ=UÐVÑVÔVÐVrC   z%/api/approvals/{approval_id}/decisionr  rV   c              ƒ  ó®   K  — t                                | |j        ¦  «        st          dd¬¦  «        ‚d| t                                | ¦  «        j        dœS )Né™  z'approval is missing or already resolved©r8  rñ   T)Úacceptedr  r´   )r8   Úresolver‚   r   rL   r´   )r  rV   s     rD   Údecide_approvalrI  L  sU   è è € å×Ò˜[¨%¬.Ñ9Ô9ð _Ý¨Ð4]Ð^Ñ^Ô^Ð^Ø¨[Å9Ç=Â=ÐQ\ÑC]ÔC]ÔCcÐdÐdÐdrC   z/api/projectsc               ƒ  ó8   K  — t                                ¦   «         S r?   )rí   r½   rB   rC   rD   Úlist_projectsrK  S  s   è è € å× Ò Ñ"Ô"Ð"rC   éÉ   ©r8  Úprojectr(   c              ƒ  ó:   K  — t                                | ¦  «        S r?   )rí   Úadd)rN  s    rD   Úadd_projectrQ  X  s   è è € å×Ò Ñ(Ô(Ð(rC   z/api/projects/{project_id}éÌ   rî   c              ƒ  ó>   K  — t                                | ¦  «         d S r?   )rí   Údelete)rî   s    rD   Údelete_projectrU  ]  s    è è € å×Ò˜JÑ'Ô'Ð'Ð'Ð'rC   z/api/agentsc               ƒ  ó(   K  — d„ t           D ¦   «         S )Nc                ó   — g | ]	}|g d ¢dœ‘Œ
S ))rì   Úresume_sessionÚ
send_inputrë   Úlist_modelsré   )rª   rp   rB   )rÝ   rº   s     rD   rß   zlist_agents.<locals>.<listcomp>d  sM   € ð  gð  gð  gð  VZ�dð  -Pð  -Pð  -Pð  Qð  Qð  gð  gð  grC   )r(  rB   rC   rD   Úlist_agentsr[  b  s1   è è € ð gð  gõ  ^fð  gñ  gô  gð  grC   z#/api/projects/{project_id}/sessionsc              ƒ  ó�  ‡K  — t                                | ¦  «        Šg i }}t          j        ˆfd„t                               ¦   «         D ¦   «         ddiŽƒ d {V —†}t          t          |¦  «        D ]Q\  }}t          |t          ¦  «        r"t          |t          ¦  «        r|j
        nd||<   Œ<|                     |¦  «         ŒR||dœS )Nc              3  óB   •K  — | ]}|                      ‰¦  «        V — Œd S r?   )rì   )rÝ   rô   rN  s     €rD   r%  z#project_sessions.<locals>.<genexpr>k  s1   øè è € Ð$eÐ$eÈ W×%:Ò%:¸7Ñ%CÔ%CÐ$eÐ$eÐ$eÐ$eÐ$eÐ$erC   Úreturn_exceptionsTzagent catalog unavailable)r  Úerrors)rí   rL   r}   r.  r(  r¾   Úzipræ   rð   r&   rñ   Úextend)rî   r  r_  Úresultsrº   ÚresultrN  s         @rD   Úproject_sessionsrd  g  sß   øè è € å×"Ò" :Ñ.Ô.€GØ˜2ˆf€HÝ”NÐ$eÐ$eÐ$eÐ$eÕS[×SbÒSbÑSdÔSdÐ$eÑ$eÔ$eÐ~Ðy}Ð~Ð~Ð~Ð~Ð~Ð~Ð~Ð~€GÝ�H gÑ.Ô.ð $ð $‰ˆˆfÝ�f�iÑ(Ô(ð 	$Ý,6°v½|Ñ,LÔ,LÐm˜6œ=˜=ÐRmˆF�4‰LˆLà�OŠO˜FÑ#Ô#Ð#Ð#Ø ¨FÐ3Ð3Ð3rC   z)/api/agents/{agent}/sessions/{session_id}rÁ   c              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S r?   )r¨   rè   ©rª   rÁ   s     rD   Úget_agent_sessionrg  t  s4   è è € å˜UÑ#Ô#×/Ò/°
Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;rC   z0/api/agents/{agent}/sessions/{session_id}/resumec              ƒ  ód   K  — t          | ¦  «                             |¦  «        ƒ d {V —†}d| ||dœS )NT)rG  rª   rÁ   Úresumed)r¨   rX  )rª   rÁ   ri  s      rD   Úresume_agent_sessionrj  y  sF   è è € å Ñ&Ô&×5Ò5°jÑAÔAÐAÐAÐAÐAÐAÐA€GØ u¸JÐSZÐ[Ð[Ð[rC   z//api/agents/{agent}/sessions/{session_id}/inputéÊ   r'   c              ƒ  ób   K  — t          | ¦  «                             ||j        ¦  «        ƒ d {V —†S r?   )r¨   rY  Útext©rª   rÁ   rV   s      rD   Úagent_inputro    s8   è è € å˜UÑ#Ô#×.Ò.¨z¸5¼:ÑFÔFÐFÐFÐFÐFÐFÐFÐFrC   z2/api/agents/{agent}/sessions/{session_id}/settingsc              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S r?   )r¨   rë   rf  s     rD   rë   rë   „  s4   è è € å˜UÑ#Ô#×0Ò0°Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<rC   r)   c              ƒ  óX   K  — t          | ¦  «                             ||¦  «        ƒ d {V —†S r?   )r¨   ré   rn  s      rD   ré   ré   ‰  s6   è è € å˜UÑ#Ô#×3Ò3°JÀÑFÔFÐFÐFÐFÐFÐFÐFÐFrC   z/healthc               ƒ  ón   K  — ddt          d„ t                               ¦   «         D ¦   «         ¦  «        dœS )NÚokr5  c              3  ó$   K  — | ]}|j         V — Œd S r?   )rf   )rÝ   Úds     rD   r%  zhealth.<locals>.<genexpr>�  s%   è è € ÐMqÐMqÐ[\ÈaÌhÐMqÐMqÐMqÐMqÐMqÐMqrC   )r:  Úcontrol_versionÚonline_devices)Úsumr•   r¾   rB   rC   rD   Úhealthry  Ž  s:   è è € à¨wÍ#ÐMqÐMqÕ`g×`nÒ`nÑ`pÔ`pÐMqÑMqÔMqÑJqÔJqÐrÐrÐrrC   ú/F)Úinclude_in_schemar   c               ƒ  ó(   K  — t          dd¬¦  «        S )Nú/admini3  rM  )r   rB   rC   rD   Úrootr~  “  s   è è € å˜H°#Ð6Ñ6Ô6Ð6rC   r}  r   c               ƒ  ó2   K  — t          t          d¬¦  «        S )Nz	text/html©Ú
media_type)r   Úadmin_page_pathrB   rC   rD   Ú
admin_pagerƒ  ˜  s   è è € å�°KÐ@Ñ@Ô@Ð@rC   z/api/admin.jsc               ƒ  ó¨   K  — t          t          j                             t          j                             t
          ¦  «        d¦  «        d¬¦  «        S )Nzadmin.jsztext/javascriptr€  )r   rJ   ÚpathÚjoinÚdirnamer‚  rB   rC   rD   Úadmin_scriptrˆ  �  s8   è è € å�œŸš¥R¤W§_¢_µ_Ñ%EÔ%EÀzÑRÔRÐ_pÐqÑqÔqÐqrC   z/serverc               ƒ  óx   K  — t           j        pt                                ¦   «         } |                      ¦   «         S r?   )r  Úlatestr  r  r  s    rD   Úserver_statusr‹  ¢  s2   è è € åÔ&ÐDÕ*:×*BÒ*BÑ*DÔ*D€HØ×ÒÑ Ô Ð rC   z/devicesúlist[dict[str, Any]]c               ƒ  óX  K  — g } t          t                               ¦   «         d„ ¬¦  «        D ]{}|                     ¦   «         }t                               |j        ¦  «        |d<   t          j                             |j        |d         ¦  «        |d<   |  	                    |¦  «         Œ|| S )Nc                ó   — | j         S r?   )r\   )ru  s    rD   rb   zlist_devices.<locals>.<lambda>«  s   € ¸¼€ rC   )râ   r�   Úspeech_mode)
rt   r•   r¾   rw   r¤   rL   r\   r¿   ÚpreferencesÚappend)rc  r–   Úitems      rD   Úlist_devicesr“  ¨  sš   è è € à€FÝ�ŸšÑ)Ô)Ð/DÐ/DÐEÑEÔEð ð ˆØ�}Š}‰ŒˆÝ%×)Ò)¨&Ô*:Ñ;Ô;ˆˆX‰Ý&Ô2×6Ò6°vÔ7GÈÈhÌÑXÔXˆˆ]ÑØ�Š�dÑÔÐÐØ€MrC   z/api/statusc               ƒ  ór  K  — t           j        pt                                ¦   «         } t                               ¦   «         }|D ]K}t
                               d|d         ¦  «        }|r&d|d<   |d         j        dz   |d         j        z   |d<   ŒL|  	                    ¦   «         t          ¦   «         ƒ d {V —†|dœS )	Nr7   rÁ   ÚWAITING_APPROVALr´   r   ú: Úwaiting_reason)Úserverr•   r  )r  rŠ  r  r  rw   r8   r¬   r‹   rñ   r  r“  )r	  r  rõ   r  s       rD   Úadmin_statusr™  ³  sÍ   è è € åÔ&ÐDÕ*:×*BÒ*BÑ*DÔ*D€HÝ×!Ò!Ñ#Ô#€HØð Tð TˆÝ×(Ò(¨¨w°|Ô/DÑEÔEˆØð 	TØ1ˆG�GÑØ(/°¬
Ô(8¸4Ñ(?À'È!Ä*ÔBSÑ(SˆGÐ$Ñ%øà×%Ò%Ñ'Ô'Ý%™œÐ'Ð'Ð'Ð'Ð'Ð'Øðð ð rC   Únotificationú Literal['done', 'failed'] | Nonec           
     ó.  — t                                | ¦  «        }|€ddd| › �| | dddd dœ	S ddd| › �dœ|                     d	¬
¦  «        ¥}t                               d| ¦  «        }|r&d|d<   |d         j        dz   |d         j        z   |d<   |�||d<   |S )NÚagent_stater7   ú	agent:pi:rn   ÚOFFLINEr   )	rÉ   rª   r�   rÁ   rº   Úcwdr´   Úelapsed_secondsr—  )rÉ   rª   r�   T)Úinclude_historyr•  r´   r–  r—  rš  )r  rL   rw   r8   r¬   r‹   rñ   )rÁ   rš  rõ   r—   r  s        rD   Úpi_target_payloadr£  Ã  sã   € õ �oŠo˜jÑ)Ô)€GØ€à!¨DØ. *Ð.Ð.Ø$ØØØØ Ø"ð	
ð 	
ð 		
ð ¨Ø*˜jÐ*Ð*ðð ð �.Š.¨ˆ.Ñ
.Ô
.ð€Gõ
 ×$Ò$ T¨:Ñ6Ô6€GØð PØ-ˆ�ÑØ$+¨A¤JÔ$4°tÑ$;¸gÀa¼jÔ>OÑ$OˆÐ Ñ!ØÐØ".ˆ�ÑØ€NrC   c              ƒ  ó¦  K  — t          d| › �¦  «        ƒ d {V —†}|�||d<   t          t                               ¦   «         ¦  «        D �]}t                               |j        ¦  «        d| › �k    rŒ*	 t          ||¦  «        ƒ d {V —† ŒB# t          $ rº t           
                    |dd¬¦  «         t           
                    |dd¬¦  «         d |_        |j        rMt          t          ¦  «        5  |j                             d¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t#          ¦   «         |_        Y �Œw xY wd S )Nrž  rš  FTrù   rü   rý   )Úagent_target_payloadr½   r•   r¾   r¤   rL   r\   rŸ   rð   r¿   rÅ   r²   rm   r_   r   rÿ   rf   rE   rg   )rÁ   rš  r—   r–   s       rD   r  r  à  s¨  è è € õ )Ð)A°ZÐ)AÐ)AÑBÔBÐBÐBÐBÐBÐBÐB€GØÐ¸< ¨Ñ!8Ý•w—~’~Ñ'Ô'Ñ(Ô(ð )ñ )ˆÝ×Ò˜FÔ,Ñ-Ô-Ð1I¸ZÐ1IÐ1IÒIÐIØð
	)Ý  ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øÝð 	)ð 	)ð 	)Ý�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÐÑð	)øøøð)ð )s7   Á3B
Â
A&EÃ0"DÄEÄD"Ä"EÄ%D"Ä&$EÅErÍ   r   c              ƒ  óH  K  — t                                | j        ¦  «        }|�|j        sd S ddd| j        › �| j        |j        |j        |j        �|j                             ¦   «         nd dœ}t          t           	                    ¦   «         ¦  «        D �]}t                               |j        ¦  «        d| j        › �k    rŒ/	 t          ||¦  «        ƒ d {V —† ŒG# t          $ rº t                               |dd¬¦  «         t                                |dd¬¦  «         d |_        |j        rMt'          t          ¦  «        5  |j                             d¬	¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t-          ¦   «         |_        Y �Œ
w xY wd S )
NÚagent_activityr7   rž  )rÉ   rª   r�   rÁ   Úactivity_typeÚactivityrá   FTrù   rü   rý   )r  rL   rÁ   r»   r¨  Úactivity_updated_atru   r½   r•   r¾   r¤   r\   rŸ   rð   r¿   rÅ   r²   rm   r_   r   rÿ   rf   rE   rg   )rÍ   rõ   r—   r–   s       rD   Úpush_selected_pi_activityr«  õ  sï  è è € Ý�oŠo˜eÔ.Ñ/Ô/€GØ€˜gÔ5€Øˆà ¨4Ø0˜eÔ.Ð0Ð0ØÔ&Ø Ô.ØÔ+ð Ô*Ð6ð Ô'×1Ò1Ñ3Ô3Ð3àðð €Gõ •w—~’~Ñ'Ô'Ñ(Ô(ð )ñ )ˆÝ×Ò˜FÔ,Ñ-Ô-Ð1O¸UÔ=MÐ1OÐ1OÒOÐOØð
	)Ý  ¨Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øÝð 	)ð 	)ð 	)Ý�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÐÑð	)øøøð)ð )s7   ÃCÃA&FÅ"E/Å#FÅ/E3Å3FÅ6E3Å7$FÆFc              ƒ  óL  K  — t          | ¦  «        }|sdddœS |\  }}	 t          |¦  «                             |¦  «        ƒ d {V —†}|dk    rEt          t          |¦  «        d¦  «        r(t          |¦  «                             |¦  «        ƒ d {V —† dt          | ¦  «        dœ|                     ¦   «         ¥}|                     dd¦  «                             d	¦  «        d
d …          	                    d	d¬¦  «        |d<   |dk    rCt                               |¦  «        r)|j        r"|                     t          |¦  «        ¦  «         |S # t          $ rM |dk    r+t                               |¦  «        rt          |¦  «        cY S dt          | ¦  «        |||ddd d dœ	cY S w xY w)NÚtarget_stater˜  )rÉ   r�   r<   Úobserve_sessionr�  Úrecent_textrn   zutf-8i`ðÿÿÚignore)r_  r7   rŸ  r   )	rÉ   r�   rª   rÁ   rº   r´   r¡  rÜ   Úeffort)r   r¨   rè   Úhasattrr®  r   r  rL   ÚencodeÚdecoder  ÚliveÚupdater£  r&   )r�   rò   rª   ró   rõ   r—   s         rD   r¥  r¥    sé  è è € Ý˜&Ñ!Ô!€FØð :Ø%°Ð9Ð9Ð9Ø�J€Eˆ3ðYÝ# EÑ*Ô*×6Ò6°sÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;ˆØ�GÒÐ¥­°EÑ(:Ô(:Ð<MÑ NÔ NÐÝ˜eÑ$Ô$×4Ò4°SÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ø'Õ1AÀ&Ñ1IÔ1IÐbÐbÈW×M_ÒM_ÑMaÔMaÐbˆØ!(§¢¨]¸2Ñ!>Ô!>×!EÒ!EÀgÑ!NÔ!NÈuÈvÈvÔ!V×!]Ò!]Ð^eÐnvÐ!]Ñ!wÔ!wˆ�ÑØ�DŠ=ˆ=�[Ÿ_š_¨SÑ1Ô1ˆ=°g´lˆ=Ø�NŠNÕ,¨SÑ1Ô1Ñ2Ô2Ð2ØˆøÝð Yð Yð YØ�DŠ=ˆ=�[Ÿ_š_¨SÑ1Ô1ˆ=Ý$ SÑ)Ô)Ð)Ð)Ð)Ø$Õ.>¸vÑ.FÔ.FÈuÐbeØ˜y¸1ÀTÐSWðYð Yð 	Yð 	Yð 	YðYøøøs   ŸD,E Å9F#ÆF#Æ"F#c              ƒ  óÂ  K  — i }t          t                               ¦   «         ¦  «        D �]²}t                               |j        ¦  «        }t          |¦  «        }t          |¦  «        r|r
| r	|| |fk    rŒM	 ||vrt          |¦  «        ƒ d {V —†||<   ||         }t                               |j        ¦  «        |k    st          |¦  «        sŒ¥|rrt          |t          d||d         |d         |                     d¦  «        |                     dd¦  «        |                     dd¦  «        ¬¦  «        ¦  «        ƒ d {V —† nnt          |¦  «        }|d         d	k    r0|j        d
v r'|d         dv r|d                              ¦   «         |d<   |d         |_        t          ||¦  «        ƒ d {V —† �Œ‰# t          $ r t                               d¦  «         Y �Œ°w xY wd S )Nr§  r   r†   r¨  r»   rn   r¯  )rÉ   r�   rª   rÁ   r¨  r©  r¯  r<   )ÚRUNNINGr•  r´   )ÚDONEÚFAILEDrš  zAgent target delivery failed)r½   r•   r¾   r¤   rL   r\   r   r¡   r¥  rŸ   rï   ro   Úlowerrð   rN   rO   )	rª   ró   r©  Úcacher–   r�   rò   r—   Úoutgoings	            rD   r  r  *  s\  è è € Ø€EÝ•w—~’~Ñ'Ô'Ñ(Ô(ð ;ñ ;ˆÝ×!Ò! &Ô"2Ñ3Ô3ˆÝ˜fÑ%Ô%ˆÝ˜fÑ%Ô%ð 	¨Vð 	¸ð 	À&ÈUÐTWÈLÒBXÐBXØð	;Ø˜UÐ"Ð"Õ:NÈvÑ:VÔ:VÐ4VÐ4VÐ4VÐ4VÐ4VÐ4V E¨&¡MØ˜F”mˆGå×Ò Ô 0Ñ1Ô1°VÒ;Ð;Å>ÐRXÑCYÔCYÐ;Ð[cØð 	7Ý$ V­TÐ7GÈvÐ]cÐdeÔ]fÐrxÐyzÔr{Ø")§+¢+¨oÑ">Ô">ÈÏÊÐTeÐfhÑHiÔHiØ '§¢¨M¸"Ñ =Ô =ð.?ñ .?ô .?ñ @ô @ð @ð @ð @ð @ð @ð @ð @ð @õ   ™=œ=�Ø˜!”9 Ò'Ð'¨FÔ,CÐGeÐ,eÐ,eÐjqÐryÔjzð  Pð  kPð  kPØ/6°wÔ/?×/EÒ/EÑ/GÔ/G�H˜^Ñ,Ø*1°'Ô*:�Ô'Ý$ V¨XÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ùøÝð 	;ð 	;ð 	;Ý�NŠNÐ9Ñ:Ô:Ð:Ð:Ñ:ð	;øøøð);ð ;s   Á9AF4ÃC"F4Æ4$GÇGc                ó|   ‡ — ˆ fd„}‰ t           vr,t                                |¦   «         ¦  «        t           ‰ <   d S d S )Nc               “  ó  •K  — 	 t          j        d¦  «        ƒ d {V —† t          d‰ ¦  «        ƒ d {V —† t          d‰ d¬¦  «        ƒ d {V —† t                               ‰ d ¦  «         d S # t                               ‰ d ¦  «         w xY w)Ng333333Ã?r<   T)r©  )r}   r  r  Ú_codex_push_tasksr  )ró   s   €rD   Údeliverz%queue_codex_activity.<locals>.deliverH  s°   øè è € ð	-Ý”- Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$Ý$ W¨cÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ý$ W¨c¸DÐAÑAÔAÐAÐAÐAÐAÐAÐAÐAå×!Ò! # tÑ,Ô,Ð,Ð,Ð,øÕ×!Ò! # tÑ,Ô,Ð,Ð,øøøs   …AA* Á*B)rÀ  r²   Úspawn)ró   ÚmethodrÁ  s   `  rD   r)  r)  F  sU   ø€ ð-ð -ð -ð -ð -ð Õ#Ð#Ð#Ý!'§¢¨g¨g©i¬iÑ!8Ô!8Õ˜#ÑÐÐð $Ð#rC   z/integrations/pi/events)rk   Úx_device_lab_pi_tokenc              ƒ  ó  K  — t                                |¦  «        st          dd¬¦  «        ‚t                               | ¦  «        }| j        dv r t                               d| j        ¦  «         | j        dk    r5|j	        r.t          d|j        |j        |j        |j        |j        ¬¦  «         | j        dk    rt          | ¦  «        ƒ d {V —† n t!          |j        |j	        ¦  «        ƒ d {V —† d	|                     ¦   «         d
œS )Ni‘  zinvalid Pi integration tokenrF  )Úsession_shutdownÚ	agent_endr7   rÇ  r¹   r©  T)rG  rõ   )Úcredential_storeÚauthenticate_pir   r  ÚapplyrÍ   r8   Úcancel_sessionrÁ   Úpending_notificationrÃ   r´   rÂ   rº   r»   r«  r  rw   )rÍ   rÄ  rõ   s      rD   Úpi_eventrÍ  S  s(  è è € õ
 ×+Ò+Ð,AÑBÔBð TÝ¨Ð4RÐSÑSÔSÐSÝ×Ò Ñ&Ô&€GØ„{Ð7Ð7Ð7Ý× Ò   uÔ'7Ñ8Ô8Ð8Ø„{�kÒ!Ð! gÔ&BÐ!Ý˜$ Ô 2°G´MÀ7ÔCUØ&œ|¸WÔ=Tð	Vñ 	Vô 	Vð 	Và„{�jÒ Ð Ý'¨Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ð.å& wÔ'9¸7Ô;WÑXÔXÐXÐXÐXÐXÐXÐXÐXØ¨¯ªÑ)9Ô)9Ð:Ð:Ð:rC   z/devices/{device_id}/targetr\   Ú	selectionc              ƒ  óÔ  K  — | t           vrt          dd¬¦  «        ‚t          |j        ¦  «        }t	          |¦  «        }|rM|\  }}|dk    rt
                               |¦  «        s(t          |¦  «                             |¦  «        ƒ d {V —† t           |          }t                               | ¦  «        |k    rBt                               |¦  «         t                               |¦  «         d |_        d|_        t                               | |¦  «         d}t!          |¦  «        �r;	 t#          |¦  «        ƒ d {V —†}t                               | ¦  «        |k    rSt%          ||¦  «        ƒ d {V —† |                     dd¦  «        |_        t                               |¦  «        ƒ d {V —† d}n³# t(          $ r¦ t                               |dd¬	¦  «         t                               |dd¬	¦  «         d |_        |j        rMt-          t(          ¦  «        5  |j                             d
¬¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        Y nw xY w| ||dœS )Nr>  údevice not foundrF  r7   rn   Fr´   Trù   rü   rý   )r\   r�   Ú	delivered)r•   r   r   r�   r   r  rL   r¨   rè   r¤   r¿   rÅ   r²   rm   ro   r   r¡   r¥  rŸ   rÙ   rð   r_   r   rÿ   rf   )	r\   rÎ  r�   rò   rª   ró   r–   rÑ  r—   s	            rD   Úselect_targetrÒ  g  s¯  è è € à�ÐÐÝ¨Ð4FÐGÑGÔGÐGÝ˜iÔ.Ñ/Ô/€FÝ˜&Ñ!Ô!€FØð 6Ø‰
ˆˆsØ˜’�¥+§/¢/°#Ñ"6Ô"6�Ý˜eÑ$Ô$×0Ò0°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ý�YÔ€FÝ×Ò˜	Ñ"Ô" fÒ,Ð,Ý�Š˜ÑÔÐÝ�Š�fÑÔÐØ!ˆÔØ"$ˆÔÝ×Ò�Y Ñ'Ô'Ð'Ø€IÝ�fÑÔñ $ð	$Ý0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8ˆGÝ×Ò 	Ñ*Ô*¨fÒ4Ð4Ý$ V¨WÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ø*1¯+ª+°g¸rÑ*BÔ*B�Ô'Ý×'Ò'¨Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø �	øøÝð 	$ð 	$ð 	$Ý�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÐÐð	$øøøð #¨fÀ9ÐMÐMÐMs8   Ä*BF1 Æ1A&I!È"IÈ9I!ÉI		É	I!ÉI		ÉI!É I!z/devices/{device_id}/messagerÓ   c              ƒ  ó”  K  — t                                | ¦  «        }|€t          dd¬¦  «        ‚|j        r|j        €t          dd¬¦  «        ‚d|j        |j        dœ}	 t          ||¦  «        ƒ d {V —† n2# t          $ r%}d|_        d |_        t          dd	¬¦  «        |‚d }~ww xY wt           
                    d
| ¦  «         d| |dœS )Nr>  rÐ  rF  rE  rš   Údisplay_message)rÉ   r‹   rŒ   Fúdevice disconnectedz!sent display_message to device %sT)Úsentr\   rÓ   )r•   rL   r   rf   r_   r‹   rŒ   rŸ   rð   rN   Úinfo)r\   rÓ   r–   r—   r÷   s        rD   Úsend_messagerØ  Œ  s  è è € å�[Š[˜Ñ#Ô#€FØ€~Ý¨Ð4FÐGÑGÔGÐGØŒ=ð I˜FÔ,Ð4Ý¨Ð4GÐHÑHÔHÐHà(°7´=È'Ì,ÐWÐW€GðTÝ˜V WÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-øÝð Tð Tð TØˆŒØˆÔÝ¨Ð4IÐJÑJÔJÐPSÐSøøøøðTøøøõ ‡K‚KÐ3°YÑ?Ô?Ð?Ø y¸WÐEÐEÐEs   Á A7 Á7
B&Â B!Â!B&z&/devices/{device_id}/test-notificationr;  c              ƒ  óš  K  — t                                | ¦  «        }|€t          dd¬¦  «        ‚|j        r|j        €t          dd¬¦  «        ‚	 t          |d|j        dœ¦  «        ƒ d {V —† n2# t          $ r%}d|_        d |_        t          dd	¬¦  «        |‚d }~ww xY wt           	                    d
|j        | ¦  «         d| |j        dœS )Nr>  rÐ  rF  rE  rš   Únotification_test)rÉ   r”   FrÕ  z&sent %s notification test to device %sT)rÖ  r\   r”   )
r•   rL   r   rf   r_   rŸ   r”   rð   rN   r×  )r\   r;  r–   r÷   s       rD   Útest_notificationrÛ  Ÿ  s  è è € å�[Š[˜Ñ#Ô#€FØ€~Ý¨Ð4FÐGÑGÔGÐGØŒ=ð I˜FÔ,Ð4Ý¨Ð4GÐHÑHÔHÐHðTÝ˜VÐ.AÈ7Ì<Ð%XÐ%XÑYÔYÐYÐYÐYÐYÐYÐYÐYÐYøÝð Tð Tð TØˆŒØˆÔÝ¨Ð4IÐJÑJÔJÐPSÐSøøøøðTøøøõ ‡K‚KÐ8¸'¼,È	ÑRÔRÐRØ y¸'¼,ÐGÐGÐGs   ÁA/ Á/
BÁ9 BÂBc                  ó>   — e Zd ZU  edd¬¦  «        Zded<   ded<   dS )	ÚSpeechSelectionr†   é¾   rˆ   r[   r�   z6Literal['OFF', 'MANUAL', 'AUTO_REPLY', 'AUTO_SUMMARY']rB  Nr‘   rB   rC   rD   rÝ  rÝ  °  s>   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø@Ð@Ð@Ñ@Ð@Ð@rC   rÝ  c                  ó<   — e Zd ZU  edd¬¦  «        Zded<   ddiZdS )	Ú
SpeechTestr†   rÞ  rˆ   r[   r�   ÚextraÚforbidN)ry   rz   r{   r   r�   r|   Úmodel_configrB   rC   rD   rà  rà  µ  s:   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø˜XÐ&€L€L€LrC   rà  z/api/devices/{device_id}/speechc              ƒ  óà  K  — t                                | ¦  «        }|st          dd¦  «        ‚t                               | ¦  «        t	          |j        ¦  «        k    rt          dd¦  «        ‚t                               |¦  «         t          j         	                    | |j        |j
        ¦  «         t                               |¦  «        ƒ d {V —† |j
        t	          |j        ¦  «        dœS )Nr>  úDevice not foundrE  ú Target changed; refresh settings)rB  r�   )r•   rL   r   r¤   r   r�   r¿   rÅ   r�  r   rB  rÙ   ©r\   rV   r–   s      rD   Úset_speech_moderè  º  s×   è è € å�[Š[˜Ñ#Ô#€FØð 5Ý˜CÐ!3Ñ4Ô4Ð4Ý×Ò˜	Ñ"Ô"Õ&6°u´|Ñ&DÔ&DÒDÐDÝ˜CÐ!CÑDÔDÐDÝ‡O‚O�FÑÔÐÝÔ×Ò˜Y¨¬°e´jÑAÔAÐAÝ
×
Ò
˜FÑ
#Ô
#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ø”JÕ*:¸5¼<Ñ*HÔ*HÐIÐIÐIrC   z$/api/devices/{device_id}/speech-testc              ƒ  ó>  K  — t                                | ¦  «        }|st          dd¦  «        ‚t                               | ¦  «        t	          |j        ¦  «        k    rt          dd¦  «        ‚t                               |dd¦  «        st          dd¦  «        ‚dd	iS )
Nr>  rå  rE  ræ  Úscreenu   è¯­éŸ³æ’­æ”¾æµ‹è¯•æˆ�åŠŸã€‚zASpeech unavailable, device busy or firmware lacks speech_playbackrG  T)r•   rL   r   r¤   r   r�   r¿   r,  rç  s      rD   Útest_speechrë  Ç  s›   è è € å�[Š[˜Ñ#Ô#€FØð 5Ý˜CÐ!3Ñ4Ô4Ð4Ý×Ò˜	Ñ"Ô"Õ&6°u´|Ñ&DÔ&DÒDÐDÝ˜CÐ!CÑDÔDÐDÝ�>Š>˜& (Ð,IÑJÔJð fÝ˜CÐ!dÑeÔeÐeØ˜ÐÐrC   z
/device/wsr_   r   c              ƒ  óZ  ‡	K  — |                       ¦   «         ƒ d {V —† d }	 |                      ¦   «         ƒ d {V —†Š	t          ‰	t          ¦  «        r‰	                     d¦  «        dk    �r…|                      dd¬¦  «        ƒ d {V —† 	 |�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         d S d S d S d}t1          ˆ	fd„|D ¦   «         ¦  «        �r…|                      dd¬¦  «        ƒ d {V —† 	 |�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         d S d S d S ‰	d         }t2                               |‰	d         ¦  «        �s t,                               d|¦  «         |                      dd¬¦  «        ƒ d {V —† 	 |�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         d S d S d S t                               |¦  «        }|�c|j        �\t                               |dd¬¦  «         t                               |dd¬¦  «         |j                             dd¬¦  «        ƒ d {V —† t9          |‰	d         ‰	d         | t          ‰	                     d¦  «        t:          ¦  «        r d„ ‰	                     dg ¦  «        D ¦   «         nt=          ¦   «         ¬¦  «        }|t          |<   t?          |dtA          t)          ¦   «          !                    ¦   «         dz  ¦  «        tE          ¦   «         dœ¦  «        ƒ d {V —† tF          j$        ptF           %                    ¦   «         }t?          || &                    ¦   «         ¦  «        ƒ d {V —† tN                               |¦  «        }tQ          |¦  «        ƒ d {V —†}t?          ||¦  «        ƒ d {V —† |                     dd¦  «        |_)        t           *                    |¦  «        ƒ d {V —† t           +                    ¦   «          t,                               d|j        |j,        |j-        ¦  «         	 |                      ¦   «         ƒ d {V —†}t          |t          ¦  «        r(t          |                     d¦  «        t\          ¦  «        s!t,                               d |j        ¦  «         Œyt)          ¦   «         |_        |d          /                    d!¦  «        r
d|d         in||_0        |d          /                    d"¦  «        r#t           1                    ||¦  «        ƒ d {V —† �nr|d          /                    d#¦  «        rI|d         d$k    rt                               |¦  «         t           1                    ||¦  «        ƒ d {V —† �n|d         d%v rÈ|d         d&k    rt                               |¦  «         |d         d'k    rte          ||¦  «        ƒ d {V —† �nº|j3        �|j3         4                    ¦   «         r/t           5                    te          ||¦  «        ¦  «        |_3        �nkt?          |d(|                     d)¦  «        d*d+œ¦  «        ƒ d {V —† �n<|d         d,k    rqt                               |j        ¦  «        |u rO|j        rHt           6                    |                     d-¦  «        |                     d.¦  «        |j        ¬/¦  «         n¿|d         d0k    rKt,                               d1|j        |                     d2d3¦  «        |                     d4d3¦  «        ¦  «         nh|d         d5k    r5t,           7                    d6|j        |                     d7¦  «        ¦  «         n't,                               d8|j        |d         ¦  «         �Œi# tp          $ r Y n)t$          $ r t,           9                    d9¦  «         Y nw xY w|�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�ùt                               |j        ¦  «        |u rÚt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         d S d S d S # |�ft                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        d ¦  «         |�øt                               |j        ¦  «        |u rØt                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        |j        rMt#          t$          ¦  «        5  |j                             d	¬
¦  «        ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   d|_        d |_        t)          ¦   «         |_        t,                               d|j        ¦  «         w w w xY w):NrÉ   Úhelloið  zfirst message must be hello)rþ   ÚreasonFTrù   rü   rý   zdevice %s offline)r\   Údevice_tokenr]   r^   c              3  ó|   •K  — | ]6}t          ‰                     |¦  «        t          ¦  «         p‰|          V — Œ7d S r?   )ræ   rL   r[   )rÝ   râ   rí  s     €rD   r%  z#device_websocket.<locals>.<genexpr>Þ  sE   øè è € ÐYÐYÈ•:˜eŸiši¨™nœn­cÑ2Ô2Ð2ÐD¸%À¼*°nÐYÐYÐYÐYÐYÐYrC   zinvalid hellor\   rï  zrejected unauthorized device %szunauthorized deviceiô  zreplaced by a new connectionr]   r^   rp   c                ó<   — h | ]}t          |t          ¦  «        ¯|’ŒS rB   )ræ   r[   )rÝ   Úvs     rD   ú	<setcomp>z#device_websocket.<locals>.<setcomp>ò  s)   € ÐYÐYÐY ÅjÐQRÕTWÑFXÔFXÐY˜!ÐYÐYÐYrC   )r\   r]   r^   r_   rp   Ú	hello_ackiè  )rÉ   Úserver_time_msÚtimezone_offset_minutesr´   rn   z%device %s online board=%s firmware=%szdevice %s sent invalid event)Úvoice_Ú	settings_Úspeech_rù  r÷  Úvoice_start)rÔ   rØ   rÊ   rÔ   rÊ   rÑ   rË   zSettings request busyrÒ   Úapproval_responser  r‚   )Údevice_connectionÚbutton_eventz,device %s button clicked button=%s action=%sÚbuttonÚunknownÚactionÚ	heartbeatzdevice %s heartbeat uptime=%sÚuptimezdevice %s event type=%szdevice websocket failed):ÚacceptÚreceive_jsonræ   rï   rL   rÿ   r¿   rÅ   r²   rm   r8   r  r  rd   r•   r\   r_   r   rð   rf   rE   rg   rN   r×  ÚanyrÈ  ÚauthenticaterO   rZ   r½   r   rŸ   rF   Ú	timestamprX   r  rŠ  r  r  r¤   r¥  ro   rÙ   rÆ   r]   r^   r[   Ú
startswithrh   ÚhandlerÎ   rl   ÚdonerÂ  rH  Údebugr   Ú	exception)
r_   r–   Úrequiredr\   Úpreviousr	  r�   r—   rÍ   rí  s
            @rD   Údevice_websocketr  Ó  s  øè è € à
×
Ò
Ñ
Ô
ÐÐÐÐÐÐÐØ €Fðh?Ø×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.ˆÝ˜%¥Ñ&Ô&ð 	¨%¯)ª)°FÑ*;Ô*;¸wÒ*FÑ*FØ—/’/ tÐ4Q�/ÑRÔRÐRÐRÐRÐRÐRÐRÐRØðl ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"Iðs FˆÝÐYÐYÐYÐYÐPXÐYÑYÔYÑYÔYñ 	Ø—/’/ t°O�/ÑDÔDÐDÐDÐDÐDÐDÐDÐDØðb ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"Iði ˜+Ô&ˆ	Ý×,Ò,¨Y¸¸nÔ8MÑNÔNñ 	Ý�NŠNÐ<¸iÑHÔHÐHØ—/’/ tÐ4I�/ÑJÔJÐJÐJÐJÐJÐJÐJÐJØðV ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"Iõ_ —;’;˜yÑ)Ô)ˆØÐ HÔ$6Ð$BÝ�OŠO˜H¨U¸4ˆOÑ@Ô@Ð@Ý�MŠM˜(¨5¸ˆMÑ>Ô>Ð>ØÔ$×*Ò*°Ð=[Ð*Ñ\Ô\Ð\Ð\Ð\Ð\Ð\Ð\Ð\åØØ˜”.Ø˜:Ô&Øå˜eŸiši¨Ñ7Ô7½Ñ>Ô>ðJÐYÐY U§Y¢Y¨~¸rÑ%BÔ%BÐYÑYÔYÐYÝDGÁEÄEð
ñ 
ô 
ˆð $��	ÑÝ˜VØÝ!¥'¡)¤)×"5Ò"5Ñ"7Ô"7¸$Ñ">Ñ?Ô?Ý'FÑ'HÔ'Hð&
ð &
ñ ô ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ
 $Ô*ÐHÕ.>×.FÒ.FÑ.HÔ.HˆÝ˜V X×%8Ò%8Ñ%:Ô%:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ý×!Ò! )Ñ,Ô,ˆÝ,¨VÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4ˆÝ˜V WÑ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ø")§+¢+¨g°rÑ":Ô":ˆÔÝ×Ò Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ý×ÒÑÔÐÝ�ŠØ3°VÔ5EÀvÄ|ÐU[ÔUdñ	
ô 	
ð 	
ð$	XØ#×0Ò0Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2ˆEÝ˜e¥TÑ*Ô*ð µ*¸U¿YºYÀvÑ=NÔ=NÕPSÑ2TÔ2Tð Ý—’Ð=¸vÔ?OÑPÔPÐPØÝ&™yœyˆFÔà;@À¼=×;SÒ;SÐTvÑ;wÔ;wð  !C ¨¨v¬Ð 7Ð 7ð  ~CˆFÔØ�VŒ}×'Ò'¨	Ñ2Ô2ð XÝ—o’o f¨eÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ñ4Ø�v”×)Ò)¨(Ñ3Ô3ð XØ˜”= MÒ1Ð1µ8·?²?À6Ñ3JÔ3JÐ3JÝ—m’m F¨EÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ñ2Ø�v”Ð"WÐWÐWØ˜”= NÒ2Ð2µH·O²OÀFÑ4KÔ4KÐ4KØ˜”=Ð$5Ò5Ð5Ý)¨&°%Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Ñ8àÔ+Ð3°vÔ7K×7PÒ7PÑ7RÔ7RÐ3Ý/5¯|ª|½OÈFÐTYÑ<ZÔ<ZÑ/[Ô/[˜Ô,Ñ,å,¨VÐ=MÐ\a×\eÒ\eÐfrÑ\sÔ\sð  @Wð  6Xð  6Xñ  Yô  Yð  Yð  Yð  Yð  Yð  Yð  Yð  Yñ  YØ�v”Ð"5Ò5Ð5Ý—;’;˜vÔ/Ñ0Ô0°FÐ:Ð:¸v¼}Ð:Ý×%Ò% e§i¢i°Ñ&>Ô&>ÀÇ	Â	È*Ñ@UÔ@UØ8>Ô8Lð &ñ Nô Nð Nøà�v” .Ò0Ð0Ý—’ØBØÔ$Ø—I’I˜h¨	Ñ2Ô2Ø—I’I˜h¨	Ñ2Ô2ñ	ô ð ð ð �v” +Ò-Ð-Ý—’Ð<¸fÔ>NÐPU×PYÒPYÐZbÑPcÔPcÑdÔdÐdÐdå—’Ð5°vÔ7GÈÈvÌÑWÔWÐWñI$	XøõJ ð ð ð ØˆÝð 4ð 4ð 4Ý×ÒÐ2Ñ3Ô3Ð3Ð3Ð3ð4øøøð ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>Ð>ð ÐÐ"IÐ"Iøð ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCØÐ¥'§+¢+¨fÔ.>Ñ"?Ô"?À6Ð"IÐ"IÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔØÔð RÝ�iÑ(Ô(ÐQÐQ°Ô0@×0FÒ0FÈDÐ0FÑ0QÔ0QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐ*QÐQÐQÐQÑQÔQÐQÐQÐQÐQÐQÐQøøøÐQÐQÐQÐQØ!ˆFŒMØ#ˆFÔÝ&™yœyˆFÔÝ�KŠKÐ+¨VÔ-=Ñ>Ô>Ð>Ð>ð Ð"Iøøøs²   ¡A&l) Å/"FÆF!Æ$F!Ç/;l) Ì"M Í MÍMÎA"l) Ó"T
Ô
TÔTÕWl) ì)
mì3s ì5#mís ímís ñ"q3ñ3q7ñ:q7óC(x*ö-"w÷x*÷w÷x*÷"w÷#Ax*)r=   r   )r=   rF   )r–   rZ   r—   rr   r=   r˜   )r—   rr   r=   r˜   )r=   r˜   )r!  r   )r÷   r&   )rª   r[   )r  r[   rV   r�   )rN  r(   )rî   r[   )rª   r[   rÁ   r[   )rª   r[   rÁ   r[   rV   r'   )rª   r[   rÁ   r[   rV   r)   rx   )r=   r   )r=   r   )r=   rŒ  r?   )rÁ   r[   rš  r›  r=   rr   )rÁ   r[   rš  r›  r=   r˜   )rÍ   r   r=   r˜   )NNF)rÍ   r   rÄ  r[   r=   rr   )r\   r[   rÎ  rŽ   r=   rr   )r\   r[   rÓ   r…   r=   rr   )r\   r[   r;  r“   r=   rr   )r\   r[   rV   rÝ  )r\   r[   rV   rà  )r_   r   r=   r˜   )˜Ú
__future__r   r}   ÚloggingrJ   Ú
contextlibr   r   Údataclassesr   r   r   r	   Útypingr
   r   Úuuidr   Úfastapir   r   r   r   r   Úfastapi.responsesr   r   r   Úpydanticr   r   Údevice_gateway.authr   Ú device_gateway.collectors.systemr   Údevice_gateway.integrations.pir   r   Údevice_gateway.stater   r   r   Údevice_gateway.voicer   r   Údevice_gateway.speechr    r!   r"   r#   r$   Údevice_gateway.control.settingsr%   Údevice_gateway.control.modelsr&   r'   r(   r)   Údevice_gateway.control.projectsr*   Údevice_gateway.control.pir+   Údevice_gateway.control.codexr,   Ú device_gateway.control.approvalsr-   Ú"device_gateway.control.pi_approvalr.   Ú	getLoggerrN   rK   rL   r  Úfloatr  rÈ  r¤   r…  r†  r‡  Ú__file__r‚  r  rí   r8   r(  rE   rX   rZ   r�   r…   rŽ   r“   r•   r|   rŸ   r¡   r²   r¶   Úspeech_preferencesr¿   rÃ   rÇ   rÎ   rÌ   r   r
  r  r   r4  ÚappÚexception_handlerr<  r¨   rC  ÚpostrI  rK  rQ  rT  rU  r[  rd  rg  rj  ro  rë   ré   ry  r~  rƒ  rˆ  r‹  r“  r™  r£  r  r«  r¥  r  rÀ  r)  rÍ  rÒ  rØ  rÛ  rÝ  rà  rè  rë  r_   r  rB   rC   rD   ú<module>r-     s¥  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 	€	€	€	Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø <Ð <Ð <Ð <Ð <Ð <Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hÐ hØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø /Ð /Ð /Ð /Ð /Ð /Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø =Ð =Ð =Ð =Ð =Ð =Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð 
ˆÔ	Ð9Ñ	:Ô	:€Ø"�?¨B¬J¯NªNÐ;PÑ,QÔ,QÐRÑRÔRÐ Ø!˜E "¤*§.¢.Ð1LÈcÑ"RÔ"RÑSÔSÐ Ø(Ð(Ø„J‡N‚NØ!Ø4ñô ñô Ð ð ˆ{Ø„J‡N‚NØØ5ñô ñô €ð ”'—,’,˜rœwŸš¨xÑ8Ô8¸(ÀLÑQÔQ€ØÐÑ!Ô!€Ø"�? 2¤:§>¢>Ð2IÐKyÑ#zÔ#zÑ{Ô{Ð ØÐÑÔ€	Ø�)�)Ð,¨kÀYÐOÑOÔOÐP€Ø„:‡>‚>Ð)¨3Ñ/Ô/°3Ò6Ð6Ø$˜Ð%5ÀÐKÑKÔK€HˆWÑð&ð &ð &ð &ð
Jð 
Jð 
Jð 
Jð ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ð8+ð +ð +ð +ð +�yñ +ô +ð +ð4ð 4ð 4ð 4ð 4�Yñ 4ô 4ð 4ð
`ð `ð `ð `ð `�iñ `ô `ð `ð$ð $ð $ð $ð $�yñ $ô $ð $ð  €Ð Ð Ð Ñ ðGð Gð Gð Gðfð fð fð 
ˆ�n�nÑ&Ô&Ð(IÐ(IÐKkÐKkØ�NÐ$JÐ$Jñ
Lô 
L€ðNð Nð Nð
 'Ð& r¤z§~¢~Ð6KÐMyÑ'zÔ'zÑ{Ô{Ð Øˆ=˜˜Ñ)Ô)¨=¨=©?¬?Ð<NØ%Ð% ~°~À~ñWô W€ð EGÐXZð _ð _ð _ð _ð _ð
ð ð ð.ð .ð .ð)]ð )]ð )]ðXeð eð eð eð$7ð 7ð 7ð 7ð%;ð %;ð %;ðP&ð &ð &ð ðð ð ñ Ôðð4 €gÐ(°'ÀHÐMÑMÔM€ð ×Ò�|Ñ$Ô$ðPð Pð Pñ %Ô$ðPðð ð ð ð ‡‚Ð	ÑÔðWð Wñ ÔðWð ‡‚Ð
1Ñ2Ô2ðeð eð eñ 3Ô2ðeð ‡‚ˆÑÔð#ð #ñ Ôð#ð ‡‚ˆ/ s€Ñ+Ô+ð)ð )ð )ñ ,Ô+ð)ð ‡‚Ð(°c€Ñ:Ô:ð(ð (ð (ñ ;Ô:ð(ð ‡‚ˆÑÔðgð gñ Ôðgð ‡‚Ð	.Ñ/Ô/ð	4ð 	4ð 	4ñ 0Ô/ð	4ð ‡‚Ð	4Ñ5Ô5ð<ð <ð <ñ 6Ô5ð<ð ‡‚Ð
<Ñ=Ô=ð\ð \ð \ñ >Ô=ð\ð
 ‡‚Ð
;È€ÑMÔMðGð Gð Gñ NÔMðGð ‡‚Ð	=Ñ>Ô>ð=ð =ð =ñ ?Ô>ð=ð ‡‚Ð
>Ñ?Ô?ðGð Gð Gñ @Ô?ðGð ‡‚ˆÑÔðsð sð sñ Ôðsð ‡‚ˆ €Ñ&Ô&ð7ð 7ð 7ñ 'Ô&ð7ð ‡‚ˆ U€Ñ+Ô+ðAð Að Añ ,Ô+ðAð ‡‚ˆ¨E€Ñ2Ô2ðrð rð rñ 3Ô2ðrð ‡‚ˆÑÔð!ð !ð !ñ Ôð!ð
 ‡‚ˆÑÔðð ð ñ Ôðð ‡‚ˆÑÔðð ð ñ Ôðð  GKðð ð ð ð ð< GKð)ð )ð )ð )ð )ð*)ð )ð )ð )ð@Yð Yð Yð*;ð ;ð ;ð ;ð4 Ð ð
9ð 
9ð 
9ð ‡‚Ð
#°u€Ñ=Ô=ð "( °Ð!3Ñ!3Ô!3ð;ð ;ð ;ð ;ñ >Ô=ð;ð& ‡‚Ð
'Ñ(Ô(ð!Nð !Nð !Nñ )Ô(ð!NðH ‡‚Ð
(Ñ)Ô)ðFð Fð Fñ *Ô)ðFð$ ‡‚Ð
2Ñ3Ô3ðHð Hð Hñ 4Ô3ðHð Að Að Að Að A�iñ Aô Að Að
'ð 'ð 'ð 'ð '�ñ 'ô 'ð 'ð
 ‡‚Ð
+Ñ,Ô,ð	Jð 	Jð 	Jñ -Ô,ð	Jð ‡‚Ð
0Ñ1Ô1ðð ð ñ 2Ô1ðð ‡‚ˆ|ÑÔðk?ð k?ð k?ñ Ôðk?ð k?ð k?rC   