§
    ‚Njà1  ã            	       óž  — d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z' d dl(m&Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 d dl2T d dl3m4Z4m5Z5 d dl6Z6d dl7Z7d dl8m9Z9 d dl:Z:d dl;m<Z<  e6j=        e>¦  «        Z?e? @                    e6jA        ¦  «          e6jB        ¦   «         ZCeC @                    e6jA        ¦  «          e6jD        d¦  «        ZEeC F                    eE¦  «         e? G                    eC¦  «          e6j=        d¦  «         @                    e6jA        ¦  «         e1jH         I                    e0¬¦  «         d„ ZJ eJ¦   «          d dlKmLZLmMZM  G d„ de¦  «        ZN G d„ de¦  «        ZO ee¬ ¦  «        ZP ed!d"d#¬$¦  «        ZQePeQjR        _P        eQ S                    ee¦  «         eQ T                    eN¦  «         eQ T                    eO¦  «         eQ T                    ed%¬&¦  «         eQ T                    eejU        d'g d(¢g d)¢d*d+g¬,¦  «         eQ V                    e¦  «         eQ V                    e¦  «         eQ V                    e¦  «         eQ V                    e¦  «         eQ V                    e¦  «         eQ V                    e¦  «         eQ V                    e ¦  «         eQ V                    e!¦  «         eQ V                    e"¦  «         eQ V                    e#¦  «         eQ V                    e$¦  «         eQ V                    e'¦  «         eQ V                    e)d-d.g¬/¦  «          eQ W                    d0¦  «        e.¦  «          e*eQ¦  «          e7jX        ejY        d'¬1¦  «          e7jX        ejZ        d'¬1¦  «          e7jX        ej[        d'¬1¦  «         eQ \                    d2 eejY        ¬3¦  «        d4¬5¦  «         eQ \                    d6 eejZ        ¬3¦  «        d7¬5¦  «         eQ \                    d8 eej[        ¬3¦  «        d9¬5¦  «         eQ W                    d:¦  «        d;„ ¦   «         Z]eQ W                    d<¦  «         ee4¦  «        fd=„¦   «         Z^eQ W                    d>¦  «         ee4¦  «        fd?„¦   «         Z_eQ W                    d@¦  «         ee5¦  «        fdA„¦   «         Z`eQ W                    dB¦  «         ee4¦  «        fdC„¦   «         ZaeQ W                    dD¦  «        dE„ ¦   «         ZbeQ c                    dF¦  «        dUdGe
dHeddIedfdJ„¦   «         ZeeQ c                    dK¦  «        dUdGe
dIedfdL„¦   «         ZfdM„ ZgeQ h                    dN¦  «        dO„ ¦   «         ZieQ j                    ek¦  «        dP„ ¦   «         Zle>dQk    rd dlmZm emjn        eQdRdS¬T¦  «         dS dS )Vé    )ÚFastAPIÚDepends)ÚCORSMiddleware)ÚGZipMiddleware)ÚJSONResponse)Ú	WebSocketÚWebSocketDisconnect)ÚStaticFiles)ÚLimiterÚ_rate_limit_exceeded_handler)Úget_remote_address)ÚRateLimitExceeded)ÚBaseHTTPMiddleware©Úsettings)Úauth_routerÚstreams_routerÚcomments_routerÚtags_routerÚhealth_routerÚchat_routerÚusers_routerÚadmin_routerÚtwitch_auth_routerÚbackup_routerÚsettings_router)Úrouter)r   Úset_app)Úmanager©Ússe_endpoint)ÚengineÚBase)Ú*)Úget_current_userÚget_current_admin_userN)ÚUUID)ÚPathz4%(asctime)s - %(name)s - %(levelname)s - %(message)szuvicorn.access)Úbindc                  óè  — ddl m}  ddlm} ddlm}  | ¦   «         }	 |                     |¦  «                             |j        dk    ¦  «         	                    ¦   «         }|sg |dddd¬	¦  «        }| 
                    |¦  «         |                     ¦   «          |                     |¦  «         t                               d
