§
   	»Z;øã                   óì  — d Z ddlZddlZddlZddlZddlmZmZ ddlZddl	Z	ddl
Z
ddlZddlZddlmZ ddlmZmZ dZd                     e¦  «        Z ej        d                     e¦  «        ¦  «        Zej                             ed	¦  «        Zd
ZdZdZd„ Zd„ Zd„ Zd@d„Z defd„Z!d„ Z"dAd„Z#dAd„Z$d„ Z%d„ Z&d„ Z'd„ Z( G d„ d¦  «        Z)d„ Z*dAd„Z+d„ Z,dBd „Z-dAd!„Z.dAd"„Z/dAd#„Z0d$Z1dd%l2m3Z4 d&„ Z5d'„ Z6d(„ Z7dCd*„Z8dAd+„Z9d,„ Z:dAd-„Z;dAd.„Z<dAd/„Z=d0„ Z>d1„ Z?dAd2„Z@dAd3„ZAdAd4„ZBdAd5„ZCd6ZDdAd7„ZEdAd8„ZFd9„  eG eH¦   «          I                    ¦   «         ¦  «        D ¦   «         ZJd:d;hZKeEeJd<<   dAd=„ZLd>„ ZMdAd?„ZNdS )Daw  Widget listings for skin.milionar's Home rows (docs/plan/skin-milionar/060).

Imported through the main.py fast path, so module level imports only json, os
and the Kodi modules; nothing here touches the network. Every item that runs an
action is a playable plugin URL (`skin_run`): Kodi resolves it, the handler
resolves to nothing and starts the real action with RunPlugin.
é    N)ÚquoteÚ
quote_plus)Úclicks)ÚheroÚperformancezplugin.video.milionarzplugin://{}/z special://profile/addon_data/{}/Ú
skin_cachezhttps://image.tmdb.org/t/p/w500z https://image.tmdb.org/t/p/w1280é   c                 óü   — 	 t          t          j                             t          | ¦  «        dd¬¦  «        5 }t          j        |¦  «        cd d d ¦  «         S # 1 swxY w Y   d S # t          t          f$ r |cY S w xY w)NÚrzutf-8)Úencoding)	ÚopenÚosÚpathÚjoinÚPROFILEÚjsonÚloadÚOSErrorÚ
ValueError)ÚnameÚdefaultÚhandles      ú^/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/skin/widgets.pyÚ
_read_jsonr   #   sÃ   € ðÝ•"”'—,’,�w¨Ñ-Ô-¨s¸WÐEÑEÔEð 	%ÈÝ”9˜VÑ$Ô$ð	%ð 	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øå•ZÐ ð ð ð Øˆˆˆðøøøs4   ‚5A% ·AÁA% ÁAÁA% ÁAÁ A% Á%A;Á:A;c                 óv   — | sdS |                       d¦  «        r|                       d¦  «        s
t          | z   S | S )zMTMDb poster_path ("/abc.jpg") -> URL; full URLs and local paths pass through.Ú ú/z/Users)Ú
startswithÚTMDB_IMG)r   s    r   Ú_posterr    +   sE   € àð ØˆrØ‡‚�sÑÔð  D§O¢O°HÑ$=Ô$=ð Ý˜$‰ÐØ€Kó    c                 óV   — d                      t          t          | d¬¦  «        ¦  «        S )zPPlayable plugin URL that resolves to nothing and runs RunPlugin(<action_query>).z{}?action=skin_run&run={}r   )Úsafe)ÚformatÚBASEr   )Úaction_querys    r   Ú_run_urlr'   4   s%   € à&×-Ò-­dµE¸,ÈRÐ4PÑ4PÔ4PÑQÔQÐQr!   FTc                 óô  ‡
— t          j        | |d¬¦  «        }|r‘d„ |                     ¦   «         D ¦   «         }t          j        ¦   «         rKd„ t          |                     ¦   «         ¦  «        D ¦   «         Š
ˆ
fd„|                     ¦   «         D ¦   «         }|                     |¦  «         |                     ¦   «         }|pi }| 	                    | 
                    d| ¦  «        ¦  «         d|j        fd|j        fd	|j        ffD ]R\  }}		 | 
                    |¦  «        d
vr |	t          ||         ¦  «        ¦  «         Œ<# t          t           f$ r Y ŒOw xY w| 
                    d¦  «        r|                     |d         ¦  «         | 
                    d¦  «        r|                     |d         ¦  «         | 
                    d¦  «        r|                     |d         ¦  «         | 
                    d¦  «        rH|                     t+          |d         d         ¦  «        t+          |d         d         ¦  «        ¦  «         | 
                    d¦  «        rA	 |                     t+          |d         ¦  «        ¦  «         n# t          t           f$ r Y nw xY w|r|s|                     dd¦  «         |r|                     dd¦  «         |                     dt1          j        ||¦  «        ¦  «         |S )NT)Úlabelr   Ú	offscreenc                 ó   — i | ]
\  }}|¯||“ŒS © r,   )Ú.0ÚkÚvs      r   ú
<dictcomp>z_item.<locals>.<dictcomp><   s#   € Ð1Ð1Ð1™˜˜1¨qÐ1ˆq�!Ð1Ð1Ð1r!   c                 ó8   — i | ]}|t          j        |¦  «        “ŒS r,   )r   Úartwork)r-   r/   s     r   r0   z_item.<locals>.<dictcomp>>   s%   € ÐKÐKÐK°A�a�Ô,¨QÑ/Ô/ÐKÐKÐKr!   c                 ó(   •— i | ]\  }}|‰|         “ŒS r,   r,   )r-   r.   r/   Úmappeds      €r   r0   z_item.<locals>.<dictcomp>?   s#   ø€ Ð8Ð8Ð8¡D A q�1�f˜Q”iÐ8Ð8Ð8r!   ÚtitleÚyearÚseasonÚepisode)Nr   ÚplotÚtvshowtitleÚ	mediatypeÚresumer   é   ÚratingÚ
IsPlayableÚtrueúmilionar.folderÚ1zmilionar.exec)ÚxbmcguiÚListItemÚitemsr   ÚenabledÚsetÚvaluesÚsetArtÚgetVideoInfoTagÚsetTitleÚgetÚsetYearÚ	setSeasonÚ
setEpisodeÚintÚ	TypeErrorr   ÚsetPlotÚsetTvShowTitleÚsetMediaTypeÚsetResumePointÚfloatÚ	setRatingÚsetPropertyr   Úexec_for)r)   r   ÚartÚinfoÚfolderÚrunsÚitemÚtagÚkeyÚsetterr4   s             @r   Ú_itemrb   9   s  ø€ ÝÔ %¨d¸dÐCÑCÔC€DØ
ð Ø1Ð1 §	¢	¡¤Ð1Ñ1Ô1ˆÝÔÑ Ô ð 	9ØKÐK½¸S¿ZºZ¹\¼\Ñ9JÔ9JÐKÑKÔKˆFØ8Ð8Ð8Ð8¨C¯IªI©K¬KÐ8Ñ8Ô8ˆCØ�Š�CÑÔÐØ
×
Ò
Ñ
 Ô
 €CØˆ:�2€DØ‡L‚L�—’˜' 5Ñ)Ô)Ñ*Ô*Ð*Ø ¤Ð-°¸#¼-Ð/HÈ9ÐVYÔVdÐJeÐfð ð ‰ˆˆVð	Ø�xŠx˜‰}Œ} JÐ.Ð.Ø�•s˜4 œ9‘~”~Ñ&Ô&Ð&øøÝ�:Ð&ð 	ð 	ð 	ØˆDð	øøøà‡x‚x�ÑÔð "Ø�Š�D˜”LÑ!Ô!Ð!Ø‡x‚x�ÑÔð 0Ø×Ò˜4 Ô.Ñ/Ô/Ð/Ø‡x‚x�ÑÔð ,Ø×Ò˜˜kÔ*Ñ+Ô+Ð+Ø‡x‚x�ÑÔð OØ×Ò�5  h¤°Ô!2Ñ3Ô3µU¸4À¼>È!Ô;LÑ5MÔ5MÑNÔNÐNØ‡x‚x�ÑÔð ð	Ø�MŠM�%  X¤Ñ/Ô/Ñ0Ô0Ð0Ð0øÝ�:Ð&ð 	ð 	ð 	ØˆDð	øøøàð /�Fð /Ø×Ò˜ vÑ.Ô.Ð.Øð 1Ø×ÒÐ*¨CÑ0Ô0Ð0Ø×Ò�_¥f¤o°d¸FÑ&CÔ&CÑDÔDÐDØ€Ks$   Ä5EÅEÅEÉ(J ÊJÊJc                 óî   — 	 t          | pi                      d¦  «        p|¦  «        }|dk    r|}n# t          t          f$ r |}Y nw xY w|€t	          j        ¦   «         rdndS t	          j        |¦  «        S )zOKeep each legacy row's default, but apply slot/profile limits before ListItems.Úlimitr   Né
   )rP   rL   rQ   r   r   rF   rd   )Úparamsr   Úvalues      r   Ú_limitrh   _   s‘   € ðÝ�V�\˜r×&Ò& wÑ/Ô/Ð:°7Ñ;Ô;ˆØ�AŠ:ˆ:ØˆEøøÝ•zÐ"ð ð ð Øˆˆˆðøøøà€}Ý Ô(Ñ*Ô*Ð4ˆrˆr°Ð4ÝÔ˜UÑ#Ô#Ð#s   ‚.1 ±AÁAc                 óŠ  — |                       d¦  «        r| d         S |                       d¦  «        p|                       d¦  «        pd}|                       d¦  «        p|                       d¦  «        pd}|                       d¦  «        pd}|                       d¦  «        p!t          |                       d	¦  «        ¦  «        }|                       d
