§
    ç�Ãjœ  ã                  ó  — 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 d dlDmEZE d dlFmGZG d dlHmIZImJZJ  ejK        d¦  «        ZL e"ejM         N                    d¦  «        ¬¦  «        ZO ePejM         N                    dd¦  «        ¦  «        ZQ e ejM         N                    d d!¦  «        ¦  «        ZR e'ejM         N                    d"d#¦  «        ¦  «        ZSejT         U                    ejT         V                    eW¦  «        d$d%¦  «        ZX e%¦   «         ZY e;ejM         N                    d&d'¦  «        ¦  «        ZZ eA¦   «         Z[ eE¦   «         Z\ eGejM         N                    d(d)¦  «        ¦  «        Z]d* e=eZeYe[e\¬+¦  «        iZ^ejM         N                    d,d-¦  «        d.k    r e?eZe[e\¬+¦  «        e^d/<   dÅd2„Z_dÆd4„Z`e	 G d5„ d6¦  «        ¦   «         Za G d7„ d8e¦  «        Zb G d9„ d:e¦  «        Zc G d;„ d<e¦  «        Zd G d=„ d>e¦  «        Zei Zfd?egd@<   dÇdE„ZhdF„ Zi e+ e,¦   «         dG„ dH„ eheidI„ dJ„ dK„ dL„ dM„ ¬N¦
  «
        ZjdO„ Zk e/ejM         N                    dPdQ¦  «        ¦  «        Zl e. e0¦   «          e1¦   «         eldR„ eheiek¦  «        ZmdSdSdTœdU„ZndV„ ZodW„ ZpdX„ ZqdÈdY„ZrdÉdZ„Zsd[„ Ztd\„ Zud]„ Zv G d^„ d_¦  «        Zw ew¦   «         ZxedÊdb„¦   «         Zy edcddey¬e¦  «        Zzez {                    e6¦  «        dËdh„¦   «         Z|dÌdk„Z}ez N                    dl¦  «        dm„ ¦   «         Z~ez                     dn¦  «        dÍdq„¦   «         Z€ez N                    dr¦  «        ds„ ¦   «         Z�ez                     drdt¬u¦  «        dÎdx„¦   «         Z‚ez ƒ                    dydz¬u¦  «        dÏd|„¦   «         Z„ez N                    d}¦  «        d~„ ¦   «         Z…ez N                    d¦  «        dÏd€„¦   «         Z†ez N                    d�¦  «        dÐdƒ„¦   «         Z‡ez                     d„¦  «        dÐd…„¦   «         Zˆez                     d†d‡¬u¦  «        dÑd‰„¦   «         Z‰ez N                    dŠ¦  «        dÐd‹„¦   «         ZŠez                     dŠ¦  «        dÒd�„¦   «         Z‹ez N                    dŽ¦  «        dÓd�„¦   «         ZŒez N                    d�d‘¬’¦  «        dÔd”„¦   «         Z�ez N                    d•d‘¬’¦  «        dÕd—„¦   «         ZŽez N                    d˜d‘¬’¦  «        dÕd™„¦   «         Z�ez N                    dš¦  «        dÓd›„¦   «         Z�ez N                    dœ¦  «        dÖdž„¦   «         Z‘ez N                    dŸ¦  «        dÓd „¦   «         Z’	 d×dØd£„Z“	 d×dÙd¤„Z”dÚd§„Z•d¨„ Z–dÛd©„Z—i Z˜dª„ Z™ez                     d«d‘¬’¦  «         edS¬¬¦  «        fdÜd®„¦   «         Zšez                     d¯¦  «        dÝd²„¦   «         Z›ez                     d³¦  «        dÞdµ„¦   «         Zœez                     d¶¦  «        dßd¸„¦   «         Z� G d¹„ dºe¦  «        Zž G d»„ d¼e¦  «        ZŸez                     d½¦  «        dàd¾„¦   «         Z ez                     d¿¦  «        dádÀ„¦   «         Z¡ez ¢                    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)ÚPiApprovalServer)Ú