¦  «         |                     |¦  «                             |j        |j        k    ¦  «         	                    ¦   «         }|s±|                     |¦  «                             |j                             ¦   «         ¦  «         	                    ¦   «         }|rD|j        |_        |                     ¦   «          t                               d|j        › d�¦  «         nt                               d¦  «         |                     ¦   «          d S # |                     ¦   «          w xY w)Nr   ©ÚSessionLocal)ÚUser)ÚRoleÚadminzAdministrator with full accessTéd   )ÚnameÚdescriptionÚ
is_defaultÚpriorityzCreated admin rolez
Made user z an admin (oldest account)z8No users exist yet - first registered user will be admin)Úapp.databaser,   Úapp.models.userr-   Úapp.models.permissionr.   ÚqueryÚfilterr1   ÚfirstÚaddÚcommitÚrefreshÚloggerÚinfoÚrole_idÚidÚorder_byÚ
created_atÚascÚusernameÚwarningÚclose)r,   r-   r.   ÚdbÚ
admin_roleÚadmin_existsÚoldest_users          ú/app/app/main.pyÚensure_admin_existsrM   ,   sÍ  € Ø)Ð)Ð)Ð)Ð)Ð)Ø$Ð$Ð$Ð$Ð$Ð$Ø*Ð*Ð*Ð*Ð*Ð*à	ˆ‰Œ€Bðà—X’X˜d‘^”^×*Ò*¨4¬9¸Ò+?Ñ@Ô@×FÒFÑHÔHˆ
Øð 	.à˜ 7Ð8XÐeiÐtwÐxÑxÔxˆJØ�FŠF�:ÑÔÐØ�IŠI‰KŒKˆKØ�JŠJ�zÑ"Ô"Ð"Ý�KŠKÐ,Ñ-Ô-Ð-ð —x’x ‘~”~×,Ò,¨T¬\¸Z¼]Ò-JÑKÔK×QÒQÑSÔSˆàð 	[àŸ(š( 4™.œ.×1Ò1°$´/×2EÒ2EÑ2GÔ2GÑHÔH×NÒNÑPÔPˆKØð [Ø&0¤m�Ô#Ø—	’	‘”�Ý—’ÐY¨Ô)=ÐYÐYÐYÑZÔZÐZÐZå—’ÐYÑZÔZÐZà
�Š‰
Œ
ˆ
ˆ
ˆ
øˆ�Š‰
Œ
ˆ
ˆ
øøøs   žF'G ÇG1)Úrestore_statusÚrestore_lockc                   ó   — e Zd Zd„ ZdS )ÚMaintenanceModeMiddlewarec              ƒ   ó
  K  — t           5  t          j        dd¦  «        }d d d ¦  «         n# 1 swxY w Y   |r;|j        j        }|dv r ||¦  «        ƒ d {V —†S t          dddt          dœ¬¦  «        S  ||¦  «        ƒ d {V —†S )	NÚis_restoringF)z /api/admin/backup/restore/statusz/healthz/api/healthi÷  zLSystem is in maintenance mode during backup restore. Please try again later.T)ÚdetailrS   rN   ©Ústatus_codeÚcontent)rO   rN   ÚgetÚurlÚpathr   )ÚselfÚrequestÚ	call_nextrS   rZ   s        rL   Údispatchz"MaintenanceModeMiddleware.dispatchS   s  è è € åð 	Eð 	EÝ)Ô-¨n¸eÑDÔDˆLð	Eð 	Eð 	Eñ 	Eô 	Eð 	Eð 	Eð 	Eð 	Eð 	Eð 	Eøøøð 	Eð 	Eð 	Eð 	Eð ð 	Ø”;Ô#ˆDØÐUÐUÐUØ&˜Y wÑ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/õ  ØàlØ$(Ý&4ðð ðñ ô ð ð �Y˜wÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð's   Š,¬0³0N©Ú__name__Ú