¦  «        dv rž|                       d¦  «        pd}|                       d¦  «        pd}d                     t          |¦  «        ||t          |                       dd¦  «        ¦  «        t          t	          |¦  «        ¦  «        t          |¦  «        |¦  «        S d                     t          |¦  «        t          t	          |¦  «        ¦  «        t          |¦  «        |¦  «        S )zKQuery that plays/opens one addon title the way the addon's own listings do.Úrunr5   r   r   Útmdb_idÚidr6   ÚposterÚposter_pathÚ
media_type©ÚseriesÚtvr7   r=   r8   z~action=play_episode_from_addon&series_name={}&season_number={}&episode_number={}&episode_title={}&year={}&poster={}&tmdb_id={}Úepisode_titlezBaction=play_movie_from_addon&title={}&year={}&poster={}&tmdb_id={})rL   r    r$   r   Ústr)Úentryr5   rk   r6   rm   r7   r8   s          r   Ú_title_actionrv   l   s™  € à‡y‚y�ÑÔð Ø�UŒ|ÐØ�IŠI�gÑÔÐ9 %§)¢)¨FÑ"3Ô"3Ð9°r€EØ�iŠi˜	Ñ"Ô"Ð; e§i¢i°¡o¤oÐ;¸€GØ�9Š9�VÑÔÐ" €DØ�YŠY�xÑ Ô ÐE¥G¨E¯IªI°mÑ,DÔ,DÑ$EÔ$E€FØ‡y‚y�ÑÔÐ"2Ð2Ð2Ø—’˜8Ñ$Ô$Ð)¨ˆØ—)’)˜IÑ&Ô&Ð+¨!ˆðAßBHÂ&Ý�uÑÔ˜v wµ
¸5¿9º9À_ÐVXÑ;YÔ;YÑ0ZÔ0ZÝ•s˜4‘y”yÑ!Ô!¥:¨fÑ#5Ô#5°wñC@ô C@ð	@ð P×VÒVÝ�5ÑÔ�:¥c¨$¡i¤iÑ0Ô0µ*¸VÑ2DÔ2DÀgñOô Oð Or!   c                 ó(   — t          dddd| ¦  «        S )NÚmy_tv_dialogúmytv_channels.jsonrr   Úwidget_mytv_channels©Ú	_channels©rf   s    r   rz   rz   �   s   € Ý�^Ð%9¸4ÐAWÐY_Ñ`Ô`Ð`r!   c                 ó(   — t          dddd| ¦  «        S )NÚmy_cinema_dialogzmycinema_channels.jsonÚcinemaÚwidget_mycinema_channelsr{   r}   s    r   r�   r�   …   s   € ÝÐ'Ð)AÀ8ÐMgÐioÑpÔpÐpr!   c                 óh   — |dk    rd                      | |¦  «        S d                      |||¦  «        S )zvWhat a click on a channel does (clicks.py `tv_channel` / `cinema_channel`): start the broadcast, one title or open it.r   zaction={}&channel_id={}z1action=channel_play&kind={}&channel_id={}&mode={})r$   )Údialog_actionÚkindÚ
channel_idÚclicks       r   Ú_channel_runr‡   ‰   s:   € à�‚€Ø(×/Ò/°¸zÑJÔJÐJØ>×EÒEÀdÈJÐX]Ñ^Ô^Ð^r!   c                 óÖ   ‡‡— ddl m} | dk    r|j        n|j        Šd„ |D ¦   «         }|                     ˆfd„|D ¦   «         ¦  «        Št          ˆˆfd„|D ¦   «         d¦  «        }d|iS )	zZBackdrop for a channel's hero: the first of its titles that has one in the metadata cache.r   ©Úmetarr   c                 óŠ   — g | ]@}t          |                     d ¦  «        pd¦  «                             ¦   «         ¯8|d          ‘ŒAS )rl   r   )rt   rL   Úisdigit©r-   Úts     r   ú
<listcomp>z%_channel_backdrop.<locals>.<listcomp>”   sD   € Ð
GÐ
GÐ
G�q¥c¨!¯%ª%°©+¬+Ð*;¸Ñ&<Ô&<×&DÒ&DÑ&FÔ&FÐ
Gˆ1ˆTŒ7Ð
GÐ
GÐ
Gr!   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r,   r,   )r-   Úir`   s     €r   r�   z%_channel_backdrop.<locals>.<listcomp>•   s!   ø€ Ð0Ð0Ð0 q˜C˜C ™FœFÐ0Ð0Ð0r!   c              3   óÆ   •K  — | ][}‰                       ‰|¦  «        ¦  «        pi                       d ¦  «        ¯5‰ ‰|¦  «                                       d ¦  «        V — Œ\dS )Úbackdrop_pathN©rL   )r-   r‘   Úcachedr`   s     €€r   ú	<genexpr>z$_channel_backdrop.<locals>.<genexpr>–   sp   øè è € ÐuÐu¸ÀfÇjÂjÐQTÐQTÐUVÑQWÔQWÑFXÔFXÐF^Ð\^×EcÒEcÐdsÑEtÔEtÐu�˜˜˜A™œ”×#Ò# OÑ4Ô4ÐuÐuÐuÐuÐuÐur!   r   Úbackdrop)Úwcs.library2rŠ   Úkey_tvÚ	key_movieÚget_manyÚnext)r„   ÚtitlesrŠ   Úidsr   r•   r`   s        @@r   Ú_channel_backdroprŸ   �   s—   øø€ à!Ð!Ð!Ð!Ð!Ð!Ø š˜ˆ$Œ+ˆ+¨4¬>€CØ
GÐ
G˜FÐ
GÑ
GÔ
G€CØ�]Š]Ð0Ð0Ð0Ð0¨CÐ0Ñ0Ô0Ñ1Ô1€FÝÐuÐuÐuÐuÐu¸cÐuÑuÔuÐwyÑzÔz€DØ˜ÐÐr!   c                 óî  ‡ ‡‡— t          j        ||pi                      d¦  «        ¦  «        }t          |g ¦  «        d t	          |d ¦  «        …         }‰dk    rt          |¦  «        nd }g }|D �]Š‰                     d¦  «        pd‰                     dd¦  «        ‰                     d¦  «        pg }}
}	ˆˆ ˆfd„|dd	fD ¦   «         \  }}}|rt          ‰|¦  «        nd }|pi                      d
¦  «        pi }|                     d¦  «        r|d         |                     d¦  «        pdfnd }|                     t          |
||	|	|	|	dœ|
d 	                    |
t          |¦  «        ¦  «        |dœ¬¦  «        ¦  «         |r|                     d¦  «        r
d|d         int          ‰|¦  «        }t          j        |d         t          j        |
d„ |D ¦   «         ||¦  «        t          j        |¦  «        t          j        |¦  «        dt!          |¦  «        |rt#          j        t          j        ¦  «        nt          j        |d¦  «        t#          j        t          j        ¦  «        f¬¦  «         �Œ|S )Nr†   rr   Úiconr   r   Ú
media_listc              3   ó~   •K  — | ]7}t          t          ‰‰‰                     d d¦  «        |¦  «        ¦  «        V — Œ8dS )rl   r   N)r'   r‡   rL   )r-   ÚoptionÚchannelrƒ   r„   s     €€€r   r–   z_channels.<locals>.<genexpr>¡   sf   øè è € ð Dð DØ!'õ &¥l°=À$ÈÏÊÐTXÐZ\ÑH]ÔH]Ð_eÑ&fÔ&fÑgÔgð Dð Dð Dð Dð Dð Dr!   Úliver   ÚstateÚ
resume_posÚresume_totalr   )Úthumbrm   Ú	landscaper¡   z{} ({}))r5   r9   r<   ©rZ   r[   r—   éÿÿÿÿc                 ób   — g | ],}|                      d ¦  «        p|                      d¦  «        ‘Œ-S )r   r5   r”   r�   s     r   r�   z_channels.<locals>.<listcomp>©   s2   € Ð1bÐ1bÐ1bÐVW°!·%²%¸±-´-Ð2QÀ1Ç5Â5ÈÁ>Ä>Ð1bÐ1bÐ1br!   )r¦   r   )rž   Ú	resumableÚlabels)r   ÚresolverL   r   rh   Ú_ProgramÚ_on_nowÚappendrb   r$   ÚlenrŸ   r   Úapplyr¥   rY   ÚboolÚxbmcÚgetLocalizedStringÚ
S_CONTINUEr)   ÚS_INFO)rƒ   Úfilenamer„   Úrowrf   r†   ÚchannelsÚprogramrE   r¡   r   r�   rj   r¦   ÚopenedÚnowr§   r<   r—   r¥   s   ` `                @r   r|   r|   š   sÇ  øøø€ ÝŒN˜3  ¨2× 2Ò 2°7Ñ ;Ô ;Ñ<Ô<€EÝ˜( BÑ'Ô'Ð(=­°¸Ñ)=Ô)=Ð(=Ô>€HØ$(¨D¢L L�h�xÑ Ô Ð °d€GØ€EØð Bñ BˆØ$Ÿ[š[¨Ñ0Ô0Ð6°B¸¿ºÀFÈBÑ8OÔ8OÐQX×Q\ÒQ\Ð]iÑQjÔQjÐQpÐnp�FˆdˆðDð Dð Dð Dð Dð DØ,1°6¸6Ð+BðDñ Dô DÑˆˆT�6à+2Ð<�g�g˜wÑ'Ô'Ð'¸ˆØ�˜—’ Ñ(Ô(Ð.¨BˆØJOÏ)Ê)ÐT`ÑJaÔJaÐk�%˜Ô% u§y¢y°Ñ'@Ô'@Ð'EÀAÐFÐFÐgkˆØ�Š•U˜4 °DÀDÐW[ÐeiÐ*jÐ*jØ*.¸	×8HÒ8HÈÍsÐSYÉ{Ì{Ñ8[Ô8[ÐgmÐ nÐ nðpñ pô pñ 	qô 	qð 	qà47Ðt¸C¿GºGÀJÑ<OÔ<OÐt�J  J¤Ð0Ð0ÕUfÐgkÐmsÑUtÔUtˆÝŒ
�5˜”9�dœl¨4Ð1bÐ1bÐ[aÐ1bÑ1bÔ1bÐdlÐnqÑrÔrÝ”? 4Ñ(Ô(­&¬/¸&Ñ*AÔ*AÐGWÝ! &™\œ\àGMÐl�4Ô2µ4´?ÑCÔCÐCÕSYÔS_Ð`cÐekÑSlÔSlÝÔ2µ4´;Ñ?Ô?ðAð		Bñ 	Bô 	Bð 	Bñ 	Bð €Lr!   c                 óZ   — |                       d¦  «        p|                       d¦  «        pg S )Nr¢   Úseries_listr”   )r¥   s    r   Ú
_series_ofrÄ   ²   s*   € Ø�;Š;�|Ñ$Ô$ÐH¨¯ª°MÑ(BÔ(BÐHÀbÐHr!   c                   óB   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
S )r²   aO  What the series of the MyTV channels continue with, from the store and the metadata cache (never the network).

    With the progress shared with the library (wcs/library2/shared.py) a series has one state, the library's, and its
    next episode follows the rule of Continue watching; otherwise every channel has its own history file.c                 ó  — ddl m} ddlm} |                     ¦   «         | _        d„ |D ¦   «         | _        |                     d¦  «        | _        d x| _        x| _        | _	        i t          ¦   «         c| _        | _        d S )Nr   ©Údate)Úsharedc                 ól   — h | ]1}t          |¦  «        D ]}|                     d ¦  «        ¯|d          ’Œ Œ2S ©rl   )rÄ   rL   )r-   r¥   rq   s      r   ú	<setcomp>z$_Program.__init__.<locals>.<setcomp>À   sG   € ÐoÐoÐo WÅzÐRYÑGZÔGZÐoÐo¸VÐ^d×^hÒ^hÐimÑ^nÔ^nÐo�F˜4”LÐoÐoÐoÐor!   rr   )ÚdatetimerÈ   r˜   rÉ   Útodayrž   ÚactiveÚ_showsÚ_seasonsÚ_statesrG   Ú
_historiesÚ_asked)Úselfr¾   rÈ   rÉ   s       r   Ú__init__z_Program.__init__¼   sŠ   € Ø!Ð!Ð!Ð!Ð!Ð!Ø'Ð'Ð'Ð'Ð'Ð'Ø—Z’Z‘\”\ˆŒ
ØoÐo°ÐoÑoÔoˆŒØ—m’m DÑ)Ô)ˆŒØ59Ð9ˆŒÐ9�d”m d¤lØ')­3©5¬5Ð$ˆŒ˜œ˜˜r!   c                 ó‚   ‡— | j         €1ddlmŠ ‰                     ˆfd„| j        D ¦   «         ¦  «        | _         | j         S )Nr   r‰   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r,   )r™   )r-   r‘   rŠ   s     €r   r�   z"_Program.shows.<locals>.<listcomp>È   s#   ø€ Ð(JÐ(JÐ(J¸A¨¯ª°Q©¬Ð(JÐ(JÐ(Jr!   )rÐ   r˜   rŠ   r›   rž   )rÕ   rŠ   s    @r   Úshowsz_Program.showsÅ   sO   ø€ ØŒ;ÐØ)Ð)Ð)Ð)Ð)Ð)ØŸ-š-Ð(JÐ(JÐ(JÐ(JÀÄÐ(JÑ(JÔ(JÑKÔKˆDŒKØŒ{Ðr!   c                 ó†   — ddl m} |                      ¦   «                              |                     |¦  «        ¦  «        pi S )Nr   r‰   )r˜   rŠ   rÙ   rL   r™   ©rÕ   Ú	series_idrŠ   s      r   Úshowz_Program.showË   sA   € Ø%Ð%Ð%Ð%Ð%Ð%Ø�zŠz‰|Œ|×Ò §¢¨IÑ 6Ô 6Ñ7Ô7Ð=¸2Ð=r!   c                 óê   ‡ ‡‡— ddl mŠ ‰ j        €,‰                     ˆˆ fd„‰ j        D ¦   «         ¦  «        ‰ _        ˆˆ ˆfd„‰                      ‰¦  «                             d¦  «        pg D ¦   «         S )zF{season number: its cached detail} of the regular seasons of a series.r   r‰   Nc           	      óð   •— g | ]r}‰                      |¦  «                             d ¦  «        pg D ]E}t          |                     dd¦  «        ¦  «        dk    ¯)‰                     ||d         ¦  «        ‘ŒFŒsS )ÚseasonsÚseason_numberr   )rÝ   rL   rP   Ú
key_season)r-   r‘   ÚsrŠ   rÕ   s      €€r   r�   z)_Program._season_data.<locals>.<listcomp>Ó   s“   ø€ ð +}ð +}ð +}ÐVWØ48·I²I¸a±L´L×4DÒ4DÀYÑ4OÔ4OÐ4UÐSUð+}ð +}Ø/0ÕY\Ð]^×]bÒ]bÐcrÐtuÑ]vÔ]vÑYwÔYwÐz{ÒY{ÐY{ð ,0¯?ª?¸1¸aÀÔ>PÑ+QÔ+QØY{ÐY{ÐY{ÐY{r!   c           
      óò   •— i | ]s}t          |                     d d¦  «        ¦  «        dk    ¯)t          |d          ¦  «        ‰j                             ‰                     ‰|d          ¦  «        ¦  «        pi “ŒtS )rá   r   )rP   rL   rÑ   râ   )r-   rã   rŠ   rÕ   rÜ   s     €€€r   r0   z)_Program._season_data.<locals>.<dictcomp>Õ   sƒ   ø€ ð jð jð jØÅcÈ!Ï%Ê%ÐP_ÐabÑJcÔJcÑFdÔFdÐghÒFhÐFhõ �A�oÔ&Ñ'Ô'¨¬×):Ò):¸4¿?º?È9ÐVWÐXgÔVhÑ;iÔ;iÑ)jÔ)jÐ)pÐnpØFhÐFhÐFhr!   rà   )r˜   rŠ   rÑ   r›   rž   rÝ   rL   rÛ   s   ``@r   Ú_season_dataz_Program._season_dataÏ   sÊ   øøø€ à%Ð%Ð%Ð%Ð%Ð%ØŒ=Ð Ø ŸMšMð +}ð +}ð +}ð +}ð +}Ð[_Ô[cð +}ñ +}ô +}ñ ~ô ~ˆDŒMðjð jð jð jð jð jØŸš 9Ñ-Ô-×1Ò1°)Ñ<Ô<ÐBÀðjñ jô jð 	jr!   c                 óÔ   ‡— |                       |¦  «                             t          |¦  «        ¦  «        pi                      d¦  «        pg }t          ˆfd„|D ¦   «         d¦  «        S )z1Plot of an episode from the cached season detail.Úepisodesc              3   ó’   •K  — | ]A}|                      d ¦  «        t          ‰¦  «        k    ¯(|                      d¦  «        pdV — ŒBdS )Úepisode_numberÚoverviewr   N)rL   rP   )r-   Úepr8   s     €r   r–   z$_Program.overview.<locals>.<genexpr>Û   sU   øè è € ÐmÐm°"ÀBÇFÂFÐK[ÑD\ÔD\Õ`cÐdkÑ`lÔ`lÒDlÐDl�R—V’V˜JÑ'Ô'Ð-¨2ÐDlÐDlÐDlÐDlÐmÐmr!   r   )rå   rL   rP   rœ   )rÕ   rÜ   r7   r8   rç   s      ` r   rê   z_Program.overviewØ   si   ø€ à×%Ò% iÑ0Ô0×4Ò4µS¸±[´[ÑAÔAÐGÀR×LÒLÈZÑXÔXÐ^Ð\^ˆÝÐmÐmÐmÐm¸ÐmÑmÔmÐoqÑrÔrÐrr!   c                 ót   — || j         vr#ddlm} |                     |¦  «        | j         |<   | j         |         S )Nr   )ÚChannelHistory)rÓ   Úwcs.airí   Úload_channel_history)rÕ   r…   rí   s      r   Úhistoryz_Program.historyÝ   sH   € Ø˜Tœ_Ð,Ð,Ø-Ð-Ð-Ð-Ð-Ð-Ø*8×*MÒ*MÈjÑ*YÔ*YˆDŒO˜JÑ'ØŒ˜zÔ*Ð*r!   c                 óz  — | j         rš| j        €ddlm} |                     ¦   «         | _        	 | j                             t          |¦  «        ¦  «        pi                      t          |¦  «        t          |¦  «        f¦  «        pi S # t          t          f$ r i cY S w xY w|  	                    |¦  «                             t          |¦  «        i ¦  «        }	 t          |                     dd¦  «        ¦  «        t          |                     dd¦  «        ¦  «        ft          |¦  «        t          |¦  «        fk    }|rbt          |                     d¦  «        pd¦  «        dk    r:t          |d         ¦  «        t          |                     d¦  «        pd¦  «        dœS n# t          t          f$ r Y nw xY wi S )	z]Watch state of one episode: the library's row, or the channel's resume point of that episode.Nr   )ÚstoreÚresume_sÚresume_eÚresume_positionr©   )r¨   r©   )rÉ   rÒ   r˜   rò   Úget_all_episode_statesrL   rP   rQ   r   rð   rt   rV   )rÕ   r…   rÜ   r7   r8   rò   ÚprogressÚsames           r   r§   z_Program.stateã   sÞ  € àŒ;ð 	ØŒ|Ð#Ø.Ð.Ð.Ð.Ð.Ð.Ø$×;Ò;Ñ=Ô=�”ðØœ×(Ò(­¨Y©¬Ñ8Ô8Ð>¸B×CÒCÅSÈÁ[Ä[ÕRUÐV]ÑR^ÔR^ÐD_Ñ`Ô`ÐfÐdfÐføÝ�zÐ*ð ð ð Ø�	�	�	ðøøøà—<’< 
Ñ+Ô+×/Ò/µ°I±´ÀÑCÔCˆð	Ý˜Ÿš Z°Ñ3Ô3Ñ4Ô4µc¸(¿,º,ÀzÐSTÑ:UÔ:UÑ6VÔ6VÐWÕ\_Ð`fÑ\gÔ\gÕilÐmtÑiuÔiuÐ[vÒvˆDØð D�˜hŸlšlÐ+<Ñ=Ô=ÐBÀÑCÔCÀaÒGÐGÝ&+¨HÐ5FÔ,GÑ&HÔ&HÕZ_Ð`h×`lÒ`lÐm{Ñ`|Ô`|ð  aBð  ABñ  [Cô  [Cð  Dð  Dð  DøøÝ�:Ð&ð 	ð 	ð 	ØˆDð	øøøàˆ	s%   ¯AB	 Â	BÂBÃC	F$ Æ$F8Æ7F8c                 ó  ‡‡‡— ddl m} |                      |¦  «        |                      |¦  «        }}d„ |                     ¦   «         D ¦   «         }d|vs|rR|| j        vrI| j                             |¦  «         ddlm} | 	                    d 
                    |¦  «        g¦  «         |                     ||| j        ¦  «        }| j        rÆ| j        €|                      ||dd¦  «         	 | j                             t#          |¦  «        ¦  «        pi }	n# t$          t&          f$ r i }	Y nw xY w|r0|                     ||	|                     d¦  «        | j        ¦  «        nd	di}
|
d	         d
v r	|
d         Šn|
d	         €|r|d         ndŠndŠdŠn |                      |¦  «                             t+          |¦  «        i ¦  «        }t#          |                     dd¦  «        ¦  «        t#          |                     dd¦  «        ¦  «        fŠt-          ˆfd„|D ¦   «         d¦  «        Š‰d         Š‰r$‰d         rt/          ˆˆfd„|D ¦   «         ¦  «        rdS ‰|                      ||‰d         ‰d         ¦  «        fS )z³(episode of next_up.episode_order, its state) the series continues with in this channel, or None when the
        next episode is unknown, not aired yet or the series is finished.r   )Únext_upc                 ó    — h | ]\  }}d |v¯	|’ŒS )rç   r,   )r-   ÚnÚdatas      r   rÌ   z _Program.next.<locals>.<setcomp>û   s&   € ÐMÐMÐM™˜˜D°jÈÐ6LÐ6L�1Ð6LÐ6LÐ6Lr!   rà   ©Úrefreshzlibrary:tv:{}NÚstatusr„   )r<   rœ   r8   r=   r7   c              3   óD   •K  — | ]}|d          |d         f‰k    ¯|V — ŒdS )rã   ÚeNr,   )r-   rë   Úpositions     €r   r–   z _Program.next.<locals>.<genexpr>  s:   øè è € ÐRÐR R°R¸´W¸bÀ¼gÐ4FÈÒ4QÐ4Q˜bÐ4QÐ4QÐ4QÐ4QÐRÐRr!   Úairedc              3   óD   •K  — | ]}‰|cxk    o‰d          k    nc V — ŒdS )rã   Nr,   )r-   rü   Ú	candidateÚfloors     €€r   r–   z _Program.next.<locals>.<genexpr>  sE   øè è € Ð9hÐ9hÐ[\¸%À1Ð:VÐ:VÒ:VÐ:VÈ	ÐRUÌÒ:VÐ:VÐ:VÐ:VÐ9hÐ9hÐ9hÐ9hÐ9hÐ9hr!   rã   r  )r˜   rú   rÝ   rå   rE   rÔ   ÚaddÚwcs.skinrÿ   Úrequestr$   Úepisode_orderrÎ   rÉ   rÒ   r§   rL   rP   rQ   r   rð   rt   rœ   Úany)rÕ   r…   rÜ   rú   rÝ   r•   Úmissingrÿ   ÚorderÚstatesÚresultr÷   r  r  r  s               @@@r   rœ   z_Program.nextö   s¾  øøø€ ð 	)Ð(Ð(Ð(Ð(Ð(Ø—y’y Ñ+Ô+¨T×->Ò->¸yÑ-IÔ-IˆfˆØMÐM F§L¢L¡N¤NÐMÑMÔMˆØ˜TÐ!Ð! WÐ!°)À4Ä;Ð2NÐ2NØŒK�OŠO˜IÑ&Ô&Ð&Ø(Ð(Ð(Ð(Ð(Ð(Ø�OŠO˜_×3Ò3°IÑ>Ô>Ð?Ñ@Ô@Ð@Ø×%Ò% d¨F°D´JÑ?Ô?ˆØŒ;ð 	 ØŒ|Ð#Ø—
’
˜: y°!°QÑ7Ô7Ð7ðØœ×)Ò)­#¨i©.¬.Ñ9Ô9Ð?¸R��øÝ�zÐ*ð ð ð Ø���ðøøøàW\Ðp�W—_’_ U¨F°D·H²H¸XÑ4FÔ4FÈÌ
ÑSÔSÐSÐciÐkoÐbpˆFØ�fŒ~Ð!3Ð3Ð3Ø" 9Ô-�	�	Ø˜”Ð'Ø(-Ð7˜E !œH˜H°4�	�	à �	ØˆEˆEà—|’| JÑ/Ô/×3Ò3µC¸	±N´NÀBÑGÔGˆHÝ˜HŸLšL¨°1Ñ5Ô5Ñ6Ô6½¸H¿LºLÈÐTUÑ<VÔ<VÑ8WÔ8WÐXˆHÝÐRÐRÐRÐR¨5ÐRÑRÔRÐTXÑYÔYˆIØ˜Q”KˆEØð 	 	¨'Ô 2ð 	µcÐ9hÐ9hÐ9hÐ9hÐ9hÐ`gÐ9hÑ9hÔ9hÑ6hÔ6hð 	Ø�4Ø˜$Ÿ*š* Z°¸IÀc¼NÈIÐVYÌNÑ[Ô[Ð[Ð[s   Ã-)D ÄD-Ä,D-N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rÖ   rÙ   rÝ   rå   rê   rð   r§   rœ   r,   r!   r   r²   r²   ¶   s£   € € € € € ðmð mð
1ð 1ð 1ðð ð ð>ð >ð >ðjð jð jðsð sð sð
+ð +ð +ðð ð ð&!\ð !\ð !\ð !\ð !\r!   r²   c                 ó(  — |                       dd¦  «        }d„ t          | ¦  «        D ¦   «         }	 ddlm} ddlm}  |¦   «         }|                     |||                     ||                      d                     |¦  «        ¦  «        pg ¦  «        ¦  «        }nL# t          $ r?}t          j        d                     ||¦  «        t          j        ¦  «         g }Y d	}~nd	}~ww xY w|d	d
…         D �]P}	|	                      d¦  «        pi }
|
                      dd¦  «        }	 t          |
                      d¦  «        pd¦  «        t          |
                      d¦  «        pd¦  «        }}n# t          t          f$ r Y Œ�w xY w||v r»|dk    rµ|dk    r¯||         d         }|
                      d¦  «        p||                               dd¦  «        |||
                      dd¦  «        |
                      dd¦  «        |                     ||||¦  «        |                     |¦  «                              d¦  «        pddœc S �ŒR|                     ¦   «         D ]º}	|                     ||	d         ¦  «        }|rš|\  }}|	                      dd¦  «        |d         |d         |                      dd¦  «        |                     |	d         |d         |d         ¦  «        ||                     |	d         ¦  «                              d¦  «        pddœc S Œ»d	S )zÛWhat a MyTV channel plays when it is started: the first entry of its program queue that is still ahead (the
    queue of the dialog and of the headless broadcast), else the next episode of its first series that has one.rl   r   c                 ó~   — i | ]:}|                      d ¦  «        ¯t          |                      d ¦  «        ¦  «        |“Œ;S rË   ©rL   rt   )r-   rã   s     r   r0   z_on_now.<locals>.<dictcomp>  s;   € ÐNÐNÐN aÀ!Ç%Â%ÈÁ+Ä+ÐN�c�!—%’%˜‘+”+ÑÔ ÐNÐNÐNr!   r   )Úchannel_play)Úget_cache_managerzprogram_list_{}u6   [MilionÃ¡Å™ Skin] program of channel {} unreadable: {}Nr=   Ú