UserInputs)Ú
Operations)Ú	NavigatorÚCAPABILITIESz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ÚGATEWAY_OPERATIONS_FILEz0~/.config/esp32-device-gateway/operations.sqliteÚpi)Ú	approvalsÚuser_inputsÚGATEWAY_CODEX_ENABLEDÚ0Ú1ÚcodexÚreturnr   c                 ó>   — t          j        t          j        ¦  «        S ©N)r   Únowr	   Úutc© ó    úS/home/lighthouse/esp32-dev/.cache/agent-navigator-0.6b/server/device_gateway/app.pyÚutc_nowrK   <   s   € ÝŒ<�œÑ%Ô%Ð%rI   Ú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ÚgetrL   Ú
ValueErrorÚloggerÚwarningÚmaxÚminr   rF   Ú
astimezoneÚ	utcoffsetÚtotal_seconds)Ú
configuredÚvalueÚoffsets      rJ   Úgateway_timezone_offset_minutesr^   @   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                  ón  — 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<   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 rE   )r   ÚhexrH   rI   rJ   ú<lambda>zDevice.<lambda>S   s   € µu±w´w´{€ rI   )Údefault_factoryÚconnection_idTÚboolÚonliner   Ú	last_seenNzdict[str, Any] | NoneÚ
last_eventF)ri   Úreprzasyncio.LockÚsettings_lock)Údefaultro   zasyncio.Task | NoneÚsettings_taskz
str | NoneÚsettings_idr   rL   Úsettings_generationÚ Úlast_agent_statezset[str]ÚcapabilitiesÚ	send_lockrC   údict[str, Any]c                óš   — | j         | j        | j        | j        t	          | j        ¦  «        | j                             ¦   «         | j        dœS )N)rb   rc   rd   rl   rw   rm   rn   )	rb   rc   rd   rl   Úsortedrw   rm   Ú	isoformatrn   ©Úselfs    rJ   ÚpubliczDevice.public_   sI   € àœØ”ZØœØ”kÝ" 4Ô#4Ñ5Ô5Øœ×1Ò1Ñ3Ô3Øœ/ð
ð 
ð 	
rI   ©rC   ry   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   rj   rl   rK   rm   rn   ÚasyncioÚLockrp   rr   rs   rt   rv   Úsetrw   rx   r   rH   rI   rJ   r`   r`   M   sj  € € € € € € à€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ð	
ð 	
ð 	
ð 	
ð 	
ð 	
rI   r`   c                  ó4   — e Zd ZU  edd¬¦  «        Zded<   dS )ÚApprovalDecisioné   é(   ©Ú
min_lengthÚ
max_lengthra   ÚdecisionN)r�   r‚   rƒ   r   r�   r„   rH   rI   rJ   r‰   r‰   k   s2   € € € € € € Ø�E Q°"Ð5Ñ5Ô5€HÐ5Ð5Ð5Ñ5Ð5Ð5rI   r‰   c                  óX   — e Zd ZU  edd¬¦  «        Zded<    edd¬¦  «        Zded<   dS )	ÚDisplayMessagerŠ   éP   rŒ   ra   Útitleiô  ÚbodyN)r�   r‚   rƒ   r   r“   r„   r”   rH   rI   rJ   r‘   r‘   o   sR   € € € € € € Ø� !°Ð3Ñ3Ô3€EÐ3Ð3Ð3Ñ3Ø� ¨sÐ3Ñ3Ô3€DÐ3Ð3Ð3Ñ3Ð3Ð3rI   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})$)Úpatternra   ÚtargetN©r�   r‚   rƒ   r   r˜   r„   rH   rI   rJ   r–   r–   t   s1   € € € € € € Ø�%Ð ^Ð_Ñ_Ô_€FÐ_Ð_Ð_Ñ_Ð_Ð_rI   r–   c                  ó   — e Zd ZU ded<   dS )ÚNotificationTestzLiteral['done', 'failed']ÚkindN)r�   r‚   rƒ   r„   rH   rI   rJ   r›   r›   x   s   € € € € € € Ø#Ð#Ð#Ñ#Ð#Ð#rI   r›   zdict[str, Device]ÚdevicesÚdeviceÚpayloadry   Ú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é   )rl   re   ÚRuntimeErrorrx   r…   Úwait_forÚ	send_json)rž   rŸ   s     rJ   Úsend_to_devicer§      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 rE   )r�   rR   rb   rl   re   ©rž   s    rJ   Úcurrent_devicerª   ‡   s1   € Ý�;Š;�vÔ'Ñ(Ô(¨FÐ2Ðe°v´}ÐeÈÔIYÐaeÐIeÐerI   c                ó6   — t                                | ¦  «        S rE   ©Útarget_storerR   ©Údids    rJ   rh   rh   ‹   s   € µL×4DÒ4DÀSÑ4IÔ4I€ rI   c                ó    — t          | ¦  «        S rE   )Úadapter_for©Úagents    rJ   rh   rh   ‹   s   € ÕYdÐejÑYkÔYk€ rI   c                 óN   — t          t                               ¦   «         ¦  «        S rE   )rk   r=   Úlist_pendingrH   rI   rJ   rh   rh   Œ   s   € ­­i×.DÒ.DÑ.FÔ.FÑ)GÔ)G€ rI   c                ó6   — t                                | ¦  «        S rE   )r­   Ú
generationr®   s    rJ   rh   rh   Œ   s   € Õbn×byÒbyÐz}Ñb~Ôb~€ rI   c                ó8   — t                                | |¦  «        S rE   )Ú	navigatorÚvoice_prepare)ÚdÚes     rJ   rh   rh   �   s   € �y×6Ò6°q¸Ñ;Ô;€ rI   c                ó8   — t                                | |¦  «        S rE   )r¹   Úvoice_valid)r»   Úcs     rJ   rh   rh   �   s   € ÕU^×UjÒUjÐklÐmnÑUoÔUo€ rI   c                ó:   — t                                | ||¦  «        S rE   )r¹   Úvoice_submit)r»   r¿   Úts      rJ   rh   rh   �   s<   € õ  MV÷  Mcò  Mcð  deð  fgð  hiñ  Mjô  Mj€ rI   )Úgeneration_forÚcontext_prepareÚcontext_validÚcontext_submitc                óÆ   — t           j                             | j        ¦  «        }t	          t
                               ¦   «         ¦  «        pt	          |o|j        dv ¦  «        S )N)Ú	RECORDINGÚTRANSCRIBINGÚAWAITING_CONFIRMATIONÚSENDING)ÚvoicesÚrequestsrR   rj   rk   r=   rµ   Ústate)rž   Úvoices     rJ   Úspeech_blockedrÐ   �   sd   € ÝŒO×Ò Ô 4Ñ5Ô5€EÝ•	×&Ò&Ñ(Ô(Ñ)Ô)ð  N­T°%ð  3M¸E¼Kð  LMð  =Mñ  .Nô  .Nð  NrI   ÚGATEWAY_SPEECH_FILEz*~/.config/esp32-device-gateway/speech.jsonc                ó6   — t                                | ¦  «        S rE   r¬   r®   s    rJ   rh   rh   —   s   € •× Ò  Ñ%Ô%€ rI   ru   ©ÚnameÚlatest_activityc          
     ó˜   — t          t                               ¦   «         ¦  «        D ]"}t                               || |||||¦  «         Œ#d S rE   )Úlistr�   ÚvaluesÚspeechesÚterminal)r³   Ú
session_idrÎ   Ú
final_textrÔ   rÕ   rž   s          rJ   Úon_agent_terminalrÝ   š   sT   € Ý•w—~’~Ñ'Ô'Ñ(Ô(ð _ð _ˆÝ×Ò˜& %¨°U¸JÈÈoÑ^Ô^Ð^Ð^ð_ð _rI   c                ó(  — t                                ¦   «         rdt          t                               ¦   «         ¦  «        D ]=}t
                               |¦  «         t                               |¦  «         d |_        Œ>|  	                    ¦   «          d S rE   )
r=   rµ   r×   r�   rØ   rÙ   ÚcancelrÌ   rs   r‡   )Úchangedrž   s     rJ   Úapprovals_changedrá   Ÿ   sw   € Ý×ÒÑÔð &Ý�7Ÿ>š>Ñ+Ô+Ñ,Ô,ð 	&ð 	&ˆFÝ�OŠO˜FÑ#Ô#Ð#Ý�MŠM˜&Ñ!Ô!Ð!Ø!%ˆFÔÐØ‡K‚K�M„M€M€M€MrI   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)rs   rR   rp   Ú_device_settings)rž   Úevents     rJ   Ú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
                               ‰ j        ¦  «        Št          ‰¦  «        }|st          ‰ d‰ddœ¦  «        ƒ d {V —† d S t                               ¦   «         s(t                               ¦   «         st          ‰ ¦  «        sd S |d         d	k    r‰‰ _        ‰‰ _        n1‰ j        ‰k    s$‰ 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 —†}nT|                     |¦  «        ƒ d {V —†}|                      d¦  «        r$|dk    r|                     |¦  «        ƒ d {V —†|d<    |¦   «         sd S |                     t0                                |j        ¦  «        ¦  «        ƒ d {V —†}	t5          |d„ t7          |	d„ d¬¦  «        D ¦   «         ¦  «        } |¦   «         rNt          ‰ t9          d|d         dk    rdnd‰‰‰|j        dœ|¤Ž¦  «        ƒ d {V —† |d         dk    rd ‰ _        d S d S d S # t<          $ rQ}
 |¦   «         r<t          ‰ d‰t          |
t>          ¦  «        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          ‰ ¦  «        oj‰ j        ‰k    o_t                               ‰ j        ¦  «        ‰k    o<t                               ‰ j        ¦  «        ‰k    ot                               ¦   «          S rE   )rª   rs   r­   rR   rb   r·   r=   rµ   )rž   r·   Úridr˜   s   €€€€rJ   Úvalidz_device_settings.<locals>.validÄ   s¹   ø€ Ý˜fÑ%Ô%ð  P¨&Ô*<ÀÒ*Cð  PÍ×HXÒHXÐY_ÔYiÑHjÔHjÐntÒHtð  Põ  zF÷  zQò  zQð  RXô  Rbñ  zcô  zcð  eoò  zoð  Põ  xA÷  xNò  xNñ  xPô  xPð  tPð  	PrI   Úsettings_applyÚsettings)Ústill_validÚinclude_permissionsrB   Úpermissionsc                ó*   — g | ]}|j         ¯	|j         ‘ŒS rH   )Úmodel)Ú.0Úss     rJ   ú
<listcomp>z$_device_settings.<locals>.<listcomp>Ó   s8   € ð  ,Að  ,Að  ,A¸ÐxyÔxð  ,A¨A¬Gð  ,Að  ,Að  ,ArI   c                ó   — | j         S rE   )Ú
updated_at)rú   s    rJ   rh   z"_device_settings.<locals>.<lambda>Ó   s
   € ÐYZÔYe€ rI   T)ÚkeyÚreverseÚsettings_updatedÚsettings_state)rã   rå   r˜   Útarget_generationrÔ   zUPDATE FAILEDrH   )!rR   Ú
isinstancera   Úlenrs   r­   rb   r·   r   r§   r=   rµ   r>   Úpendingrª   rt   r±   Úget_sessionÚupdate_settingsr)   Úmodel_validateÚget_settingsrö   Úlist_sessionsÚproject_registryÚ
project_idr%   r{   ÚdictrÔ   Ú	Exceptionr&   Údetail)rž   rç   Úparsedrñ   r³   ÚsidÚadapterÚsessionró   ÚrecentÚexcr·   rð   r˜   s   `          @@@rJ   ræ   ræ   °   s  øøøøè è € Ø
�)Š)�LÑ
!Ô
!€CÝ�c�3ÑÔð  q­C°©H¬HÐ':Ð':Ò':Ð':¸Ò':Ð':Ð':Ð':ØˆØˆV„}Ð)Ò)Ð)ØÔ Ò$Ð$Ø!%ˆFÔØˆÝ×Ò˜fÔ.Ñ/Ô/€FÝ×&Ò& vÔ'7Ñ8Ô8€JÝ˜&Ñ!Ô!€FØð Ý˜VÐ-=È3ÐYlÐ%mÐ%mÑnÔnÐnÐnÐnÐnÐnÐnÐnØˆÝ×ÒÑÔð ¥;×#6Ò#6Ñ#8Ô#8ð ÅÈvÑ@VÔ@Vð ØˆØˆV„}˜Ò&Ð&Ø ˆÔ¸J Ô!;Ð!;Ø	Ô	˜sÒ	"Ð	" fÔ&@À*Ò&LÐ&LÐPU×PYÒPYÐZbÑPcÔPcÐgmÒPmÐPmØˆðPð Pð Pð Pð Pð Pð Pð Pð]Ø‰
ˆˆ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Ø�yŠyÐ.Ñ/Ô/Ðy°E¸7²N°NÐah×atÒatÐuxÑayÔayÐ[yÐ[yÐ[yÐ[yÐ[yÐ[yÀ8ÈMÑCZØˆ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Ý  ­ð *hÈÈvÌÐXhÒIhÐIhÐ3EÐ3EÐn~Ø f¸zÈwÌ|ð*hð *hØ^fð*hð *hñ iô ið ið ið ið ið ið ið ià�VŒ}Ð.Ò.Ð.ÀT°Ô0BÐ0BÐ0Bð	Jð 	Jð /Ð.øÝð ]ð ]ð ]Øˆ5‰7Œ7ð 	]Ý  Ð1AÈsÝ(2°3½Ñ(EÔ(EÐZ˜#œ*˜*È?ð*\ð *\ñ ]ô ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð ]ð	]ð 	]ð 	]ð 	]ð 	]ð 	]øøøøð]øøøs'   Å29L Æ-B/L ÉB9L Ì
M8Ì'A M3Í3M8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Ø   rl   re   r§   r  rÙ   rß   rÌ   rs   r   ÚcloserK   rm   rT   rU   rb   )rŸ   rž   s     rJ   Ú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 —† ŒtrE   )Úsystem_collectorÚcollectr  Ú
model_dumpÚpush_agent_targetsr…   ÚsleepÚsnapshot_interval_seconds©Úsnapshots    rJ   Úmonitor_systemr(  ð   sŽ   è è € ð7Ý#×+Ò+Ñ-Ô-ˆÝ'¨×(;Ò(;Ñ(=Ô(=Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ý Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ÝŒmÕ5Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6ð	7rI   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          t                               ¦   «         ¦  «        D �]�} | j        }t1          | ¦  «        s!t2          j                             |d ¦  «         Œ:d| j        vrŒDt2          j         	                    |¦  «        }t                               ¦   «         st2                               ¦   «         ng }|r|d         nd }|r"|d         |d         |d                  d         fnd }||k    rÎ|rlt                               | ¦  «         t          | t9          d|d         |d         ¬¦  «        ¦  «        ƒ d {V —† t2          j                             |d ¦  «         |r^t                               | ¦  «         d | _        |t2          j        |<   t          | t2                               |¦  «        ¦  «        ƒ d {V —† �ŒŸt          t:          j                             ¦   «         ¦  «        D ]}	t?          |	j         ¦  «        ƒ d {V —† Œd S )NÚPENDINGÚapproval_cancelledÚ	CANCELLED)rã   Úapproval_idrÎ   r   r£   FTr  r  r  únative-interactionrå   Ú	questionsÚindexÚidÚuser_input_cancelledrŠ   )rã   rå   Úquestion_id)!r×   r�   rØ   rj   rl   re   r=   ÚpresentationsÚpoprR   rÎ   r§   rµ   rÙ   rß   rÌ   rs   r-  r…   r¥   Úwirer  r   r  rª   r>   rw   r  r  Úpi_sessionsÚsessionsÚpush_selected_pi_sessionrÛ   )
rž   Ú
connectionÚ
current_idÚcurrentr  ÚapprovalÚpreviousÚentryÚpresentationr  s
             rJ   Úsynchronize_approvalsrA  ø   s÷  è è € õ •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ÔÐÑð		$øøøõ •w—~’~Ñ'Ô'Ñ(Ô(ð Eñ EˆØÔ'ˆ
Ý˜fÑ%Ô%Ð]¥kÔ&?×&CÒ&CÀJÈtÑ&TÔ&TÐ&TÐU]Ø vÔ':Ð:Ð:¸8ÝÔ*×.Ò.¨zÑ:Ô:ˆÝ-6×-CÒ-CÑ-EÔ-EÐM•×#Ò#Ñ%Ô%Ð%È2ˆØ#Ð-ˆg�aŒjˆj¨ˆØW\Ðf�e˜LÔ)¨%°Ô*<¸UÀ7¼^Ô*LÈTÔ*RÐSÐSÐbfˆØ�\Ò!Ð!Øð ?Ý—’˜fÑ%Ô%Ð%Ý$ V­DÐ6LÐX`ÐabÔXcÐpxÐyzÔp{Ð,|Ñ,|Ô,|Ñ}Ô}Ð}Ð}Ð}Ð}Ð}Ð}Ð}ÝÔ)×-Ò-¨j¸Ñ>Ô>Ð>Øð EÝ—’˜fÑ%Ô%Ð%¸ fÔ&8Ø6B•Ô)¨*Ñ5Ý$ V­K×,<Ò,<¸UÑ,CÔ,CÑDÔDÐDÐDÐDÐDÐDÐDÐDùõ �Ô,×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 —† ŒCrE   )ÚwaitÚclearrA  ©rà   s    rJ   Úapproval_deliveryrF  1  s[   è è € ð&Ø�lŠl‰nŒnÐÐÐÐÐÐÐØ�Š‰ŒˆÝ#Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%Ð%ð&rI   c                óŠ   — t                                | ¦  «         t                               | ¦  «         d | _        d| _        d S )Nru   )rÙ   rß   rÌ   rs   rv   r©   s    rJ   Úinvalidate_targetrH  8  s:   € Ý‡O‚O�FÑÔÐ�FŸMšM¨&Ñ1Ô1Ð1ÀT°&Ô2DÐbdÈ&ÔJaÐJaÐJarI   c                  ó   — e Zd Zd„ Zd„ ZdS )ÚDynamicNavigatorc                ó"   — d | _         d | _        d S rE   )ÚinstanceÚidentityr}   s    rJ   Ú__init__zDynamicNavigator.__init__=  s   €  T�t”}¸¨$¬-¨-¨-rI   c                ó¤  — t          t          ¦  «        t          t          ¦  «        t          t          ¦  «        t          t          ¦  «        t          t
          ¦  «        f}| j        |k    rPt          t          t          t          t          t
          t          t          t          t          ¦	  «	        | _        || _        t          | j        |¦  «        S rE   )r1  r  Úadaptersr­   Ú
operationsr>   rM  r1   r§   rª   Úagent_target_payloadrH  rL  Úgetattr)r~   rÔ   rM  s      rJ   Ú__getattr__zDynamicNavigator.__getattr__>  s    € ÝÕ%Ñ&Ô&¥r­(¡|¤|µBµ|Ñ4DÔ4DÅRÍ
Á^Ä^ÕTVÕWbÑTcÔTcÐdˆØŒ=˜(Ò"Ð"Ý#Õ$4µX½lÍ:ÕVaÕbpÕqõ  AUõ  Vgñ  hô  hˆDŒMð  wð  imô  ivÝ�t”} TÑ*Ô*Ð*rI   N)r�   r‚   rƒ   rN  rT  rH   rI   rJ   rJ  rJ  <  s,   € € € € € Ø<Ð<Ð<ð+ð +ð +ð +ð +rI   rJ  Ú_r   c           	    ó   ‡K  — t          j        ¦   «         Šˆfd„t          _        ˆfd„t          _        dt
          v r.t          t
          d         _        t          t
          d         _	        t          t          t          ¦  «        }t          j        t          ‰¦  «        d¬¦  «        }t          j        t          ¦   «         d¬¦  «        }	 d W V — t                               ¦   «          t                               ¦   «         D ]}t                               |¦  «         Œt$                               ¦   «         ƒ d {V —† t&                               ¦   «         ƒ d {V —† |                     ¦   «         ƒ d {V —† t          j        d„ t
                               ¦   «         D ¦   «         Ž ƒ d {V —† t-          ¦   «         ƒ d {V —† d t          _        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 ]}t                               |¦  «         Œt$                               ¦   «         ƒ d {V —† t&                               ¦   «         ƒ d {V —† |                     ¦   «         ƒ d {V —† t          j        d„ t
                               ¦   «         D ¦   «         Ž ƒ d {V —† t-          ¦   «         ƒ d {V —† d t          _        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 rE   )rá   rE  s   €rJ   rh   zlifespan.<locals>.<lambda>H  s   ø€ Õ"3°GÑ"<Ô"<€ rI   c                 ó,   •— ‰                       ¦   «         S rE   )r‡   rE  s   €rJ   rh   zlifespan.<locals>.<lambda>I  s   ø€  §¢¡¤€ rI   rB   zapproval-delivery)rÔ   zsystem-monitorc              3  ó>   K  — | ]}|                      ¦   «         V — Œd S rE   )r  )rù   r  s     rJ   ú	<genexpr>zlifespan.<locals>.<genexpr>Y  s*   è è € ÐPÐP°7˜wŸ}š}™œÐPÐPÐPÐPÐPÐPrI   )r…   ÚEventr=   Ú	on_changer>   rP  Úqueue_codex_activityÚon_activityrÝ   Úon_terminalr.   r  Úcreate_taskrF  r(  r  r  rß   rÙ   rÌ   ÚgatherrØ   rA  r   ÚCancelledError)rU  Úapproval_serverÚdelivery_taskÚmonitor_taskr?  Útaskrà   s         @rJ   Úlifespanrg  E  s  øè è € åŒm‰oŒo€GØ<Ð<Ð<Ð<…IÔØ.Ð.Ð.Ð.…KÔØ•(ÐÐÝ(<��ÔÔ%Ý(9��ÔÔ%Ý&¥yÕ2BÑCÔC€OåÔ'Õ(9¸'Ñ(BÔ(BÐI\Ð]Ñ]Ô]€MÝÔ&¥~Ñ'7Ô'7Ð>NÐOÑOÔO€LðØˆˆˆˆå�ŠÑÔÐÝ ×(Ò(Ñ*Ô*ÐDÐDˆE­;×+=Ò+=¸eÑ+DÔ+DÐ+DÐ+DÝ�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ð ð Ø�
�
�
�
�
�
�
ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð	ð 	øõ 	�ŠÑÔÐÝ ×(Ò(Ñ*Ô*ÐDÐDˆE­;×+=Ò+=¸eÑ+DÔ+DÐ+DÐ+DÝ�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   ÃH/ È	H!È!H%	È(H%	È/D<NÍ+	N 	Í4NÎ NÎNÎNÎNzDevice Lab Gatewayú0.5.0)r“   Úversionrg  r  r&   c              ƒ  ó@   K  — t          |j        d|j        i¬¦  «        S )Nr  )Ústatus_codeÚcontent)r   Ústatusr  )Úrequestr  s     rJ   Úcontrol_error_handlerro  f  s"   è è € å C¤J¸À3Ä:Ð8NÐOÑOÔOÐOrI   r³   ra   c                óN   — | t           vrt          dd¦  «        ‚t           |          S )Nzagent adapter not enabledé”  )rP  r&   r²   s    rJ   r±   r±   k  s(   € Ø•HÐÐÝÐ6¸Ñ<Ô<Ð<Ý�EŒ?ÐrI   z/api/approvalsc               ƒ  óL   K  — d„ t                                ¦   «         D ¦   «         S )Nc                ó:   — g | ]}|                      d ¬¦  «        ‘ŒS )Újson)Úmode)r"  )rù   r=  s     rJ   rû   z"list_approvals.<locals>.<listcomp>s  s)   € ÐVÐVÐV°ˆH×Ò VÐÑ,Ô,ÐVÐVÐVrI   )r=   rµ   rH   rI   rJ   Úlist_approvalsrv  q  s&   è è € àVÐV½Y×=SÒ=SÑ=UÔ=UÐVÑVÔVÐVrI   z%/api/approvals/{approval_id}/decisionr-  r\   c              ƒ  ó®   K  — t                                | |j        ¦  «        st          dd¬¦  «        ‚d| t                                | ¦  «        j        dœS )Né™  z'approval is missing or already resolved©rk  r  T)Úacceptedr-  rÎ   )r=   Úresolver�   r   rR   rÎ   )r-  r\   s     rJ   Údecide_approvalr|  v  sU   è è € å×Ò˜[¨%¬.Ñ9Ô9ð _Ý¨Ð4]Ð^Ñ^Ô^Ð^Ø¨[Å9Ç=Â=ÐQ\ÑC]ÔC]ÔCcÐdÐdÐdrI   z/api/projectsc               ƒ  ó8   K  — t                                ¦   «         S rE   )r  r×   rH   rI   rJ   Úlist_projectsr~  }  s   è è € å× Ò Ñ"Ô"Ð"rI   éÉ   ©rk  Úprojectr(   c              ƒ  ó:   K  — t                                | ¦  «        S rE   )r  Úadd)r�  s    rJ   Úadd_projectr„  ‚  s   è è € å×Ò Ñ(Ô(Ð(rI   z/api/projects/{project_id}éÌ   r  c              ƒ  ó>   K  — t                                | ¦  «         d S rE   )r  Údelete)r  s    rJ   Údelete_projectrˆ  ‡  s    è è € å×Ò˜JÑ'Ô'Ð'Ð'Ð'rI   z/api/agentsc               ƒ  ó(   K  — d„ t           D ¦   «         S )Nc                ó   — g | ]	}|g d ¢dœ‘Œ
S ))r
  Úresume_sessionÚ
send_inputr	  Úlist_modelsr  )r³   rw   rH   )rù   rÔ   s     rJ   rû   zlist_agents.<locals>.<listcomp>Ž  sM   € ð  gð  gð  gð  VZ�dð  -Pð  -Pð  -Pð  Qð  Qð  gð  gð  grI   )rP  rH   rI   rJ   Úlist_agentsrŽ  Œ  s1   è è € ð gð  gõ  ^fð  gñ  gô  gð  grI   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 rE   )r
  )rù   r  r�  s     €rJ   rZ  z#project_sessions.<locals>.<genexpr>•  s1   øè è € Ð$eÐ$eÈ W×%:Ò%:¸7Ñ%CÔ%CÐ$eÐ$eÐ$eÐ$eÐ$eÐ$erI   Úreturn_exceptionsTzagent catalog unavailable)r8  Úerrors)r  rR   r…   ra  rP  rØ   Úzipr  r  r&   r  Úextend)r  r8  r’  ÚresultsrÔ   Úresultr�  s         @rJ   Úproject_sessionsr—  ‘  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Ð3rI   z)/api/agents/{agent}/sessions/{session_id}rÛ   c              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S rE   )r±   r  ©r³   rÛ   s     rJ   Úget_agent_sessionrš  ž  s4   è è € å˜UÑ#Ô#×/Ò/°
Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;rI   z0/api/agents/{agent}/sessions/{session_id}/resumec              ƒ  ód   K  — t          | ¦  «                             |¦  «        ƒ d {V —†}d| ||dœS )NT)rz  r³   rÛ   Úresumed)r±   r‹  )r³   rÛ   rœ  s      rJ   Úresume_agent_sessionr�  £  sF   è è € å Ñ&Ô&×5Ò5°jÑAÔAÐAÐAÐAÐAÐAÐA€GØ u¸JÐSZÐ[Ð[Ð[rI   z//api/agents/{agent}/sessions/{session_id}/inputéÊ   r'   c              ƒ  ób   K  — t          | ¦  «                             ||j        ¦  «        ƒ d {V —†S rE   )r±   rŒ  Útext©r³   rÛ   r\   s      rJ   Úagent_inputr¢  ©  s8   è è € å˜UÑ#Ô#×.Ò.¨z¸5¼:ÑFÔFÐFÐFÐFÐFÐFÐFÐFrI   z2/api/agents/{agent}/sessions/{session_id}/settingsc              ƒ  óV   K  — t          | ¦  «                             |¦  «        ƒ d {V —†S rE   )r±   r	  r™  s     rJ   r	  r	  ®  s4   è è € å˜UÑ#Ô#×0Ò0°Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<rI   r)   c              ƒ  óX   K  — t          | ¦  «                             ||¦  «        ƒ d {V —†S rE   )r±   r  r¡  s      rJ   r  r  ³  s6   è è € å˜UÑ#Ô#×3Ò3°JÀÑFÔFÐFÐFÐFÐFÐFÐFÐFrI   z/healthc               ƒ  ón   K  — ddt          d„ t                               ¦   «         D ¦   «         ¦  «        dœS )NÚokrh  c              3  ó$   K  — | ]}|j         V — Œd S rE   )rl   )rù   r»   s     rJ   rZ  zhealth.<locals>.<genexpr>º  s%   è è € ÐMqÐMqÐ[\ÈaÌhÐMqÐMqÐMqÐMqÐMqÐMqrI   )rm  Úcontrol_versionÚonline_devices)Úsumr�   rØ   rH   rI   rJ   Úhealthr«  ¸  s:   è è € à¨wÍ#ÐMqÐMqÕ`g×`nÒ`nÑ`pÔ`pÐMqÑMqÔMqÑJqÔJqÐrÐrÐrrI   ú/F)Úinclude_in_schemar   c               ƒ  ó(   K  — t          dd¬¦  «        S )Nú/admini3  r€  )r   rH   rI   rJ   Úrootr°  ½  s   è è € å˜H°#Ð6Ñ6Ô6Ð6rI   r¯  r   c               ƒ  ó2   K  — t          t          d¬¦  «        S )Nz	text/html©Ú
media_type)r   Úadmin_page_pathrH   rI   rJ   Ú
admin_pagerµ  Â  s   è è € å�°KÐ@Ñ@Ô@Ð@rI   z/api/admin.jsc               ƒ  ó¨   K  — t          t          j                             t          j                             t
          ¦  «        d¦  «        d¬¦  «        S )Nzadmin.jsztext/javascriptr²  )r   rP   ÚpathÚjoinÚdirnamer´  rH   rI   rJ   Úadmin_scriptrº  Ç  s8   è è € å�œŸš¥R¤W§_¢_µ_Ñ%EÔ%EÀzÑRÔRÐ_pÐqÑqÔqÐqrI   z/serverc               ƒ  óx   K  — t           j        pt                                ¦   «         } |                      ¦   «         S rE   )r   Úlatestr!  r"  r&  s    rJ   Úserver_statusr½  Ì  s2   è è € åÔ&ÐDÕ*:×*BÒ*BÑ*DÔ*D€HØ×ÒÑ Ô Ð rI   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 rE   )rb   )r»   s    rJ   rh   zlist_devices.<locals>.<lambda>Õ  s   € ¸¼€ rI   )rþ   r˜   Úspeech_mode)