__module__Ú__qualname__r^   © ó    rL   rQ   rQ   R   s#   € € € € € ð(ð (ð (ð (ð (rd   rQ   c                   ó   — e Zd Zd„ ZdS )ÚSecurityHeadersMiddlewarec              ƒ   óÜ   K  —  ||¦  «        ƒ d {V —†}d|j         d<   d|j         d<   d|j         d<   d|j         d<   d	|j         d
<   d}||j         d<   t          j        dk    r
d|j         d<   |S )NÚnosniffzX-Content-Type-OptionsÚDENYzX-Frame-Optionsz1; mode=blockzX-XSS-Protectionzstrict-origin-when-cross-originzReferrer-Policyz(geolocation=(), microphone=(), camera=()zPermissions-Policya'  default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self' ws://localhost:* wss://localhost:*; media-src 'self' blob: data:; object-src 'none'; base-uri 'self'; form-action 'self';zContent-Security-PolicyÚ
productionz,max-age=31536000; includeSubDomains; preloadzStrict-Transport-Security)Úheadersr   ÚENVIRONMENT)r[   r\   r]   ÚresponseÚcsps        rL   r^   z"SecurityHeadersMiddleware.dispatchl   sª   è è € Ø"˜ 7Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+ˆØ5>ˆÔÐ1Ñ2Ø.4ˆÔÐ*Ñ+Ø/>ˆÔÐ+Ñ,Ø.OˆÔÐ*Ñ+Ø1[ˆÔÐ-Ñ.ð
	"ð 	ð 7:ˆÔÐ2Ñ3õ Ô <Ò/Ð/Ø<jˆHÔÐ8Ñ9àˆrd   Nr_   rc   rd   rL   rf   rf   k   s#   € € € € € ðð ð ð ð rd   rf   )Úkey_funcúStreamA2026 APIz,Streaming platform API with HLS/DASH supportú1.0.0)Útitler2   Úversioniè  )Úminimum_sizeT)ÚGETÚPOSTÚPUTÚDELETEÚPATCHÚOPTIONS)ÚAuthorizationúContent-TypeÚAcceptr|   zContent-Length)Úallow_originsÚallow_credentialsÚallow_methodsÚallow_headersÚexpose_headersz/apiz
route-info)ÚprefixÚtagsz/api/sse)Úexist_okz/hls)Ú	directoryÚhls)r1   z/storageÚstoragez/uploadsÚuploadsú/c               ƒ   ó   K  — ddddœS )Nrp   rq   z/docs)Úmessagers   Údocsrc   rc   rd   rL   ÚrootrŽ   Ê   s    è è € ð %ØØðð ð rd   z/api/permissions/endpointsc              ƒ   ó2   K  — ddl m}  |t          ¦  «        S )z)Get all endpoint permissions for analysisr   ©Úget_endpoint_permissions)Úapp.api.route_infor‘   Úapp)Úcurrent_userr‘   s     rL   Úget_endpoint_permissions_listr•   Ô   s+   è è € ð <Ð;Ð;Ð;Ð;Ð;Ø#Ð#¥CÑ(Ô(Ð(rd   z/api/permissions/protectedc              ƒ   ób   K  — ddl m}  |¦   «         }d„ |                     ¦   «         D ¦   «         S )z)Get endpoints that require authenticationr   r�   c                 ó*   — i | ]\  }}|d          ¯||“ŒS ©Úrequires_authrc   ©Ú.0ÚkeyÚvalues      rL   ú
<dictcomp>z+get_protected_endpoints.<locals>.<dictcomp>à   s9   € ð ð ð áˆC�Ø�Ô!ðØˆUðð ð rd   ©r’   r‘   Úitems©r”   r‘   Úpermissionss      rL   Úget_protected_endpointsr£   Û   óU   è è € ð <Ð;Ð;Ð;Ð;Ð;Ø*Ð*Ñ,Ô,€Kðð à%×+Ò+Ñ-Ô-ðñ ô ð rd   z/api/permissions/adminc              ƒ   ób   K  — ddl m}  |¦   «         }d„ |                     ¦   «         D ¦   «         S )z%Get endpoints that require admin roler   r�   c                 ó*   — i | ]\  }}|d          ¯||“ŒS )Úrequires_adminrc   rš   s      rL   rž   z'get_admin_endpoints.<locals>.<dictcomp>ì   s:   € ð ð ð áˆC�ØÐ!Ô"ðØˆUðð ð rd   rŸ   r¡   s      rL   Úget_admin_endpointsr¨   ç   r¤   rd   z/api/permissions/publicc              ƒ   ób   K  — ddl m}  |¦   «         }d„ |                     ¦   «         D ¦   «         S )z/Get endpoints that don't require authenticationr   r�   c                 ó*   — i | ]\  }}|d          °||“ŒS r˜   rc   rš   s      rL   rž   z(get_public_endpoints.<locals>.<dictcomp>ø   s9   € ð ð ð áˆC�Ø�_Ô%ðØˆUðð ð rd   rŸ   r¡   s      rL   Úget_public_endpointsr«   ó   r¤   rd   z/api/eventsc               ƒ   ó   K  — t           S ©Nr    rc   rd   rL   Úeventsr®   ÿ   s   è è € åÐrd   z/ws/stream/{stream_id}Ú	websocketÚ	stream_idÚtokenc              ƒ   ó¢  K  — ddl m}m} ddlm} |r„	 |                     ||j        |j        g¬¦  «        }|                     d¦  «        }|s|  	                    dd¬¦  «        ƒ d {V —† d S n)# |$ r! |  	                    dd¬¦  «        ƒ d {V —† Y d S w xY w	 t          |¦  «        }t          j        | |¦  «        ƒ d {V —† 	 	 |                      ¦   «         ƒ d {V —†}	t          j        d
|	› �| ¦  «        ƒ d {V —† Œ9# t          $ r t          j        | |¦  «         Y d S w xY w# t"          $ r! |  	                    dd¬¦  «        ƒ d {V —† Y d S w xY w)Nr   ©ÚJWTErrorÚjwtr   ©Ú
algorithmsÚsubéð  úInvalid token©ÚcodeÚreasonTú
Received: zInvalid stream ID)Újoser´   rµ   Ú
app.configr   ÚdecodeÚJWT_SECRET_KEYÚJWT_ALGORITHMrX   rG   r'   r   ÚconnectÚreceive_textÚsend_personal_messager	   Ú
disconnectÚ
ValueError)
r¯   r°   r±   r´   rµ   r   ÚpayloadÚuser_idÚstream_uuidÚdatas
             rL   Úwebsocket_endpointrÍ     s  è è € à"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø#Ð#Ð#Ð#Ð#Ð#ð ð 	ð	Ø—j’j ¨Ô(?ÈXÔMcÐLd�jÑeÔeˆGØ—k’k %Ñ(Ô(ˆGØð Ø—o’o¨4¸�oÑHÔHÐHÐHÐHÐHÐHÐHÐHØ�ðøð ð 	ð 	ð 	Ø—/’/ t°O�/ÑDÔDÐDÐDÐDÐDÐDÐDÐDØˆFˆFð	øøøðEÝ˜9‘o”oˆÝŒo˜i¨Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ð	7ðTØ&×3Ò3Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5�åÔ3Ð4GÀÐ4GÐ4GÈÑSÔSÐSÐSÐSÐSÐSÐSÐSðTøõ #ð 	7ð 	7ð 	7ÝÔ˜y¨+Ñ6Ô6Ð6Ð6Ð6Ð6ð	7øøøøåð Eð Eð EØ�oŠo 4Ð0CˆoÑDÔDÐDÐDÐDÐDÐDÐDÐDÐDÐDÐDðEøøøsB   ”AA. Á."BÂBÂ*D# Ã:C= Ã=D ÄD# ÄD Ä D# Ä#'EÅEz/wsc              ƒ   ó"  K  — ddl m}m} ddlm} |r„	 |                     ||j        |j        g¬¦  «        }|                     d¦  «        }|s|  	                    dd¬¦  «        ƒ d {V —† d S n)# |$ r! |  	                    dd¬¦  «        ƒ d {V —† Y d S w xY wt          j        | ¦  «        ƒ d {V —† 	 	 |                      ¦   «         ƒ d {V —†}t          j        d