propertiesrk   r7   r8   Úseries_namer   rs   r9   r“   )rq   rã   r  r5   r9   r§   r—   rã   r  )rL   rÄ   rî   r  Úwcs.cachingr  Úapply_reorderÚdrop_watchedr$   Ú	Exceptionr¸   ÚlogÚ
LOGWARNINGrP   rQ   r   r§   rÝ   rH   rœ   rê   )r¥   r¿   r…   rq   r  r  ÚcacheÚqueueÚexcru   ÚpropsrÜ   r7   r8   r`   Úfoundr  r§   s                     r   r³   r³     s�  € ð —’˜T 2Ñ&Ô&€JØNÐN­:°gÑ+>Ô+>ÐNÑNÔN€FðØ'Ð'Ð'Ð'Ð'Ð'Ø1Ð1Ð1Ð1Ð1Ð1Ø!Ð!Ñ#Ô#ˆØ×*Ò*¨5°*¸l×>WÒ>WØ˜Ÿ	š	Ð"3×":Ò":¸:Ñ"FÔ"FÑGÔGÐMÈ2ñ?Oô ?Oñ Pô Pˆˆøåð ð ð ÝŒÐI×PÒPÐQ[Ð]`ÑaÔaÕcgÔcrÑsÔsÐsØˆˆˆˆˆˆøøøøðøøøð �r˜�r”ð Nñ NˆØ—	’	˜,Ñ'Ô'Ð-¨2ˆØ—I’I˜i¨Ñ,Ô,ˆ	ð	Ý! %§)¢)¨HÑ"5Ô"5Ð":¸Ñ;Ô;½SÀÇÂÈ9ÑAUÔAUÐAZÐYZÑ=[Ô=[�GˆFˆFøÝ�:Ð&ð 	ð 	ð 	ØˆHð	øøøà˜ÐÐ 6¨A¢: :°'¸A²+°+Ø˜Ô# DÔ)ˆCØ#Ÿiši¨Ñ6Ô6Ð[¸&ÀÔ:K×:OÒ:OÐPVÐXZÑ:[Ô:[ÐbhÐovØ"ŸYšY ¸Ñ;Ô;ÀUÇYÂYÈvÐWYÑEZÔEZØ$Ÿ]š]¨:°s¸FÀGÑLÔLØ '§¢¨SÑ 1Ô 1× 5Ò 5°oÑ FÔ FÐ LÈ"ðNð Nð Nð Nð Nùð —’‘”ð fð fˆØ—’˜Z¨¨t¬Ñ5Ô5ˆØð 	fØ$ÑˆI�uØ#Ÿiši¨°Ñ3Ô3¸)ÀC¼.ÈyÐY\Ì~Ðhq×huÒhuÐv|ð  Añ  iBô  iBØ#×,Ò,¨U°4¬[¸)ÀC¼.È)ÐTWÌ.ÑYÔYØ"°·²¸UÀ4¼[Ñ0IÔ0I×0MÒ0MÈoÑ0^Ô0^Ð0dÐbdðfð fð fð fð fð	fð
 ˆ4s+   ±A)B Â