r{   r�   rØ   r   r­   rR   rb   rÙ   ÚpreferencesÚappend)r–  rž   Úitems      rJ   Úlist_devicesrÅ  Ò  sš   è è € à€FÝ�ŸšÑ)Ô)Ð/DÐ/DÐEÑEÔEð ð ˆØ�}Š}‰ŒˆÝ%×)Ò)¨&Ô*:Ñ;Ô;ˆˆX‰Ý&Ô2×6Ò6°vÔ7GÈÈhÌÑXÔXˆˆ]ÑØ�Š�dÑÔÐÐØ€MrI   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 )	Nr<   rÛ   ÚWAITING_APPROVALrÎ   r   ú: Úwaiting_reason)Úserverr�   r7  )r   r¼  r!  r7  r   r=   rµ   r“   r  r"  rÅ  )r'  r8  r  r  s       rJ   Ú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Ð$Ñ%øà×%Ò%Ñ'Ô'Ý%™œÐ'Ð'Ð'Ð'Ð'Ð'Øðð ð rI   Ú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_stater<   ú	agent:pi:ru   ÚOFFLINEr   )	rã   r³   r˜   rÛ   rÔ   ÚcwdrÎ   Úelapsed_secondsrÉ  )rã   r³   r˜   T)Úinclude_historyrÇ  rÎ   rÈ  rÉ  rÌ  )r7  rR   r   r=   rµ   r“   r  )rÛ   rÌ  r  rŸ   r  s        rJ   Ú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ˆÐ Ñ!ØÐØ".ˆ�ÑØ€NrI   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  )rR  r×   r�   rØ   r­   rR   rb   r§   r  rÙ   rß   rÌ   rs   re   r   r  rl   rK   rm   )rÛ   rÌ  rŸ   rž   s       rJ   r9  r9  
  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_activityr<   rÐ  )rã   r³   r˜   rÛ   Úactivity_typeÚactivityrý   FTr  r  r  )r7  rR   rÛ   rÕ   rÙ  Úactivity_updated_atr|   r×   r�   rØ   r­   rb   r§   r  rÙ   rß   rÌ   rs   re   r   r  rl   rK   rm   )rç   r  rŸ   rž   s       rJ   Ú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              ƒ  óÄ  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    rt                               |¦  «        re|j        r^t          |¦  «        }dD ]7}|                     |¦  «        s |                     |¦  «        r||         ||<   Œ8|                     |¦  «         |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˜   rB   Úobserve_sessionrÏ  Úrecent_textru   zutf-8i`ðÿÿÚignore)r’  r<   )rà  rÜ   rÕ   rÑ  r   )	rã   r˜   r³   rÛ   rÔ   rÎ   rÓ  rø   Úeffort)r   r±   r  Úhasattrrß  r   r"  rR   ÚencodeÚdecoder7  ÚliverÕ  Úupdater&   )r˜   r  r³   r  r  rŸ   Úoverlayr   s           rJ   rR  rR  ?  s4  è è € Ý˜&Ñ!Ô!€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ˆ=Ý% cÑ*Ô*ˆGð Hð _ð _�Ø—{’{ 5Ñ)Ô)Ð^¨g¯kªk¸%Ñ.@Ô.@Ð^ÐPWÐX]ÔP^ÀÈÁøØ�NŠN˜7Ñ#Ô#Ð#ØˆøÝð Yð Yð YØ�DŠ=ˆ=�[Ÿ_š_¨SÑ1Ô1ˆ=Ý$ SÑ)Ô)Ð)Ð)Ð)Ø$Õ.>¸vÑ.FÔ.FÈuÐbeØ˜y¸1ÀTÐSWðYð Yð 	Yð 	Yð 	YðYøøøs   ŸE(F Æ9GÇGÇGc              ƒ  óL  K  — i }t          t                               ¦   «         ¦  «        D �]÷}t                               |j        ¦  «        }t                               |j        ¦  «        }t          |¦  «        }t          |¦  «        r|r
| r	|| |fk    rŒl	 ||vrt          |¦  «        ƒ d {V —†||<   ||         }t                               |j        ¦  «        |k    s2t                               |j        ¦  «        |k    st          |¦  «        sŒç|rst          |t          d|||d         |d         |                     d¦  «        |                     dd¦  «        |                     dd¦  «        ¬¦  «        ¦  «        ƒ d {V —† npt          ||¬	¦  «        }	|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Õ   ru   rà  )rã   r˜   r  r³   rÛ   rÙ  rÚ  rà  ©r  rB   )ÚRUNNINGrÇ  rÎ   )ÚDONEÚFAILEDrÌ  zAgent target delivery failed)r×   r�   rØ   r­   rR   rb   r·   r   rª   rR  r§   r  rv   Úlowerr  rT   rU   )
r³   r  rÚ  Úcacherž   r˜   r·   r  rŸ   Úoutgoings
             rJ   r#  r#  Y  sÂ  è è € Ø€EÝ•w—~’~Ñ'Ô'Ñ(Ô(ð ;ñ ;ˆÝ×!Ò! &Ô"2Ñ3Ô3ˆÝ×*Ò*¨6Ô+;Ñ<Ô<ˆ
Ý˜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Ò;Ð;½|×?VÒ?VÐW]ÔWgÑ?hÔ?hÐjtÒ?tÐ?tõ  }Kð  LRñ  }Sô  }SÐ?tð  U]Øð 	7Ý$ V­TÐ7GÈvÐhrÐyð  ABô  zCð  OUð  VWô  OXØ")§+¢+¨oÑ">Ô">ÈÏÊÐTeÐfhÑHiÔHiØ '§¢¨M¸"Ñ =Ô =ð.?ñ .?ô .?ñ @ô @ð @ð @ð @ð @ð @ð @ð @ð @õ   ¸*ÐEÑEÔE�Ø˜!”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   ÂA9G9ÄC%G9Ç9$H!È H!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Ã?rB   T)rÚ  )r…   r$  r#  Ú_codex_push_tasksr5  )r  s   €rJ   Údeliverz%queue_codex_activity.<locals>.deliverx  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   `  rJ   r]  r]  v  sU   ø€ ð-ð -ð -ð -ð -ð Õ#Ð#Ð#Ý!'§¢¨g¨g©i¬iÑ!8Ô!8Õ˜#ÑÐÐð $Ð#rI   z/integrations/pi/events)rq   Úx_device_lab_pi_tokenc              ƒ  óR  K  — t                                |¦  «        st          dd¬¦  «        ‚t                               | ¦  «        }| j        dv r@t                               d| j        ¦  «         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 tokenry  )Úsession_shutdownÚ	agent_endr<   rú  rÓ   rÚ  T)rz  r  )Úcredential_storeÚauthenticate_pir   r7  Úapplyrç   r=   Úcancel_sessionrÛ   r>   Úpending_notificationrÝ   rÎ   rÜ   rÔ   rÕ   rÜ  r9  r   )rç   r÷  r  s      rJ   Úpi_eventr   ƒ  sA  è è € õ
 ×+Ò+Ð,AÑBÔBð TÝ¨Ð4RÐSÑSÔSÐSÝ×Ò Ñ&Ô&€GØ„{Ð7Ð7Ð7Ý× Ò   uÔ'7Ñ8Ô8Ð8Ý×"Ò" 4¨Ô(8Ñ9Ô9Ð9Ø„{�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Ð:Ð:Ð:rI   z/devices/{device_id}/targetrb   Ú	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         }d}	t!          |¦  «        �rJ	 t#          |¦  «        ƒ d {V —†}
t                               | ¦  «        |k    rbt'          |t)          |
|¬¦  «        ¦  «        ƒ d {V —† |
                     d	d¦  «        |_        t                               |¦  «        ƒ d {V —† d
}	n³# t,          $ r¦ t                               |dd
¬¦  «         t                               |dd
¬¦  «         d |_        |j        rMt1          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 )Nrq  údevice not foundry  r<   ru   r·   Frê  rÎ   Tr  r  r  )rb   r˜   Ú	delivered)r�   r   r   r˜   r   r7  rR   r±   r  r­   rÙ   rß   rÌ   rs   rv   r‡   rª   rR  r·   r§   r  ró   r  re   r   r  rl   )rb   r  r˜   r  r³   r  rž   r\   r·   r  rŸ   s              rJ   Úselect_targetr  ˜  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ÑÔÐØ!ˆÔØ"$ˆÔÝ
×
Ò
˜9 VÑ
,Ô
,€EØ�\Ô"€JØ€IÝ�fÑÔñ $ð	$Ý0°Ñ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8ˆGÝ×&Ò& yÑ1Ô1°:Ò=Ð=Ý$ V­D°È:Ð,VÑ,VÔ,VÑWÔWÐWÐWÐWÐWÐWÐWÐWØ*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   Ä2BG ÇA&I8È."IÉI8ÉI 	É I8É#I 	É$I8É7I8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 )Nrq  r  ry  rx  r¢   Údisplay_message)rã   r“   r”   Fúdevice disconnectedz!sent display_message to device %sT)Úsentrb   rí   )r�   rR   r   rl   re   r“   r”   r§   r  rT   Úinfo)rb   rí   rž   rŸ   r  s        rJ   Ú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-notificationrn  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 )Nrq  r  ry  rx  r¢   Únotification_test)rã   rœ   Fr  z&sent %s notification test to device %sT)r	  rb   rœ   )
r�   rR   r   rl   re   r§   rœ   r  rT   r
  )rb   rn  rž   r  s       rJ   Ú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Œ   ra   r˜   z6Literal['OFF', 'MANUAL', 'AUTO_REPLY', 'AUTO_SUMMARY']ru  Nr™   rH   rI   rJ   r  r  â  s>   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø@Ð@Ð@Ñ@Ð@Ð@rI   r  c                  ó<   — e Zd ZU  edd¬¦  «        Zded<   ddiZdS )	Ú