|› �| ¦  «        ƒ d {V —† Œ9# t          $ r t          j        | ¦  «         Y d S w xY w)Nr   r³   r   r¶   r¸   r¹   rº   r»   Tr¾   )r¿   r´   rµ   rÀ   r   rÁ   rÂ   rÃ   rX   rG   r   rÄ   rÅ   rÆ   r	   rÇ   )r¯   r±   r´   rµ   r   rÉ   rÊ   rÌ   s           rL   Úglobal_websocketrÏ   #  s³  è è € à"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø#Ð#Ð#Ð#Ð#Ð#ð ð 	ð	Ø—j’j ¨Ô(?ÈXÔMcÐLd�jÑeÔeˆGØ—k’k %Ñ(Ô(ˆGØð Ø—o’o¨4¸�oÑHÔHÐHÐHÐHÐHÐHÐHÐHØ�ðøð ð 	ð 	ð 	Ø—/’/ t°O�/ÑDÔDÐDÐDÐDÐDÐDÐDÐDØˆFˆFð	øøøõ Œ/˜)Ñ
$Ô
$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ð&ð	PØ"×/Ò/Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1ˆDÝÔ/Ð0C¸TÐ0CÐ0CÀYÑOÔOÐOÐOÐOÐOÐOÐOÐOð	Pøõ ð &ð &ð &ÝÔ˜9Ñ%Ô%Ð%Ð%Ð%Ð%ð&øøøs$   ”AA. Á."BÂBÂ2:C, Ã,DÄDc               ƒ   óZ  K  — ddl m}  ddlm} ddlm}m}  | ¦   «         }	 |                     |¦  «                             |j        | 	                    |j
        ¦  «        k     ¦  «                             ¦   «         }|                     ¦   «          |dk    rt                               d|› d�¦  «         nH# t          $ r;}t                               d|› �¦  «         |                     ¦   «          Y d}~nd}~ww xY w|                     ¦   «          dS # |                     ¦   «          w xY w)	z%Remove expired sessions from databaser   r+   )ÚSession)ÚdatetimeÚtimezonezCleaned up z expired sessionszError cleaning up sessions: N)r5   r,   Úapp.models.sessionrÑ   rÒ   rÓ   r8   r9   Ú