C$Â%5CÃC$Ä"AE+Å+E?Å>E?c                 óh  — ddl m} t          j        d| pi                      d¦  «        ¦  «        }t          | ¦  «        }t          dg ¦  «        }t          |¦  «        }g t          ¦   «         }}|D �]¿}t          |¦  «        D �]«}	|	                     d¦  «        }
|
r|
|v rŒ| 
                    |
¦  «         |                     |                     d¦  «        |
¦  «        }|sŒ`|\  }}|                     |
¦  «        }|d         |d         }}|                     d	¦  «        r|d	         |                     d
¦  «        pdfnd }t          |	                     d¦  «        ¦  «        }d}t          d                     t!          |	                     dd¦  «        ¦  «        |||	                     dd¦  «        t!          |¦  «        |
|                     dd¦  «        ¦  «        ¦  «        }|dk    r|}n‡|dk    r7t          d                     |                     dd¦  «        ¦  «        ¦  «        }nJ|	                     dd¦  «        ||	                     dd¦  «        dœ}t          j        d|
||||¦  «        \  }}|                     ||	|
¦  «        }|                     t)          d                     t+          |¦  «        |¦  «        |||||d         dœd                     t+          |¦  «        |¦  «        |	                     dd¦  «        ||d|dœ|| ¬¦  «        ¦  «         d|
|||                     dd¦  «        d|	                     dd¦  «        dœ                     ¦   «         D ]1\  }}|d                              d|z   t1          |¦  «        ¦  «         Œ2t          j        d|
d ||¦  «        \  }}t3          j        |d         t3          j        |||d!œ|¦  «        t          j        |¦  «        t          j        |¦  «        t;          |¦  «        ¬"¦  «         t=          |¦  «        |k    r|c c S �Œ­�ŒÁ|S )#Nr   ©ÚrowsÚwidget_mytv_nextr†   ry   rl   rã   r  r¨   r©   rn   Fz€action=play_episode_from_addon&series_name={}&season_number={}&episode_number={}&year={}&poster={}&tmdb_id={}&mytv_channel_id={}r   r   r6   ÚplayÚchannel_openz!action=my_tv_dialog&channel_id={}rê   )r5   rm   r9   r8   zS{:02d}E{:02d}Úfanart)rª   rm   r¡   r«   )r5   r:   r7   r8   r;   r<   ©rZ   r[   r\   r]   rr   )ÚtypeÚtmdbrã   r  r…   Úchannel_kindÚ	ctx_titler­   z	milionar.Údetail)rã   r  )r¯   )r˜   r)  r   r±   rL   rh   r   r²   rG   rÄ   r  rœ   rÝ   r    r'   r$   r   Ú
title_pathÚseries_factsr´   rb   rP   rE   rX   rt   r   r¶   r8   rY   r·   rµ   )rf   r)  r†   rd   r¾   r¿   rE   Úseenr¥   rq   rÜ   r&  r  r§   rÝ   r7   Únext_epr<   rm   r\   r+  r   Ú
click_metaÚcardr`   rg   r3  Ú_folders                               r   r*  r*  ?  sz  € Ø!Ð!Ð!Ð!Ð!Ð!ÝŒNÐ-°°¸"×/AÒ/AÀ'Ñ/JÔ/JÑKÔK€EÝ�6‰NŒN€EÝÐ.°Ñ3Ô3€HÝ�xÑ Ô €GØ•c‘e”eˆ4€EØð +ñ +ˆÝ  Ñ)Ô)ð *	ñ *	ˆFØŸ
š
 4Ñ(Ô(ˆIØð  	¨TÐ 1Ð 1ØØ�HŠH�YÑÔÐØ—L’L §¢¨TÑ!2Ô!2°IÑ>Ô>ˆEØð ØØ$ÑˆI�uØ—<’< 	Ñ*Ô*ˆDØ'¨œn¨i¸¬n�GˆFØNSÏiÊiÐXdÑNeÔNeÐo�e˜LÔ)¨5¯9ª9°^Ñ+DÔ+DÐ+IÈÐJÐJÐkoˆFÝ˜VŸZšZ¨Ñ6Ô6Ñ7Ô7ˆFØˆFåð PßQWÒQWÝ˜6Ÿ:š: f¨bÑ1Ô1Ñ2Ô2°F¸GÀVÇZÂZÐPVÐXZÑE[ÔE[Ý˜6Ñ"Ô" I¨w¯{ª{¸4ÀÑ/DÔ/DñRFô RFñGô GˆDð ˜ŠˆØ��Ø˜.Ò(Ð(ÝÐ C× JÒ JÈ7Ï;Ê;ÐW[Ð]_ÑK`ÔK`Ñ aÔ aÑbÔb��à'-§z¢z°&¸"Ñ'=Ô'=ÈØ&,§j¢j°¸RÑ&@Ô&@ðBð B�
å%Ô0°¸IÀuÈfÐV]Ð_iÑjÔj‘��fØ×$Ò$ T¨6°9Ñ=Ô=ˆDØ�LŠL�Ð/×6Ò6µs¸6±{´{ÀGÑLÔLÈdØ-3¸vÈvÐdhÐiqÔdrÐ#sÐ#sØ.>×.EÒ.EÅcÈ&ÁkÄkÐSZÑ.[Ô.[Ø4:·J²J¸vÀrÑ4JÔ4JÐV\Ø07ÀiÐ[að%cð %cð '-°v°:ð?ñ ?ô ?ñ @ô @ð @ð (1¸)È&ÐW^Ø-4¯[ª[¸¸rÑ-BÔ-BÐTXØ,2¯JªJ°v¸rÑ,BÔ,BðDð DçDIÂEÁGÄGðEð E‘
��Uð �b”	×%Ò% k°CÑ&7½¸U¹¼ÑDÔDÐDÐDÝ$Ô/°	¸9ÀhÐPVÐX_Ñ`Ô`‰OˆF�GÝŒJ�u˜R”y¥$¤,¨t¸6ÈÐ5PÐ5PÐRWÑ"XÔ"XÝ” tÑ,Ô,­f¬o¸fÑ.EÔ.EÕQUÐV\ÑQ]ÔQ]ð_ñ _ô _ð _å�5‰zŒz˜UÒ"Ð"Ø�����ñ #ñS*	ðV €Lr!   c                  óB   — t          dd ¦  «        pt          dg ¦  «        S )Nzglobal_watch_history.jsonzrecently_played.json)r   r,   r!   r   Ú_recent_entriesr<  u  s$   € ÝÐ1°4Ñ8Ô8Ðb½JÐG]Ð_aÑ<bÔ<bÐbr!   c                 ó¸  — |                       dd¦  «        }|                       dd¦  «        }|                       d¦  «        dk    }|p^|s|nZd                     |t          |                       d¦  «        pd¦  «        t          |                       d	¦  «        pd¦  «        ¦  «        }d
}|€t          t	          | ¦  «        ¦  «        }nt          j        | |¦  «        \  }}t          |||||dœ||                       d¦  «        |                       dd¦  «        |                       d¦  «        |rd	nd|r|nddœ|| ¬¦  «        }|                       d¦  «        s|                       d¦  «        rm|                     d|                       d¦  «        dv rdnd¦  «         |                     dt          |                       d¦  «        p| d         ¦  «        ¦  «         |S )zlItem of a title entry (tmdb_id, media_type, title, poster, plot); `click` None keeps the entry's own action.r5   r   rm   ro   rq   z{} S{:02d}E{:02d}r7   r   r8   FN©rª   rm   r¡   r6   r9   r>   Úmovie)r5   r6   r9   r>   r;   r:   r.  rk   rl   úmilionar.typerp   rr   úmilionar.tmdb)
rL   r$   rP   r'   rv   r   Ú
entry_pathrb   rX   rt   )	ru   r)   r†   r5   rm   rq   r\   r   r^   s	            r   Ú_entry_itemrC  y  sð  € à�IŠI�g˜rÑ"Ô"€EØ�YŠY�x Ñ$Ô$€FØ�YŠY�|Ñ$Ô$¨Ò0€FØð O 6ð N�e�eÐ/B×/IÒ/IØ�s�5—9’9˜XÑ&Ô&Ð+¨!Ñ,Ô,­c°%·)²)¸IÑ2FÔ2FÐ2KÈ!Ñ.LÔ.Lñ0Nô 0N€Eà€FØ€}Ý� eÑ,Ô,Ñ-Ô-ˆˆåÔ(¨°Ñ6Ô6‰ˆˆfÝ�˜Ø%°ÀÐHÐHØ %¨u¯yªy¸Ñ/@Ô/@È%Ï)Ê)ÐTZÐ\^ÑJ_ÔJ_Ø!&§¢¨8Ñ!4Ô!4ÐPVÐCcÀ9À9Ð\cØ/5Ð&= e e¸2ð?ð ?ð ¨ Zð1ñ 1ô 1€Dð ‡y‚y�ÑÔð T˜uŸyšy¨™œð TØ×Ò˜°%·)²)¸LÑ2IÔ2IÐM]Ð2]Ð2]¨$¨$ÐcjÑkÔkÐkØ×Ò˜­#¨e¯iªi¸	Ñ.BÔ.BÐ.QÀeÈDÄkÑ*RÔ*RÑSÔSÐSØ€Kr!   c                 ó\   — d„ t          ¦   «         d t          | ¦  «        …         D ¦   «         S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r,   )rC  ©r-   r  s     r   r�   z*widget_recently_played.<locals>.<listcomp>’  s   € ÐGÐGÐG˜q�K˜‰NŒNÐGÐGÐGr!   )r<  rh   r}   s    r   Úwidget_recently_playedrG  ‘  s+   € ØGÐG¥OÑ$5Ô$5°oµv¸f±~´~°oÔ$FÐGÑGÔGÐGr!   c                 óÚ  ‡— g }dddg d¢fdddg d¢ffD ]�\  Š}}}d	d
||ddiddddœdddœdœdœ}t          j        t          j        t          j        |¦  «        ¦  «        ¦  «                             di ¦  «        }|                     ˆfd„|                     |g ¦  «        D ¦   «         ¦  «         Œž|                     d„ d¬¦  «         g }|dt          | ¦  «        …         D �]†\  }Š}	|	                     di ¦  «        }
|
                     d¦  «        p*|
                     d¦  «        p|
                     dd¦  «        }d  	                    ‰|	                     ‰d!z   ¦  «        ¦  «        }|	                     d"d¦  «        }||	                     d#d¦  «        |	                     d$¦  «        ‰d%œ}‰dk    rR| 
                    |	                     d&d¦  «        |	                     d'¦  «        |	                     d¦  «        ¬(¦  «         |                     t          |t          |¦  «        |
                     d¦  «        p|||
                     d)d¦  «        |d*œ|¬+¦  «        ¦  «         �Œˆ|S ),zFLibrary items with a resume point (movies and episodes), newest first.r?  zVideoLibrary.GetMoviesÚmovies)r5   r6   rZ   r<   Ú