SpeechTestrŠ   r  rŒ   ra   r˜   ÚextraÚforbidN)r�   r‚   rƒ   r   r˜   r„   Úmodel_configrH   rI   rJ   r  r  ç  s:   € € € € € € Ø�% 1°Ð5Ñ5Ô5€FÐ5Ð5Ð5Ñ5Ø˜XÐ&€L€L€LrI   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 )Nrq  úDevice not foundrx  ú Target changed; refresh settings)ru  r˜   )r�   rR   r   r­   r   r˜   rÙ   rß   rÂ  r‡   ru  ró   ©rb   r\   rž   s      rJ   Ú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ÐIrI   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 )
Nrq  r  rx  r  Úscreenu   è¯­éŸ³æ’­æ”¾æµ‹è¯•æˆ�åŠŸã€‚zASpeech unavailable, device busy or firmware lacks speech_playbackrz  T)r�   rR   r   r­   r   r˜   rÙ   Ústartr  s      rJ   Ú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Ø˜ÐÐrI   z
/device/wsre   r   c              ƒ  óØ   ‡K  — |                       ¦   «         ƒ d {V —† d }	 |                      ¦   «         ƒ d {V —†Št          ‰t          ¦  «        r‰                     d¦  «        dk    �rª|                      dd¬¦  «        ƒ d {V —† 	 |�‹t                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        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}t3          ˆfd„|D ¦   «         ¦  «        �rª|                      dd¬¦  «        ƒ d {V —† 	 |�‹t                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        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         }t4                               |‰d         ¦  «        �sÅt.                               d|¦  «         |                      dd¬¦  «        ƒ d {V —† 	 |�‹t                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        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 —† t;          |‰d         ‰d         | t          ‰                     d¦  «        t<          ¦  «        r d„ ‰                     dg ¦  «        D ¦   «         nt?          ¦   «         ¬¦  «        }|t          |<   tA          |dtC          t+          ¦   «          "                    ¦   «         dz  ¦  «        tG          ¦   «         tI          tJ          |j&        z  ¦  «        tN           (                    |¦  «        dœ¦  «        ƒ d {V —† tR          j*        ptR           +                    ¦   «         }tA          || ,                    ¦   «         ¦  «        ƒ d {V —† tN                               |¦  «        }t[          |¦  «        ƒ d {V —†}tA          |t          |fi d|j&        v rdtN           (                    |¦  «        ini ¤Ž¦  «        ƒ d {V —† |                     dd ¦  «        |_.        t           /                    |¦  «        ƒ d {V —† t           0                    ¦   «          t.                               d!|j        |j1        |j2        ¦  «         	 |                      ¦   «         ƒ d {V —†}t          |t          ¦  «        r(t          |                     d¦  «        tf          ¦  «        s!t.                               d"|j        ¦  «         Œyt+          ¦   «         |_        |d          4                    d#¦  «        r
d|d         in||_5        |d          4                    d$¦  «        r#t           6                    ||¦  «        ƒ d {V —† �n”|d          4                    d%¦  «        rI|d         d&k    rt                               |¦  «         t           6                    ||¦  «        ƒ d {V —† �n0|d         d'v rÈ|d         d(k    rt                               |¦  «         |d         d)k    rto          ||¦  «        ƒ d {V —† �nÜ|j8        �|j8         9                    ¦   «         r/t           :                    to          ||¦  «        ¦  «        |_8        �n�tA          |d*|                     d+¦  «        d,d-œ¦  «        ƒ d {V —† �n^|d         d.v rÄ|d         d/k    r#tv           6                    ||¦  «        ƒ d {V —† �n%|j8        �|j8         9                    ¦   «         r:t           :                    tv           6                    ||¦  «        ¦  «        |_8        �nËtA          |t          d0|                     d+¦  «        d1¬-¦  «        ¦  «        ƒ d {V —† �n�|d         d2k    rÅt                               |j        ¦  «        |u r£|j        rœ|                     d3¦  «        }	t                               |                     d4¦  «        ¦  «        }
d5|j&        vr|	d6k    r|
rd7|
j<        vrd8|
j<        v rd8}	t           =                    |                     d4¦  «        |	|j        ¬9¦  «         n¿|d         d:k    rKt.                               d;|j        |                     d<d=¦  «        |                     d>d=¦  «        ¦  «         nh|d         d?k    r5t.           >                    d@|j        |                     dA¦  «        ¦  «         n't.                               dB|j        |d         ¦  «         �Œ‹# t~          $ r Y n)t&          $ r t.           @                    dC¦  «         Y nw xY w|�‹t                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        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                               |dd¬¦  «         t                               |dd¬¦  «         d |_	        t          j                             |j        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)DNrã   Úhelloið  zfirst message must be hello)r  ÚreasonFTr  r  r  zdevice %s offline)rb   Údevice_tokenrc   rd   c              3  ó|   •K  — | ]6}t          ‰                     |¦  «        t          ¦  «         p‰|          V — Œ7d S rE   )r  rR   ra   )rù   rþ   r!  s     €rJ   rZ  z#device_websocket.<locals>.<genexpr>  sE   øè è € ÐYÐYÈ•:˜eŸiši¨™nœn­cÑ2Ô2Ð2ÐD¸%À¼*°nÐYÐYÐYÐYÐYÐYrI   zinvalid hellorb   r#  zrejected unauthorized device %szunauthorized deviceiô  zreplaced by a new connectionrc   rd   rw   c                ó<   — h | ]}t          |t          ¦  «        ¯|’ŒS rH   )r  ra   )rù   Úvs     rJ   ú	<setcomp>z#device_websocket.<locals>.<setcomp>$  s)   € ÐYÐYÐY ÅjÐQRÕTWÑFXÔFXÐY˜!ÐYÐYÐYrI   )rb   rc   rd   re   rw   Ú	hello_ackiè  )rã   Úserver_time_msÚtimezone_offset_minutesrw   r  ztarget-selectr  rÎ   ru   z%device %s online board=%s firmware=%szdevice %s sent invalid event)Úvoice_Ú	settings_Úspeech_Úuser_input_Úsession_Ú	creation_r-  r+  Úvoice_start)rî   rò   rä   rî   rä   rë   rå   zSettings request busyrì   )Úcatalog_getÚtarget_selectÚ
target_getÚcreation_getÚsession_createÚsession_operation_getÚuser_input_responser8  Únavigator_errorÚBusyÚapproval_responser�   r-  r.  ÚrejectÚdeclinerß   )Ú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)AÚacceptÚreceive_jsonr  r  rR   r  rÙ   rß   rÌ   rs   r=   r4  r5  rj   r>   r�   rb   re   r   r  rl   rK   rm   rT   r
  Úanyrû  ÚauthenticaterU   r`   r×   r‡   r§   rL   Ú	timestampr^   r{   r2   rw   r­   r·   r   r¼  r!  r"  rR  rv   ró   rà   rc   rd   ra   Ú
startswithrn   Úhandlerè   rr   Údonerõ  r¹   Úchoicesr{  Údebugr   Ú	exception)re   rž   Úrequiredrb   r>  r'  r˜   rŸ   rç   r�   r=  r!  s              @rJ   Údevice_websocketrQ    sÅ  øè è € à
×
Ò
Ñ
Ô
ÐÐÐÐÐÐÐØ €Fðv?Ø×,Ò,Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.ˆÝ˜%¥Ñ&Ô&ð 	¨%¯)ª)°FÑ*;Ô*;¸wÒ*FÑ*FØ—/’/ tÐ4Q�/ÑRÔRÐRÐRÐRÐRÐRÐRÐRØðF ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨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 FˆÝÐYÐYÐYÐYÐPXÐYÑYÔYÑYÔYñ 	Ø—/’/ t°O�/ÑDÔDÐDÐDÐDÐDÐDÐDÐDØð| ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨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ðE ˜+Ô&ˆ	Ý×,Ò,¨Y¸¸nÔ8MÑNÔNñ 	Ý�NŠNÐ<¸iÑHÔHÐHØ—/’/ tÐ4I�/ÑJÔJÐJÐJÐJÐJÐJÐJÐJØðp ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨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Ý!¥,°Ô1DÑ"DÑEÔEÝ ,× 7Ò 7¸	Ñ BÔ Bð&
ð &
ñ ô ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ $Ô*ÐHÕ.>×.FÒ.FÑ.HÔ.HˆÝ˜V X×%8Ò%8Ñ%:Ô%:Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ý×!Ò! )Ñ,Ô,ˆÝ,¨VÑ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4ˆÝ˜V¥D¨ð  %að  %aÐpð  DJô  DWð  qWð  qWÐ5HÍ×I`ÒI`ÐajÑIkÔIkÐ4lÐ4lð  ]_ð  %að  %añ  bô  bð  	bð  	bð  	bð  	bð  	bð  	bð  	bØ")§+¢+¨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ð  UZñ  <[ô  <[ð  !f ¨¨v¬Ð 7Ð 7ð  afˆ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”ð  #]ð  ]ð  ]Ø˜”=Ð"7Ò7Ð7½i×>NÒ>NÈvÐV[Ñ>\Ô>\Ð8\Ð8\Ð8\Ð8\Ð8\Ð8\Ð8\Ñ8\ØÔ)Ð1°VÔ5I×5NÒ5NÑ5PÔ5PÐ1Õfl×frÒfrÕs|÷  tDò  tDð  EKð  LQñ  tRô  tRñ  gSô  gSÐQWÔQeÑQeÝ)¨&µÐ;LÐX]×XaÒXaÐbnÑXoÔXoÐx~Ð1Ñ1Ô1ñ  Aô  Að  Að  Að  Að  Að  Að  Að  Añ  AØ�v”Ð"5Ò5Ð5Ý—;’;˜vÔ/Ñ0Ô0°FÐ:Ð:¸v¼}Ð:Ø"ŸYšY zÑ2Ô2�HÝ&Ÿ]š]¨5¯9ª9°]Ñ+CÔ+CÑDÔD�Hð -°FÔ4GÐGÐGÈHÐV^ÒL^ÐL^Ø (ð M_Ø-6¸hÔ>NÐ-NÐ-NÐS[Ð_gÔ_oÐSoÐSoØ!)˜Ý×%Ò% e§i¢i°Ñ&>Ô&>ÀØ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ñ_/	Xøõ` ð ð ð ØˆÝð 4ð 4ð 4Ý×ÒÐ2Ñ3Ô3Ð3Ð3Ð3ð4øøøð ÐÝ�OŠO˜F¨5¸ˆOÑ>Ô>Ð>Ý�MŠM˜&¨°tˆMÑ<Ô<Ð<Ø!%ˆFÔÝÔ#×'Ò'¨Ô(<¸dÑCÔCÐCÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨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ÝÔ%×)Ò)¨&Ô*>¸tÑDÔDÐDØÐ¥'§+¢+¨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&t Æ"GÇGÇ	GÈ;t Í"N
Î
NÎNÏA"t Õ"U9Õ9U=Ö U=×]t ô
uô({ ô*#uõ{ õuõ{ ù"zúzúzûDAA)ÿ,"A@Á@AA)Á@A@Á@AA)Á@!A@Á@"AAA))rC   r   )rC   rL   )rž   r`   rŸ   ry   rC   r    )rŸ   ry   rC   r    )rC   r    )rU  r   )r  r&   )r³   ra   )r-  ra   r\   r‰   )r�  r(   )r  ra   )r³   ra   rÛ   ra   )r³   ra   rÛ   ra   r\   r'   )r³   ra   rÛ   ra   r\   r)   r€   )rC   r   )rC   r   )rC   r¾  rE   )rÛ   ra   rÌ  rÍ  rC   ry   )rÛ   ra   rÌ  rÍ  rC   r    )rç   r   rC   r    )NNF)rç   r   r÷  ra   rC   ry   )rb   ra   r  r–   rC   ry   )rb   ra   rí   r‘   rC   ry   )rb   ra   rn  r›   rC   ry   )rb   ra   r\   r  )rb   ra   r\   r  )re   r   rC   r    )¤Ú
__future__r   r…   ÚloggingrP   Ú
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.   Ú!device_gateway.control.user_inputr/   Ú!device_gateway.control.operationsr0   Ú device_gateway.control.navigatorr1   r2   Ú	getLoggerrT   rQ   rR   r   Úfloatr%  rû  r­   r·  r¸  r¹  Ú__file__r´  r7  r  r=   r>   rQ  rP  rK   r^   r`   r‰   r‘   r–   r›   r�   r„   r§   rª   rÌ   rÐ   Úspeech_preferencesrÙ   rÝ   rá   rè   ræ   r  r(  rA  rF  rH  rJ  r¹   rg  ÚappÚexception_handlerro  r±   rv  Úpostr|  r~  r„  r‡  rˆ  rŽ  r—  rš  r�  r¢  r	  r  r«  r°  rµ  rº  r½  rÅ  rË  rÕ  r9  rÜ  rR  r#  ró  r]  r   r  r  r  r  r  r  r  re   rQ  rH   rI   rJ   ú<module>rr     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Ø =Ð =Ð =Ð =Ð =Ð =Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cð 
ˆÔ	Ð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Ñ{Ô{Ð ØÐÑÔ€	ØˆJ‰LŒL€Øˆ:�b”j—n’nÐ%>Ð?qÑrÔrÑsÔs€
Ø�)�)Ð,¨kÀYÐ[fÐgÑgÔgÐh€Ø„:‡>‚>Ð)¨3Ñ/Ô/°3Ò6Ð6Ø$˜Ð%5ÀÐWbÐcÑcÔc€HˆWÑð&ð &ð &ð &ð
Jð 
Jð 
Jð 
Jð ð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ „ð
ð:6ð 6ð 6ð 6ð 6�yñ 6ô 6ð 6ð4ð 4ð 4ð 4ð 4�Yñ 4ô 4ð 4ð
`ð `ð `ð `ð `�iñ `ô `ð `ð$ð $ð $ð $ð $�yñ $ô $ð $ð  €Ð Ð Ð Ñ ðGð Gð Gð Gðfð fð fð 
ˆ�n�nÑ&Ô&Ð(IÐ(IÐKkÐKkØ�>Ð"GÐ"GÐW~ÐW~Ø;Ð;ÐJoÐJoð  @jð  @jð
kñ 
kô 
k€ð
Nð Nð Nð
 'Ð& r¤z§~¢~Ð6KÐMyÑ'zÔ'zÑ{Ô{Ð Øˆ=˜˜Ñ)Ô)¨=¨=©?¬?Ð<NØ%Ð% ~°~À~ñWô W€ð EGÐXZð _ð _ð _ð _ð _ð
ð ð ð.ð .ð .ð+]ð +]ð +]ð\eð eð eð eð$7ð 7ð 7ð 7ð6;ð 6;ð 6;ðr&ð &ð &ðeð eð eð+ð +ð +ð +ð +ñ +ô +ð +ð Ð
Ñ
Ô
€	àðð ð ñ Ôðð: €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;ð ;ð ;ð ;ð6 Ð ð
9ð 
9ð 
9ð ‡‚Ð
#°u€Ñ=Ô=ð "( °Ð!3Ñ!3Ô!3ð;ð ;ð ;ð ;ñ >Ô=ð;ð( ‡‚Ð
'Ñ(Ô(ð"Nð "Nð "Nñ )Ô(ð"NðJ ‡‚Ð
(Ñ)Ô)ð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ðð ‡‚ˆ|ÑÔðy?ð y?ð y?ñ Ôðy?ð y?ð y?rI   