expires_atÚnowÚutcÚdeleter<   r>   r?   Ú	ExceptionÚerrorÚrollbackrG   )r,   ÚSessionModelrÒ   rÓ   rH   ÚdeletedÚes          rL   Úcleanup_expired_sessionsrß   =  sE  è è € à)Ð)Ð)Ð)Ð)Ð)Ø:Ð:Ð:Ð:Ð:Ð:Ø+Ð+Ð+Ð+Ð+Ð+Ð+Ð+à	ˆ‰Œ€BðØ—(’(˜<Ñ(Ô(×/Ò/ØÔ# h§l¢l°8´<Ñ&@Ô&@Ò@ñ
ô 
ç
Š&‰(Œ(ð 	ð 	�	Š	‰ŒˆØ�QŠ;ˆ;Ý�KŠKÐ@ gÐ@Ð@Ð@ÑAÔAÐAøøÝð ð ð Ý�ŠÐ7°AÐ7Ð7Ñ8Ô8Ð8Ø
�Š‰Œˆˆˆˆˆˆøøøøðøøøð 	�Š‰
Œ
ˆ
ˆ
ˆ
øˆ�Š‰
Œ
ˆ
ˆ
øøøs0   ¢BB6 Â5D Â6
C;Ã 1C6Ã1D Ã6C;Ã;D ÄD*Ústartupc               ƒ   ó6  K  — ddl m}  ddlm} dd l} | ¦   «         }|                     |                     ¦   «         ¦  «          |¦   «         }|                     t          dd¬¦  «         |                     ¦   «          t           
                    d¦  «         d S )Nr   )ÚStreamDaemon)ÚAsyncIOSchedulerÚintervalé   )Úhoursz3Started session cleanup scheduler (runs every hour))Ú