lastplayedr9   r8   zVideoLibrary.GetEpisodesrç   )r5   Ú	showtitler7   r8   rZ   r<   rJ  r9   z2.0r=   Úendé   Ú
inprogressr@   r   )ÚfieldÚoperatorrg   rJ  Ú
descending)Úmethodr  )r  ÚlimitsÚfilterÚsort)Újsonrpcrl   rR  rf   r  c              3   óJ   •K  — | ]}|                      d d¦  «        ‰|fV — ŒdS )rJ  r   Nr”   )r-   r½   Údbtypes     €r   r–   z%widget_in_progress.<locals>.<genexpr>¡  s8   øè è € Ð]Ð]À#�c—g’g˜l¨BÑ/Ô/°¸Ð=Ð]Ð]Ð]Ð]Ð]Ð]r!   c                 ó   — | d         S )Nr   r,   )Úpairs    r   ú<lambda>z$widget_in_progress.<locals>.<lambda>¢  s
   €   Q¤€ r!   T)r`   ÚreverseNrZ   rm   rª   ztvshow.posterz#action=lib_resume&dbtype={}&dbid={}rl   r5   r9   r6   )r5   r9   r6   r;   rK  r7   )r:   r7   r8   r-  )rª   rm   r-  r¡   r¬   )r   Úloadsr¸   ÚexecuteJSONRPCÚdumpsrL   ÚextendrU  rh   r$   Úupdater´   rb   r'   )rf   rE   rR  r`   r%  r
  r  ÚselectedÚ_stampr½   rZ   rm   rj   r)   r[   rX  s                  @r   Úwidget_in_progressrd  •  sÎ  ø€ à€EàÐ.°Ð:rÐ:rÐ:rÐsØÐ2°JØ_Ð_Ð_ðað'bð 	^ð 	^Ñ"ˆ�˜˜Uð $¨1¸Ø¨E°2¨;Ø ,¸&È2ÐNÐNØ+°lÐCÐCðKEð KEð Fð Fˆõ ”�DÔ/µ´
¸7Ñ0CÔ0CÑDÔDÑEÔE×IÒIÈ(ÐTVÑWÔWˆØ�ŠÐ]Ð]Ð]Ð]ÈÏÊÐTWÐY[ÑI\ÔI\Ð]Ñ]Ô]Ñ]Ô]Ð]Ð]Ø	‡J‚JÐ'Ð'°€JÑ6Ô6Ð6Ø€HØ$ _¥f¨V¡n¤n _Ô5ð eñ eÑˆ�˜Ø�gŠg�e˜RÑ Ô ˆØ—’˜Ñ"Ô"ÐV c§g¢g¨gÑ&6Ô&6ÐV¸#¿'º'À/ÐSUÑ:VÔ:VˆØ3×:Ò:¸6À3Ç7Â7È6ÐTXÉ=ÑCYÔCYÑZÔZˆØ—’˜ Ñ$Ô$ˆØ¨¯ª°¸Ñ(;Ô(;ÀSÇWÂWÈVÁ_Ä_Ø#ð%ð %ˆà�YÒÐØ�KŠK C§G¢G¨K¸Ñ$<Ô$<ÀSÇWÂWÈXÑEVÔEVØ #§¢¨	Ñ 2Ô 2ð ñ 4ô 4ð 4à�Š�Ø•8˜C‘=”=°·²¸Ñ0@Ô0@Ð0JÀFÐV\Ø14·²¸À2Ñ1FÔ1FÐPVð'Xð 'XØ^bðdñ dô dñ 	eô 	eð 	eñ 	eð €Or!   c                 óV  ‡— ddl m} |                     ¦   «         Šˆfd„dD ¦   «         }|pt                               |¦  «         |d| …         }‰                     d„ |D ¦   «         ¦  «         ‰                     d„ |D ¦   «         ¦  «         g }|D ]–\  }}|dk    r|                     ‰|¦  «        n|                     ‰|¦  «        }| 	                    |d	         |d
         |d         |d         | 
                    d¦  «        pd|dk    rdndt          |¦  «        dœ¦  «         Œ—|S )ziRandom titles of My movies / My series as game entries (so the row is never empty for a user with lists).r   r(  c                 óH   •— g | ]}‰                      |¦  «        D ]}||f‘ŒŒS r,   )Úlist_ids)r-   Úmediar‘   rý   s      €r   r�   z+_random_library_entries.<locals>.<listcomp>¸  s6   ø€ ÐTÐTÐT˜U¸t¿}º}ÈUÑ?SÔ?SÐTÐT¸!ˆu�aˆjÐTÐTÐTÐTr!   ©r?  rr   Nc                 ó$   — g | ]\  }}|d k    ¯|‘ŒS )r?  r,   ©r-   rh  r‘   s      r   r�   z+_random_library_entries.<locals>.<listcomp>»  s&   € ÐFÐFÐF™x˜u a°U¸gÒ5EÐ5E˜Ð5EÐ5EÐ5Er!   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS )rr   r,   rk  s      r   r�   z+_random_library_entries.<locals>.<listcomp>¼  s!   € ÐCÐCÐC™x˜u a°U¸d²]°]˜°]°]°]r!   r?  r5   r6   r9   rm   r—   r   rr   rq   )r5   r6   r9   rm   r—   ro   rk   )r˜   r)  ÚDataÚrandomÚshuffleÚpreload_moviesÚpreload_seriesÚ
movie_cardÚseries_cardr´   rL   rt   )	ÚcountÚrngr)  r�   Úentriesrh  rk   r9  rý   s	           @r   Ú_random_library_entriesrw  ´  sj  ø€ à!Ð!Ð!Ð!Ð!Ð!Ø�9Š9‰;Œ;€DØTÐTÐTÐT oÐTÑTÔT€FØ€]�F×Ò˜FÑ#Ô#Ð#Ø�F�U�FŒ^€FØ×ÒÐFÐF¨6ÐFÑFÔFÑGÔGÐGØ×ÒÐCÐC¨6ÐCÑCÔCÑDÔDÐDØ€GØ ð 2ð 2‰ˆˆwØ16¸'Ò1AÐ1Aˆt�Š˜t WÑ-Ô-Ð-Àt×GWÒGWÐX\Ð^eÑGfÔGfˆØ�Š  g¤¸¸V¼ÈdÐSYÌlÐfjÐksÔftØ$(§H¢H¨ZÑ$8Ô$8Ð$>¸BÐZ_ÐcgÒZgÐZgÈhÈhÐmtÝ#& w¡<¤<ð1ð 1ñ 	2ô 	2ð 	2ð 	2ð €Nr!   ))Ú
tab_moviesÚwidget_demo_moviesië  )Ú
tab_seriesÚwidget_demo_seriesiì  )ÚWIDGET_SLOTSc           
      óø  ‡‡— ddl m} | pi                      d¦  «        pdŠt          j        t
          ¦  «        }g }t          D ]‰\  }Š}t          ˆˆfd„t          dt          dz   ¦  «        D ¦   «         d¦  «        }|rN‰|v rJ| 
                    ||                     |¦  «        d                     |‰         |dz  z   ¦  «        f¦  «         ŒŠ| 
                    d	|                     d
¦  «        d                     t                               d¦  «        ¦  «        f¦  «         | 
                    d|                     d¦  «        d                     t                               d¦  «        ¦  «        f¦  «         |S )uÒ   The Home buttons of every MilionÃ¡Å™ card: jump to the Filmy / SeriÃ¡ly demo rows of the section, play a random
    title (a tab whose row the user removed from the section is left out), open the AI costs card.r   )ÚBASESÚsecÚgamec              3   ót   •K  — | ]2}t          j        d                      ‰|¦  «        ¦  «        ‰k    ¯.|V — Œ3dS )zSkin.String(mil.{}.{}.type)N)r¸   ÚgetInfoLabelr$   )r-   rü   r½   r  s     €€r   r–   z _game_buttons.<locals>.<genexpr>Ò  s[   øè è € ð `ð `˜1ÝÔ)Ð*G×*NÒ*NÈsÐTUÑ*VÔ*VÑWÔWÐ[^Ò^Ð^ð Ø^Ð^Ð^Ð^ð`ð `r!   r=   zSetFocus({})éd   Úrandom_gameií  z.RunPlugin({}?action=milionar_demo&demo=random)r   Úai_costsi €  zRunPlugin({}?action=ai_costs))Úwcs.skin.hero_contractr~  rL   Ú	xbmcaddonÚAddonÚADDON_IDÚ	GAME_TABSrœ   ÚrangeÚ