app.daemonrâ   Úapscheduler.schedulers.asynciorã   ÚasyncioÚcreate_taskÚstartÚadd_jobrß   r>   r?   )râ   rã   ré   ÚdaemonÚ	schedulers        rL   Ústartup_eventrï   R  s±   è è € à'Ð'Ð'Ð'Ð'Ð'Ø?Ð?Ð?Ð?Ð?Ð?Ø€N€N€Nð ˆ\‰^Œ^€FØ×Ò˜Ÿš™œÑ'Ô'Ð'ð !Ð Ñ"Ô"€IØ×ÒÕ.°
À!ÐÑDÔDÐDØ‡O‚OÑÔÐÝ
‡K‚KÐEÑFÔFÐFÐFÐFrd   c              ƒ   óf   K  — t                                d|› �¦  «         t          dddi¬¦  «        S )NzUnhandled exception: iô  rT   zInternal server errorrU   )r>   rÚ   r   )r\   Úexcs     rL   Úglobal_exception_handlerrò   c  sD   è è € å
‡L‚LÐ.¨Ð.Ð.Ñ/Ô/Ð/ÝØØÐ2Ð3ðñ ô ð rd   Ú__main__z0.0.0.0i@  )ÚhostÚportr­   )oÚfastapir   r   Úfastapi.middleware.corsr   Úfastapi.middleware.gzipr   Úfastapi.responsesr   Úfastapi.websocketsr   r	   Úfastapi.staticfilesr
   Úslowapir   r   Úslowapi.utilr   Úslowapi.errorsr   Ústarlette.middleware.baser   rÀ   r   Úapp.apir   r   r   r   r   r   r   r   r   r   r   Úapp.api.rolesr   Úroles_routerr’   Úroute_info_routerr   Úapp.websocketr   Úapp.sser!   r5   r"   r#   Ú
app.modelsÚapp.authr%   r&   ÚloggingÚosÚuuidr'   Ú	threadingÚpathlibr(   Ú	getLoggerr`   r>   ÚsetLevelÚINFOÚStreamHandlerÚhandlerÚ	FormatterÚ	formatterÚsetFormatterÚ
addHandlerÚmetadataÚ
create_allrM   Úapp.api.backuprN   rO   rQ   rf   Úlimiterr“   ÚstateÚadd_exception_handlerÚadd_middlewareÚallowed_origins_listÚinclude_routerrX   ÚmakedirsÚFFMPEG_CACHE_PATHÚSTORAGE_PATHÚUPLOAD_PATHÚmountrŽ   r•   r£   r¨   r«   r®   r¯   ÚstrrÍ   rÏ   rß   Úon_eventrï   Úexception_handlerrÙ   rò   ÚuvicornÚrunrc   rd   rL   ú<module>r)     s 	  ðØ $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø *Ð *Ð *Ð *Ð *Ð *Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø +Ð +Ð +Ð +Ð +Ð +Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø +Ð +Ð +Ð +Ð +Ð +Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø Ð Ð Ð Ð Ð ð zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zð  zØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð ð 
ˆÔ	˜8Ñ	$Ô	$€Ø ‡‚�”Ñ Ô Ð ð  ˆ'Ô
Ñ
!Ô
!€Ø × Ò �”Ñ Ô Ð ØˆGÔÐTÑUÔU€	Ø × Ò �YÑ Ô Ð Ø × Ò �'Ñ Ô Ð ð €Ô Ð"Ñ #Ô #× ,Ò ,¨W¬\Ñ :Ô :Ð :ð „× Ò ˜fÐ Ñ %Ô %Ð %ðð ð ð@ Ð Ñ Ô Ð ð 8Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7ð(ð (ð (ð (ð (Ð 2ñ (ô (ð (ð2ð ð ð ð Ð 2ñ ô ð ðB ˆ'Ð-Ð
.Ñ
.Ô
.€ð €gØ
Ø>Øðñ ô €ð €„	Ô Ø × Ò Ð+Ð-IÑ JÔ JÐ Jð × Ò Ð,Ñ -Ô -Ð -ð × Ò Ð,Ñ -Ô -Ð -ð × Ò �>°Ð Ñ 5Ô 5Ð 5ð × Ò ØØÔ/ØØFÐFÐFØ=Ð=Ð=Ø"Ð$4Ð5ð ñ ô ð ð × Ò �;Ñ Ô Ð Ø × Ò �>Ñ "Ô "Ð "Ø × Ò �?Ñ #Ô #Ð #Ø × Ò �;Ñ Ô Ð Ø × Ò �=Ñ !Ô !Ð !Ø × Ò �;Ñ Ô Ð Ø × Ò �<Ñ  Ô  Ð  Ø × Ò �<Ñ  Ô  Ð  Ø × Ò Ð%Ñ &Ô &Ð &Ø × Ò �=Ñ !Ô !Ð !Ø × Ò �?Ñ #Ô #Ð #Ø × Ò �<Ñ  Ô  Ð  Ø × Ò Ð$¨V¸<¸.Ð Ñ IÔ IÐ Ið €‡‚ˆ
Ñ Ô �LÑ !Ô !Ð !ð €ˆ�„€ð €„ˆHÔ&°Ð 6Ñ 6Ô 6Ð 6Ø €„ˆHÔ!¨DÐ 1Ñ 1Ô 1Ð 1Ø €„ˆHÔ ¨4Ð 0Ñ 0Ô 0Ð 0Ø ‡	‚	ˆ&�+�+¨Ô(BÐCÑCÔCÈ%€	Ñ PÔ PÐ PØ ‡	‚	ˆ*�k�k¨HÔ,AÐBÑBÔBÈ€	Ñ SÔ SÐ SØ ‡	‚	ˆ*�k�k¨HÔ,@ÐAÑAÔAÈ	€	Ñ RÔ RÐ Rð ‡‚ˆ�„ðð ñ „ðð ‡‚Ð	%Ñ&Ô&Ø7>°wÐ?OÑ7PÔ7Pð )ð )ð )ñ 'Ô&ð)ð ‡‚Ð	%Ñ&Ô&Ø18°Ð9IÑ1JÔ1Jð ð ð ñ 'Ô&ðð ‡‚Ð	!Ñ"Ô"Ø-4¨WÐ5KÑ-LÔ-Lð ð ð ñ #Ô"ðð ‡‚Ð	"Ñ#Ô#Ø.5¨gÐ6FÑ.GÔ.Gð ð ð ñ $Ô#ðð ‡‚ˆÑÔðð ñ Ôðð ‡‚Ð'Ñ(Ô(ðEð E¨	ð E¸cð EÈ#ð Eð Eð Eñ )Ô(ðEð< ‡‚ˆuÑÔð&ð & ið &¸ð &ð &ð &ñ Ôð&ð2ð ð ð* ‡‚ˆiÑÔðGð Gñ ÔðGð  ×Ò�yÑ!Ô!ðð ñ "Ô!ðð ˆzÒÐØ€N€N€NØ€G„K�˜)¨$Ð/Ñ/Ô/Ð/Ð/Ð/ð Ðrd   