HERO_SLOTSr´   r¹   r$   r%   Úrstrip)	rf   r~  ÚaddonÚbuttonsÚactionÚ	string_idÚslotr½   r  s	          @@r   Ú_game_buttonsr“  Ê  s¨  øø€ ð -Ð,Ð,Ð,Ð,Ð,Øˆ<�R×
Ò
˜UÑ
#Ô
#Ð
- v€CÝŒO�HÑ%Ô%€EØ€GÝ"+ð zð zÑˆ��YÝð `ð `ð `ð `ð `¥ a­°a©Ñ 8Ô 8ð `ñ `ô `Øabñdô dˆàð 	z�C˜5�L�LØ�NŠN˜F E×$<Ò$<¸YÑ$GÔ$GÈ×I^ÒI^Ð_dÐehÔ_iÐlpÐsvÑlvÑ_vÑIwÔIwÐxÑyÔyÐyøØ‡N‚N�M 5×#;Ò#;¸EÑ#BÔ#BØD×KÒKÍDÏKÊKÐX[ÑL\ÔL\Ñ]Ô]ð_ñ `ô `ð `à‡N‚N�J × 8Ò 8¸Ñ ?Ô ?ÐA`×AgÒAgÕhl×hsÒhsÐtwÑhxÔhxÑAyÔAyÐzÑ{Ô{Ð{Ø€Nr!   c                 ó6  — ddl m} t          |¦  «        }t          |                     d¦  «        p|                     d¦  «        pd¦  «        }|s|dfS |                     d¦  «        dv rdnd	}|dk    r|                      |¦  «        n|                      |¦  «        }|                      ||¦  «        }|s|s|dfS |dk    r|                     |||¦  «        }n| 	                    | |¦  «        }d
D ]"}|                     |¦  «        r||         ||<   Œ#||fS )zIUse the library's cached TMDb card for every game topic, including demos.r   r(  rk   rl   Nro   rp   rr   r?  )r5   r6   r9   rm   r—   r-  )
r˜   r)  ÚdictrP   rL   rÝ   r?  Úsnapshotr5  rr  )	rý   ru   r)  Úidentrh  r3  Úsnapr9  r`   s	            r   Ú_game_metadatar™  Ü  sB  € à!Ð!Ð!Ð!Ð!Ð!Ý�‰KŒK€EÝ�—	’	˜)Ñ$Ô$Ð<¨¯	ª	°$©¬Ð<¸1Ñ=Ô=€EØð Ø�dˆ{ÐØ—I’I˜lÑ+Ô+Ð/?Ð?Ð?ˆDˆDÀW€EØ!&¨$¢ ˆT�YŠY�uÑÔÐ°D·J²J¸uÑ4EÔ4E€FØ�=Š=˜ Ñ&Ô&€DØð ˜$ð Ø�dˆ{ÐØ�‚}€}Ø× Ò  ¨¨uÑ5Ô5ˆˆà�Š˜t UÑ+Ô+ˆØHð #ð #ˆØ�8Š8�C‰=Œ=ð 	#Ø˜cœˆE�#‰JøØ�$ˆ;Ðr!   c                 ór   — | j         r/ddlm} |                     t	          | j         ¦  «        ¦  «         d S d S )Nr   rþ   )r  r	  rÿ   r
  Úsorted)rý   rÿ   s     r   Ú_request_game_metadatarœ  ò  sJ   € Ø„|ð .Ø$Ð$Ð$Ð$Ð$Ð$Ø�Š�˜tœ|Ñ,Ô,Ñ-Ô-Ð-Ð-Ð-ð.ð .r!   r   c                 ó@  — |r=|dv rt          j        |¦  «        nt          j        |¦  «        }|d         |d         }}	nEddlm}
 |
j        |dv rdnd         }t          j        |rd                     ||¦  «        n|¦  «        }	t          j        | ||	|||¦  «         d	S )
zNShared game hero, with the same TMDb facts as the library's movie/series hero.rp   Úkickerr9   r   )Ú	game_viewrq   r?  u   {} Â· {}N)	r   rq   r?  Ú	wcs.gamesrŸ  ÚKICKERSÚtrackr$   Ú	challenge)r^   r5   rh  r6   r—   r�  r9   r9  Útextsrž  rŸ  r„   s               r   Ú
_challenger¥  ø  s¾   € àð MØ%*Ð.>Ð%>Ð%>•”˜DÑ!Ô!Ð!ÅDÄJÈtÑDTÔDTˆØ˜X”¨¨f¬�ˆˆà'Ð'Ð'Ð'Ð'Ð'ØÔ ¨UÐ6FÐ-FÐ-F  ÈGÔTˆÝ”¸TÐK˜J×-Ò-¨d°DÑ9Ô9Ð9ÀtÑLÔLˆÝ„N�4˜ ¨°'¸4Ñ@Ô@Ð@Ð@Ð@r!   c                 óØ  ‡ ‡— ddl m} |                     ¦   «         }t          j        d‰ pi                      d¦  «        ¦  «        }t          ‰ ¦  «        }t          ‰ ¦  «        }g }t          ¦   «         d |…         }t          |¦  «        |k     rîddl
m} ddlm}	 |	                     dg¦  «                             dd¦  «        }
t          j        |
|                     ¦   «                              ¦   «         |ˆ fd„dD ¦   «         gd	¬
¦  «        }t'          j        |¦  «        }d„ |D ¦   «         Šˆfd„t+          ||¦  «        D ¦   «         }|                     |¦  «         ||d |t          |¦  «        z
  …         z   }|D �]Ù}t/          ||¦  «        \  }}|                     dd¦  «        }t1          j        |¦  «        }d}|dk    s*|                     d¦  «        sÔ|                     d¦  «        s¿ddlm} |                     d¦  «        dk    rdnd}t9          |                     |                     |                     dd¦  «        t?          |                     d¦  «        pd¦  «        ||                     d¦  «        pd|||                     dd¦  «        ¬¦  «        ¦  «        ¦  «        }nt          j         ||¦  «        \  }}| !                    tE          |                     dd¦  «        ||||||dœ|                     dd¦  «        |                     d¦  «        |                     dd¦  «        ddœ|| ¬¦  «        ¦  «         |                     d¦  «        s|                     d¦  «        ry|d          #                    d |                     d¦  «        d!v rdnd¦  «         |d          #                    d"t?          |                     d¦  «        p|d         ¦  «        ¦  «         tI          |d         |                     dd¦  «        |                     d¦  «        |                     d¦  «        |||                     dd¦  «        |¦  «         �ŒÛtK          |¦  «         |S )#Nr   r(  Úwidget_game_topicsr†   rÇ   rþ   c                 óB   •— i | ]}|‰pi                       |d ¦  «        “ŒS )r   r”   )r-   r.   rf   s     €r   r0   z&widget_game_topics.<locals>.<dictcomp>  s/   ø€ ÐiÐiÐi¸Q˜A  ¨"×1Ò1°!°RÑ8Ô8ÐiÐiÐir!   )rU  Ústyler†   ÚhwÚupT)Ú	sort_keysc                 ó|   — h | ]9}|                      d ¦  «        t          |                      d¦  «        ¦  «        f’Œ:S ©r5   r6   r  rF  s     r   rÌ   z%widget_game_topics.<locals>.<setcomp>  s9   € ÐFÐFÐF¸�—’�w‘”¥ Q§U¢U¨6¡]¤]Ñ!3Ô!3Ð4ÐFÐFÐFr!   c                 óR   •— g | ]#}|d          t          |d         ¦  «        f‰v¯!|‘Œ$S r®  )rt   )r-   r  r6  s     €r   r�   z&widget_game_topics.<locals>.<listcomp>  s=   ø€ ÐlÐlÐl�qÀAÀgÄJÕPSÐTUÐV\ÔT]ÑP^ÔP^ÐC_ÐgkÐCkÐCk�ÐCkÐCkÐCkr!   rm   r   Fr€  rk   rl   )Úmillionairero   rq   rr   r?  r5   r6   r9   )r5   rk   ro   r6   rm   r—   r9   )rª   rm   r¡   r-  r«   ©r5   r6   r9   r;   r.  r­   r@  rp   rA  )&r˜   r)  rm  r   r±   rL   rh   r“  r<  rµ   rÍ   rÈ   r	  rÿ   Ú	revisionsr   r_  rÎ   Ú	isoformatrn  ÚRandomrw  ro  r™  r   r-  r   r°  r'   ÚqueryÚSubjectrt   rB  r´   rb   rX   r¥  rœ  )rf   r)  rý   r†   rd   r�  rE   rv  rÈ   rÿ   ÚrevisionÚseedru  Úextraru   r9  rm   r—   r\   r°  rh  r   r6  s   `                     @r   r§  r§    s·  øø€ Ø!Ð!Ð!Ð!Ð!Ð!Ø�9Š9‰;Œ;€DÝŒNÐ/°&°,¸B×1CÒ1CÀGÑ1LÔ1LÑMÔM€EÝ�6‰NŒN€EÝ˜FÑ#Ô#€GØ€EÝÑÔ   Ô'€GÝ
ˆ7�|„|�eÒÐØ!Ð!Ð!Ð!Ð!Ð!Ø$Ð$Ð$Ð$Ð$Ð$Ø×$Ò$Ð&:Ð%;Ñ<Ô<×@Ò@ÐAUÐWXÑYÔYˆÝŒz˜8 T§Z¢Z¡\¤\×%;Ò%;Ñ%=Ô%=¸uØiÐiÐiÐiÐBhÐiÑiÔiðkØvzð|ñ |ô |ˆåŒm˜DÑ!Ô!ˆØFÐF¸gÐFÑFÔFˆØlÐlÐlÐlÕ3°E¸3Ñ?Ô?ÐlÑlÔlˆØ�Š�EÑÔÐØ˜EÐ"7 5­3¨w©<¬<Ñ#7Ð"7Ô8Ñ8ˆØð Rñ RˆÝ$ T¨5Ñ1Ô1‰ˆˆtØ—’˜8 RÑ(Ô(ˆÝ”;˜uÑ%Ô%ˆØˆØ�FŠ?ˆ? 5§9¢9¨YÑ#7Ô#7ˆ?¸5¿9º9ÀT¹?¼?ˆ?Ø-Ð-Ð-Ð-Ð-Ð-Ø!ŸIšI lÑ3Ô3°xÒ?Ð?�D�DÀWˆEÝ˜K×-Ò-¨k×.AÒ.AØ—i’i ¨Ñ,Ô,µc¸%¿)º)ÀIÑ:NÔ:NÐ:TÐRTÑ6UÔ6UÐbgØ—Y’Y˜vÑ&Ô&Ð,¨"°VÀhÐUZ×U^ÒU^Ð_eÐgiÑUjÔUjð /Bñ /lô /lñ mô mñ nô nˆDˆDõ "Ô,¨U°EÑ:Ô:‰LˆD�&Ø�Š•U˜5Ÿ9š9 W¨bÑ1Ô1°4Ø)/¸6È6Ð]eÐt|Ð}Ð}Ø*/¯)ª)°G¸RÑ*@Ô*@È%Ï)Ê)ÐTZÑJ[ÔJ[Ø).¯ª°6¸2Ñ)>Ô)>ÈWð!Vð !Và"(°6¨zð	;ñ ;ô ;ñ 	<ô 	<ð 	<ð
 �9Š9�YÑÔð 	] 5§9¢9¨T¡?¤?ð 	]Ø�"ŒI×!Ò! /¸5¿9º9À\Ñ;RÔ;RÐVfÐ;fÐ;f°4°4ÐlsÑtÔtÐtØ�"ŒI×!Ò! /µ3°u·y²yÀÑ7KÔ7KÐ7ZÈuÐUYÌ{Ñ3[Ô3[Ñ\Ô\Ð\Ý�5˜”9˜eŸiši¨°Ñ4Ô4°e·i²iÀÑ6MÔ6MÈuÏyÊyÐY_ÑO`ÔO`ÐbjÐlsÐuz×u~Òu~ð  @Fð  HJñ  vKô  vKð  MQñ  	Rô  	Rð  	Rñ  	RÝ˜4Ñ Ô Ð Ø€Lr!   c                 óþ  — ddl m} ddlm} |                     ¦   «         }t          |¦  «        }g }|                     | ¦  «        dt          |d¦  «        …         D �]}t          ||j	        | |j
        |j        |j        t          |j        ¦  «        |j        dœ¦  «        \  }}	|d         t!          j        |¦  «        }}
| dk    rdnd	}t#          |d
         t%          d                     |j        ¦  «        ¦  «        |
|
|||dœ|d
         |d         |d         | dk    rdnddœ¬¦  «        }t+          ||d
         | |d         |||d         |	¦  «         |                     |¦  «         �Œt/          |¦  «         |S )z\Home row of the offline Millionaire demo (wcs/games/demo): a click starts that title's game.r   )Úcatalogr(  N)rk   ro   r5   r6   r9   rm   r—   rm   r?  zDefaultMovies.pngzDefaultTVShows.pngr5   zaction=milionar_demo&demo={})rª   rm   r¡   r«   r-  r6   r9   Útvshowr±  r¬   )Úwcs.games.demor»  r˜   r)  rm  r“  Úby_mediarh   r™  rk   r5   r6   r9   r    rm   r-  r   rb   r'   r$   rl   r¥  r´   rœ  )rh  rf   r»  r)  rý   r�  rE   r5   ru   r9  rm   r—   r¡   r^   s                 r   Ú_demo_itemsr¿  1  sÈ  € à&Ð&Ð&Ð&Ð&Ð&Ø!Ð!Ð!Ð!Ð!Ð!Ø�9Š9‰;Œ;€DÝ˜FÑ#Ô#€GØ€EØ×!Ò! %Ñ(Ô(Ð)>­&°¸Ñ*>Ô*>Ð)>Ô?ð ñ ˆÝ$ T°u´}ÐTYØ27´+ÀuÄzÐ[`Ô[eÝ3:¸5¼<Ñ3HÔ3HÐV[ÔVbð,dð ,dñ eô e‰ˆˆtð ! œ?­D¬K¸Ñ,>Ô,>�ˆØ&+¨wÒ&6Ð&6Ð"Ð"Ð<PˆÝ�U˜7”^¥XÐ.L×.SÒ.SÐTYÔT\Ñ.]Ô.]Ñ%^Ô%^Ø#)°VÀTÐX`ÐltÐuÐuØ$)¨'¤N¸EÀ&¼MÐSXÐY_ÔS`Ø38¸GÒ3CÐ3C¨¨ÈðSð SðTñ Tô Tˆõ 	�4˜˜wœ¨°°f´¸xÈÐRWÐX^ÔR_ÐaeÑfÔfÐfØ�Š�TÑÔÐÑÝ˜4Ñ Ô Ð Ø€Lr!   c                 ó"   — t          d| ¦  «        S )Nr?  ©r¿  r}   s    r   ry  ry  H  s   € Ý�w Ñ'Ô'Ð'r!   c                 ó"   — t          d| ¦  «        S )Nrq   rÁ  r}   s    r   r{  r{  L  s   € Ý�x Ñ(Ô(Ð(r!   c           
      óh  — t          j        d| pi                      d¦  «        ¦  «        }t          dt	          d¦  «        dddœddi¬¦  «        g}t          d	g ¦  «        d t          d
t          | d¦  «        dz
  ¦  «        …         D ]©}t          ||                     d¦  «        dk    rdnd¬¦  «        }|d         dk    rd\  |d<   |d<   | 	                    t          ||                     dd¦  «        |                     d¦  «        s|                     d¦  «        r|nd ¦  «        ¦  «         Œª|S )NÚwidget_ai_recentr†   zAI chatzaction=ai_chat_recommendationzDefaultAddonsSearch.png)r¡   rª   r5   r¬   zai_recommendations.jsonrM  é   r=   ro   rr   rq   r?  )ro   )r=   r=   r7   r8   r   rk   rl   )r   r±   rL   rb   r'   r   Úminrh   r•  r´   rC  )rf   r†   rE   ru   s       r   rÄ  rÄ  P  sT  € ÝŒNÐ-°°¸"×/AÒ/AÀ'Ñ/JÔ/JÑKÔK€EÝ�9�hÐ'FÑGÔGØ 9ÐD]Ð^Ð^Ø  )Ð,ð.ñ .ô .ð /€Eõ Ð5°rÑ:Ô:Ð;[½CÀÅFÈ6ÐSUÑDVÔDVÐYZÑDZÑ<[Ô<[Ð;[Ô\ð ð ˆÝ�U°5·9²9¸\Ñ3JÔ3JÈdÒ3RÐ3R x xÐX_Ð`Ñ`Ô`ˆØ�Ô (Ò*Ð*Ø04Ñ-ˆE�(‰O˜U 9Ñ-Ø�Š•[ ¨¯	ª	°'¸2Ñ(>Ô(>È%Ï)Ê)ÐT]ÑJ^ÔJ^Ð@|Ðbg×bkÒbkÐlpÑbqÔbqÐ@|ÀÀÐx|Ñ}Ô}Ñ~Ô~Ð~Ð~Ø€Lr!   c                 óB  — ddl m} ddlm} t	          t
          j                             d| dz   ¦  «        i ¦  «        }t          |t          ¦  «        r| 
                    d¦  «        nd}	 t          j        ¦   «         t          | 
                    d¦  «        pd¦  «        z
  | 
                    | d	¦  «        k    }n# t          t          t          f$ r d
}Y nw xY wt          |t           ¦  «        r|r|                     | g¦  «         t          |t           ¦  «        r|ng S )zNServe the last network snapshot, requesting absent/stale data without waiting.r   rþ   )ÚSCHEDULEr   z.jsonrE   NÚbuilti€Q T)r	  rÿ   Úwcs.skin.refresherrÈ  r   r   r   r   Ú
isinstancer•  rL   ÚtimerV   ÚAttributeErrorrQ   r   Úlistr
  )r   rÿ   rÈ  rý   rE   Ústales         r   Ú_cachedrÐ  ]  s#  € à Ð Ð Ð Ð Ð Ø+Ð+Ð+Ð+Ð+Ð+Ý•b”g—l’l <°¸±Ñ@Ô@À"ÑEÔE€DÝ!+¨Dµ$Ñ!7Ô!7ÐAˆD�HŠH�WÑÔÐ¸T€EðÝ”	‘”�e D§H¢H¨WÑ$5Ô$5Ð$:¸Ñ;Ô;Ñ;¸x¿|º|ÈDÐR[Ñ?\Ô?\Ò\ˆˆøÝ�I¥zÐ2ð ð ð Øˆˆˆðøøøå�e�TÑ"Ô"ð   eð  Ø�Š˜˜ÑÔÐÝ˜u¥dÑ+Ô+Ð3ˆ5ˆ5°Ð3s   Á+AB< Â<CÃCc                 ó    ‡— t          j        ||pi                      d¦  «        ¦  «        Šˆfd„| d t          |d ¦  «        …         D ¦   «         S )Nr†   c                 óŠ   •— g | ]?}t          ||                     d ¦  «        s|                     d¦  «        r‰nd¬¦  «        ‘Œ@S )rk   rl   N)r†   )rC  rL   )r-   r  r†   s     €r   r�   z%_entries_to_items.<locals>.<listcomp>n  s[   ø€ ð 5ð 5ð 5Øõ ˜¨1¯5ª5°Ñ+;Ô+;Ð!U¸q¿uºuÀT¹{¼{Ð!U  ÐQUÐVÑVÔVð 5ð 5ð 5r!   )r   r±   rL   rh   )rv  r½   rf   r†   s      @r   Ú_entries_to_itemsrÓ  l  sf   ø€ ÝŒN˜3  ¨2× 2Ò 2°7Ñ ;Ô ;Ñ<Ô<€Eð5ð 5ð 5ð 5ØÐ2�f V¨TÑ2Ô2Ð2Ô3ð5ñ 5ô 5ð 5r!   c                 ó>   — t          t          d¦  «        d| ¦  «        S )NÚwidget_mycinema_recommended©rÓ  rÐ  r}   s    r   rÕ  rÕ  r  s   € Ý�WÐ%BÑCÔCÐEbÐdjÑkÔkÐkr!   c                 ó>   — t          t          d¦  «        d| ¦  «        S )NÚwidget_tmdb_popular_moviesrÖ  r}   s    r   rØ  rØ  v  ó   € Ý�WÐ%AÑBÔBÐD`ÐbhÑiÔiÐir!   c                 ó>   — t          t          d¦  «        d| ¦  «        S )NÚwidget_tmdb_popular_seriesrÖ  r}   s    r   rÛ  rÛ  z  rÙ  r!   c                 ó¶  — g }t          d¦  «        d t          | d ¦  «        …         D ]°}d                     t          t	          |                     dd¦  «        ¦  «        t	          |                     dd¦  «        ¦  «        ¦  «        }|                     t          |                     dd¦  «        |d|                     dd¦  «        id¬	¦  «        ¦  «         Œ±|S )
NÚwidget_kraska_rootz3{}?action=kraska_browse_path&sc_path={}&sc_title={}r   r   r5   r¡   úDefaultFolder.pngT©rZ   r\   )rÐ  rh   r$   r%   r   rL   r´   rb   )rf   rE   ru   Úurls       r   rÝ  rÝ  ~  sÛ   € Ø€EÝÐ-Ñ.Ô.Ð/Dµ°v¸tÑ0DÔ0DÐ/DÔEð )ð )ˆØC×JÒJÝ•*˜UŸYšY v¨rÑ2Ô2Ñ3Ô3µZÀÇ	Â	È'ÐSUÑ@VÔ@VÑ5WÔ5WñYô Yˆà�Š•U˜5Ÿ9š9 W¨bÑ1Ô1°3¸VÀUÇYÂYÈvÐWjÑEkÔEkÐ<lØ"&ð(ñ (ô (ñ 	)ô 	)ð 	)ð 	)à€Lr!   ))u   ÄŒSFD FilmyÚcsfd_movies_menu)u   ÄŒSFD SeriÃ¡lyÚcsfd_series_menu)u   NejlepÅ¡Ã­ filmy ÄŒSFDÚcsfd_top_movies)u   NejlepÅ¡Ã­ seriÃ¡ly ÄŒSFDÚcsfd_top_seriesc                 óv  ‡
— | pi                       dd¦  «        Š
‰
dk    rCddlm} |                     t          d¦  «        }d„ |dt          | d¦  «        …         D ¦   «         S t          t          j         	                    d	d
¦  «        i ¦  «        }g }t          |t          ¦  «        r"ˆ
fd„|                      dg ¦  «        D ¦   «         ng }|dt          | d¦  «        …         D �].}|                      dd¦  «        }t          |                      dd¦  «        t          |                      dd¦  «        ¦  «        |||dœ|                      dd¦  «        |                      d¦  «        |                      dd¦  «        |                      d¦  «        ‰
dk    rdnddœ¬¦  «        }‰
dv rT|                      d¦  «        r?|                     d‰
¦  «         |                     dt          |d         ¦  «        ¦  «         |                     |¦  «         �Œ0ddlm}	 |	                     d„ |D ¦   «         ¦  «         |S ) zjRows of window 1120: kind=movie|tv|person from the last search cache, kind=history from the addon history.r„   r   rð   r   )Ú	user_datazsearch_history_universal.jsonc                 ó–   — g | ]F}t          |t          d                      t          |¦  «        ¦  «        ¦  «        ddid|i¬¦  «        ‘ŒGS )zaction=skin_search&query={}r¡   zDefaultSearch.pngr5   r¬   )rb   r'   r$   r   )r-   Úqs     r   r�   z!widget_search.<locals>.<listcomp>“  sq   € ð uð uð uØPQõ �a�Ð"?×"FÒ"FÅzÐRSÁ}Ä}Ñ"UÔ"UÑVÔVØ!Ð#6Ð7¸wÈ¸lðLñ Lô Lð uð uð ur!   Nr   zsearch_current.jsonc                 óF   •— g | ]}|                      d ¦  «        ‰k    ¯|‘ŒS )r„   r”   )r-   ru   r„   s     €r   r�   z!widget_search.<locals>.<listcomp>—  s0   ø€ ÐUÐUÐU˜¸5¿9º9ÀVÑ;LÔ;LÐPTÒ;TÐ;TˆuÐ;TÐ;TÐ;Tr!   rE   é(   rm   r5   rj   r>  r6   r9   r>   rr   r?  r¼  )r5   r6   r9   r>   r;   r¬   ri  rk   r@  rA  )Úmenuc                 ó<   — g | ]}|                      ¦   «         |d f‘ŒS )F)ÚgetPath)r-   r‘   s     r   r�   z!widget_search.<locals>.<listcomp>¤  s'   € Ð>Ð>Ð>°1˜Ÿ	š	™œ Q¨Ð.Ð>Ð>Ð>r!   )rL   Úwcsræ  Úload_search_historyr   rh   r   r   r   r   rË  r•  rb   r'   rX   rt   r´   r˜   rë  Úattach_items)rf   ræ  Úqueriesrý   rE   rv  ru   rm   r^   rë  r„   s             @r   Úwidget_searchrò  �  st  ø€ àˆL�b×Ò˜f bÑ)Ô)€DØˆyÒÐØ!Ð!Ð!Ð!Ð!Ð!Ø×/Ò/µÐ9XÑYÔYˆðuð uØU\Ð]rÕ^dÐekÐmqÑ^rÔ^rÐ]rÔUsðuñ uô uð 	uå•b”g—l’l <Ð1FÑGÔGÈÑLÔL€DØ€EÝYcÐdhÕjnÑYoÔYoÐwÐUÐUÐUÐU $§(¢(¨7°BÑ"7Ô"7ÐUÑUÔUÐUÐuw€GØÐ,�& ¨Ñ,Ô,Ð,Ô-ð 
ñ 
ˆØ—’˜8 RÑ(Ô(ˆÝ�U—Y’Y˜w¨Ñ+Ô+­X°e·i²iÀÀrÑ6JÔ6JÑ-KÔ-KØ#)°VÀVÐLÐLØ$)§I¢I¨g°rÑ$:Ô$:ÀEÇIÂIÈfÑDUÔDUØ#(§9¢9¨V°RÑ#8Ô#8ÀEÇIÂIÈhÑDWÔDWØ37¸4²<°<¨¨ÀXðOð OðPñ Pô Pˆð
 �?Ð"Ð" u§y¢y°Ñ';Ô';Ð"Ø×Ò˜_¨dÑ3Ô3Ð3Ø×Ò˜_­c°%¸	Ô2BÑ.CÔ.CÑDÔDÐDØ�Š�TÑÔÐÑØ!Ð!Ð!Ð!Ð!Ð!Ø×ÒÐ>Ð>¸Ð>Ñ>Ô>Ñ?Ô?Ð?Ø€Lr!   c           	      ót   — d„ t           d t          | t          t           ¦  «        ¦  «        …         D ¦   «         S )Nc           	      óp   — g | ]3\  }}t          |d                      t          |¦  «        ddid¬¦  «        ‘Œ4S )z{}?action={}r¡   rÞ  Trß  )rb   r$   r%   )r-   r5   r�  s      r   r�   z&widget_csfd_charts.<locals>.<listcomp>©  sZ   € ð Qð Qð QÙ��võ �%˜×.Ò.­t°VÑ<Ô<À6ÐK^ÐB_ÐhlÐmÑmÔmð Qð Qð Qr!   )ÚCSFD_CHARTSrh   rµ   r}   s    r   Úwidget_csfd_chartsrö  ¨  sF   € ðQð QÝ!,Ð-N­f°V½SÅÑ=MÔ=MÑ.NÔ.NÐ-NÔ!OðQñ Qô Qð Qr!   c                 ób   — i | ],\  }}|                      d ¦  «        ¯t          |¦  «        ¯)||“Œ-S )Úwidget_)r   Úcallable)r-   r   Úfuncs      r   r0   r0   ­  sL   € ð =ð =ð =™*˜$ Ø�oŠo˜iÑ(Ô(ð=Ý-5°d©^¬^ð=ˆ4�ð =ð =ð =r!   rÝ  rö  rò  c                 ó0   — t          |          |pi ¦  «        S )zFThe shared legacy-row builder for Home listings and migration warm-up.)ÚWIDGETS)r½   rf   s     r   Úbuildrý  µ  s   € å�3Œ<˜˜ "Ñ%Ô%Ð%r!   c           	      ó®  ‡— t          j        ¦   «         }|                     dd¦  «        }|dk    rƒt          j        | dt          j        d¬¦  «        ¦  «         |                     dd¦  «        }|r@t          j        d 	                    t                               d	¦  «        |¦  «        ¦  «         d S g }|t          v ro	 t          ||¦  «        }n]# t          $ rP}t          j        d
 	                    |t!          |¦  «        j        |¦  «        t          j        ¦  «         Y d }~nd }~ww xY w|t&          v Št          j        | ˆfd„|D ¦   «         t+          |¦  «        ¦  «         t          j        | dd¬¦  «         t          j        d 	                    |t+          |¦  «        t          j        ¦   «         |z
  dz  ¦  «        t          j        ¦  «         d S )Nr�  r   Úskin_runFT)r*   rj   zRunPlugin({}?{})r   u#   [MilionÃ¡Å™ Skin] {} failed: {}: {}c                 óp   •— g | ]2}|                      ¦   «         |‰p|                     d ¦  «        dk    f‘Œ3S )rA   rB   )rí  ÚgetProperty)r-   r‘   r\   s     €r   r�   zrun.<locals>.<listcomp>Ë  sA   ø€ Ð)}Ð)}Ð)}Ðrs¨1¯9ª9©;¬;¸¸6Ð;lÀQÇ]Â]ÐSdÑEeÔEeÐilÒElÐ*mÐ)}Ð)}Ð)}r!   )Ú	succeededÚcacheToDiscu-   [MilionÃ¡Å™ Skin] {} -> {} items in {:.0f} msiè  )rÌ  Úperf_counterrL   Ú
xbmcpluginÚsetResolvedUrlrC   rD   r¸   Úexecutebuiltinr$   r%   r�  rü  rý  r  r   r/  r  ÚLOGERRORÚFOLDER_WIDGETSÚaddDirectoryItemsrµ   ÚendOfDirectoryÚLOGDEBUG)r   rf   Ústartedr�  ÚtargetrE   r$  r\   s          @r   rj   rj   º  sä  ø€ ÝÔÑ!Ô!€GØ�ZŠZ˜ "Ñ%Ô%€FØ�ÒÐåÔ! &¨%µÔ1AÈDÐ1QÑ1QÔ1QÑRÔRÐRØ—’˜E 2Ñ&Ô&ˆØð 	UÝÔÐ 2× 9Ò 9½$¿+º+ÀcÑ:JÔ:JÈFÑ SÔ SÑTÔTÐTØˆØ€EØ•ÐÐð	sÝ˜& &Ñ)Ô)ˆEˆEøÝð 	sð 	sð 	sÝŒHÐ:×AÒAÀ&Í$ÈsÉ)Ì)ÔJ\Ð^aÑbÔbÕdhÔdqÑrÔrÐrÐrÐrÐrÐrÐrøøøøð	søøøà•~Ð%€FÝÔ  Ð)}Ð)}Ð)}Ð)}Ðw|Ð)}Ñ)}Ô)}Ý!$ U¡¤ñ-ô -ð -åÔ˜f°À%ÐHÑHÔHÐHÝ„HÐ<×CÒCØ•�E‘
”
�TÔ.Ñ0Ô0°7Ñ:¸dÑBñDô DÝEIÄ]ñTô Tð Tð Tð Ts   Ã C Ã
D+ÃAD&Ä&D+c                 ó¶   — ddl m} t          | p|j        ¦  «        }|                     |¦  «         |                     ||j        |j        z  z  d¬¦  «         dS )zQDirty only affected rows; retain snapshots until background replacement succeeds.r   rþ   T)ÚforceN)r	  rÿ   rG   ÚALL_ROWSÚchangedr
  ÚNETWORK_ROWSÚ
VINYL_ROWS)Únamesrÿ   r)  s      r   Ú
invalidater  Ò  sg   € à Ð Ð Ð Ð Ð ÝˆuÐ(˜Ô(Ñ)Ô)€DØ‡O‚O�DÑÔÐØ‡O‚O�D˜GÔ0°7Ô3EÑEÑFÈd€OÑSÔSÐSÐSÐSr!   )NNFT)N)NN)r   N)Or  r   r   rn  rÌ  Úurllib.parser   r   r¸   r‡  rC   r  Úxbmcvfsr˜   r   r	  r   r   r‰  r$   r%   ÚtranslatePathr   r   r   Ú	CACHE_DIRr   ÚTMDB_BACKDROPÚ	MAX_ITEMSr   r    r'   rb   rh   rv   rz   r�   r‡   rŸ   r|   rÄ   r²   r³   r*  r<  rC  rG  rd  rw  rŠ  r†  r|  rŒ  r“  r™  rœ  r¥  r§  r¿  ry  r{  rÄ  rÐ  rÓ  rÕ  rØ  rÛ  rÝ  rõ  rò  rö  rÎ  ÚglobalsrE   rü  r	  rý  rj   r  r,   r!   r   ú<module>r     s²  ððð ð €€€Ø 	€	€	€	Ø €€€Ø €€€Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *à €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à"€Ø×Ò˜XÑ&Ô&€Ø
ˆ'Ô
Ð B× IÒ IÈ(Ñ SÔ SÑ
TÔ
T€ØŒG�LŠL˜ ,Ñ/Ô/€	Ø,€Ø2€Ø€	ð
ð ð ðð ð ðRð Rð Rð
#ð #ð #ð #ðL  	ð 
$ð 
$ð 
$ð 
$ðOð Oð Oð*að að að aðqð qð qð qð_ð _ð _ðð ð ðð ð ð0Ið Ið Iða\ð a\ð a\ð a\ð a\ñ a\ô a\ð a\ðH"ð "ð "ðJ3ð 3ð 3ð 3ðlcð cð cðð ð ð ð0Hð Hð Hð Hðð ð ð ð>ð ð ð ð$ g€	Ø =Ð =Ð =Ð =Ð =Ð =ðð ð ð$ð ð ð,.ð .ð .ð	Að 	Að 	Að 	Að*ð *ð *ð *ðZð ð ð.(ð (ð (ð (ð)ð )ð )ð )ð
ð 
ð 
ð 
ð4ð 4ð 4ð5ð 5ð 5ðlð lð lð lðjð jð jð jðjð jð jð jðð ð ð ðe€ð
ð ð ð ð6Qð Qð Qð Qð
=ð =¨¨¨W¨W©Y¬Y¯_ª_Ñ->Ô->Ñ(?Ô(?ð =ñ =ô =€à&Ð(<Ð=€Ø(€ˆÑ ð
&ð &ð &ð &ð
Tð Tð Tð0Tð Tð Tð Tð Tð Tr!   