Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
ó
c_c@sJddlmZmZmZddlmZddlmZm	Z	m
Z
mZmZm
Z
mZmZddlmZmZmZddlmZddlmZddlmZmZddlZddlZddlZyddl Z Wne!k
rÿnXddl"Z"ddl#Z#ddl$Z$ddl%Z%yddl&Z&Wne!k
rSnXyHydd	l'm(Z(Wn!e!k
rŽdd	l(m(Z(nXddl)Z)Wne!k
r¯nXdd
l*m+Z+m*Z*m,Z,ddl-m.Z.d„Z/d
„Z0dej1fd„ƒYZ2dej3fd„ƒYZ4ddd„ƒYZ5ddd„ƒYZ6dS(iÿÿÿÿ(tTranslateTXTt
GetIPTVNotifytGetIPTVSleep(tstrwithmeta(tprintDBGtprintExctIsHttpsCertValidationEnabledtbyteifytGetDefaultLangtrmt	UsePyCurltGetJSScriptFile(tIsMainThreadtIsThreadTerminatedtSetThreadKillable(tjs_execute_ext(tph(tloadstdumpsN(tStringIO(turljointurlparset
urlunparse(thexlifycCs(t|ƒ}tjd|ƒ}|jƒS(Ntfileobj(RtgziptGzipFiletread(tdatatbuftf((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt
DecodeGzipped$scCsXtƒ}tjddd|ddƒ}|j|ƒ|jƒ|jƒ}|jƒ|S(NtmodetwbRt
compressleveli(RRRtwritetclosetgetvalue(RRtgzftencoded((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt
EncodeGzipped)s	


t
NoRedirectioncBs)eZd„ZeZeZeZeZRS(cCs1tj|||jƒƒ}||_||_|S(N(turllibt
addinfourltget_full_urltstatustcode(tselftreqtfpR.tmsgtheaderstinfourl((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pythttp_error_3023s		(t__name__t
__module__R5thttp_error_300thttp_error_301thttp_error_303thttp_error_307(((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyR)2s
	tMultipartPostHandlercBs0eZejjdZd„Zd„ZeZRS(i
cCsc|jƒ}|dk	r_t|ƒtkr_|j|ƒ\}}|jd|ƒ|j|ƒn|S(NsContent-Type(tget_datatNonettypetstrtencode_multipart_formdatatadd_unredirected_headertadd_data(R/trequestRtcontent_type((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pythttp_request@sc	Csªd}d}g}xP|D]H\}}|jd|ƒ|jd|ƒ|jdƒ|j|ƒqW|jd|dƒ|jdƒ|j|ƒ}d|}||fS(Ns+-----------------------------14312495924498s
s--s)Content-Disposition: form-data; name="%s"ts multipart/form-data; boundary=%s(tappendtjoin(	R/tfieldstLIMITtCRLFtLtkeytvaluetbodyRE((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRAHs


(R6R7turllib2tHTTPHandlert
handler_orderRFRAt
https_request(((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyR<=s		tCParsingHelpercBsCeZed„ƒZeded„ƒZeed„ƒZeeed„ƒZeeed„ƒZ	eeed„ƒZ
eeed„ƒZeed„ƒZeeed	„ƒZ
eed
ed„ƒZeeed„ƒZeed
ed
„ƒZedd„ƒZedd„ƒZedd„ƒZed„ƒZRS(cCs.idd6}d}x|dt|ƒkr ||jdƒsR||jdƒr²|d7}tj||dƒ\}}}d|kr”g|d<n|dj|ƒ||7}n[||jdƒsØ||jd	ƒrï|d8}|d7}n|dc||7<|d7}|dkrPqqW|||fS(
NRGtdatiis<uls<litlists</ul>s</li>(tlent
startswithRUt	listToDirRH(tcListtidxtcTreetdeeptnTreetnDeep((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRZZs$
&


&


icCs%tj|||rtjnd|ƒS(Ni(Rtsearcht
IGNORECASE(RtpatterntgrupsNumt
ignoreCase((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetSearchGroupsoscCsë|j|ƒ}d|ks0d|jdƒkr:tdfS|j||jdƒƒ}d|kswd|jdƒkrtdfS|r·t||jdƒ|jdƒ|jdƒ!fSt||jdƒ|jdƒ|jdƒ!fSdS(NiÿÿÿÿiRG(RaR>tstarttFalsetendtTrue(Rtpattern1tpattern2twithMarkerstmatch1tmatch2((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetDataBeetwenReMarkersss!
!
0cCsOd}|r#|tjtjBO}n|s9|tjO}ntj||||ƒS(Ni(RtSTART_EtEND_ERbtfind(Rtmarker1tmarker2Rmt
caseSensitivetflags((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetDataBeetwenMarkersscCsOd}|r#|tjtjBO}n|s9|tjO}ntj||||ƒS(Ni(RRqRrRbtfindall(RRtRuRmRvRw((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetAllItemsBeetwenMarkers†scCsOd}|r#|tjtjBO}n|s9|tjO}ntj||||ƒS(Ni(RRqRrRbtrfindall(RRtRuRmRvRw((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytrgetAllItemsBeetwenMarkersscCsOd}|r#|tjtjBO}n|s9|tjO}ntj||||ƒS(Ni(RRqRrRbtrfind(RRtRuRmRvRw((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytrgetDataBeetwenMarkers2”scCs‘|j|ƒ}d|kr%tdfS|j||t|ƒƒ}d|krWtdfS|rp|t|ƒ}n|t|ƒ}t|||!fS(NiÿÿÿÿRG(R}RhRXRj(RRtRuRmtidx1tidx2((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytrgetDataBeetwenMarkers›s

cCsOd}|r#|tjtjBO}n|s9|tjO}ntj||||ƒS(Ni(RRqRrRbRs(Rtnode1tnode2t	withNodesRvRw((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetDataBeetwenNodes©siÿÿÿÿcCsUd}|r#|tjtjBO}n|s9|tjO}ntj||||d|ƒS(Nitlimits(RRqRrRbRy(RR‚RƒR„tnumNodesRvRw((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetAllItemsBeetwenNodes°scCsOd}|r#|tjtjBO}n|s9|tjO}ntj||||ƒS(Ni(RRqRrRbR}(RR‚RƒR„RvRw((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytrgetDataBeetwenNodes·scCsUd}|r#|tjtjBO}n|s9|tjO}ntj||||d|ƒS(NiR†(RRqRrRbR{(RR‚RƒR„R‡RvRw((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytrgetAllItemsBeetwenNodes¾stwcCs0|}t||ƒ}|j|ƒ|jƒdS(N(topenR#R$(tfileRR t	file_patht	text_file((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytwriteToFileÇs
cCs”i dd6dd6dd6dd6dd	6d
d6dd
6dd6dd6dd6dd6dd6dd6dd6dd6dd6dd 6dd!6dd"6d#d$6d%d&6dd'6d
d6d(d)6d(d*6dd+6dd,6d-d.6dd/6dd6d0d16d0d26}|jd3ƒ}d|kr||}ntjd4|ƒ}g}xU|D]M}t|ƒd5krm|j|ƒ}|rz|j|ƒqzq-|j|ƒq-Wd6j|ƒjd3ƒS(7NuauąucućuęulułunuńuouóusuśuzużuźuAuĄuCuĆuEuĘuLuŁuNuŃuOuÓuSuŚuZuŻuŹuáueuéuiuíuñuuuúuüuÁuÉuIuÍuÑuUuÚuÜsutf-8tNFCi€RG(	tdecodeR>tunicodedatat	normalizetordtgetRHRItencode(ttxtR\tPOLISH_CHARACTERStnrmtxttret_strtitem((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetNormalizeStrÏs B?14

cCstj||ƒjƒS(N(RURtisalpha(R˜R\((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRžâscCs
tj|ƒS(N(Rt
clean_html(R@((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytcleanHtmlStræsN(R6R7tstaticmethodRZRhRfRjRpRxRzR|R~RR…RˆR‰RŠRR>RRžR (((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRUYs<
tcommoncBsÄeZdZeZeZedd„ƒZeed„ƒZ	ee
d„ƒZedd„ƒZed„ƒZ
ed„ƒZd	e
ed
„Zd„Zd„Zed
„Zee
d„Zgeee
d„Zd„Zee
d„Zee
d„Zgeee
d„Zied„Zied„Ze
e
d„Zied„Zied„Zied„Zied„Z d„Z!d„Z"ied„Z#d„Z$d„Z%d „Z&d!gd"„Z'RS(#srMozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36tfirefoxcCs\|dkrd}n|dkr*d}nd}i|d6dd6d	d
6dd6}t|ƒS(
NR£sHMozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0t
iphone_3_0sMozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16srMozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36s
User-Agents?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8tAccepts
gzip, deflatesAccept-EncodingitDNT(tdict(tbrowsertuatHTTP_HEADER((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetDefaultHeaderïs		

cCsddlm}|j}i}i}d}t|tƒrýd|krS||d<n
i|d<x5|jD]*}||krg|j||d|<qgqgWdt|dƒkr´|}nd|jkr×|jd|d<nd|jkrý|jd|d<qýn||fS(	Niÿÿÿÿ(tDMHelpertheaderitiptv_proxy_gatewayt
proxy_gatewaytiptv_http_proxyt
http_proxy(t+Plugins.Extensions.IPTVPlayer.iptvdm.iptvdhR¬tHANDLED_HTTP_HEADER_PARAMSR>t
isinstanceRtmetaRX(turltbaseHeaderOutParamsR¬R³t	outParamst	tmpParamstpostDataRN((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetParamsFromUrlWithMetaüs&	

	cCs=t|ƒ}|r'djd|ƒ}ndjd|ƒ}|S(Ns{uri.netloc}turis{uri.scheme}://{uri.netloc}/(Rtformat(R¶t
domainOnlyt
parsed_uritdomain((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt
getBaseUrls
shttp://fake/cCs|s
dS|jdƒr&|d}n|}tj|ƒ}|jdƒrq|jddƒd}|d|}n›|jdƒr£|jddƒd}||}ni|jdƒrÃ||d}nIdt|ƒkrd|kr||krú||}qt||ƒ}n|S(	NRGs./is//s://it:t/(RYR¢RÁtsplitRXR(R¶tmainUrltcurrUrltproto((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt
getFullUrls&


cCs|jdƒp|jdƒS(Nshttp://shttps://(RY(R¶((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt
isValidUrl2scs)‡fd†‰g}ˆ||dƒ|S(Ncs¿t|tƒr[x©|jƒD]8\}}|r>d||fn|}ˆ|||ƒqWn`t|tƒr¨xNtt|ƒƒD]$}ˆ|||d||fƒq}Wn|j||fƒdS(Ns%s[%s](R´R§t	iteritemsRWtrangeRXRH(tqueryRt
key_prefixRNROR\(t_process(sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRÎ8s%RG((RÌt_query((RÎsO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytbuildHTTPQuery6s
RGcCsO||_||_i|_i|_d|_d|_|sKtdƒ‚ndS(NssYou should stop use parameter useMozillaCookieJar it change nothing, because from only MozillaCookieJar can be used(tproxyURLtuseProxytgeolocationRµR>tcurlSessiontpyCurlAvailablet	Exception(R/RÑRÒtuseMozillaCookieJar((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt__init__Fs						cCsp|j|tƒ}g}|jtdƒ|ƒ|jtdƒ|ƒ|dkrqtƒrq|jtdƒƒnÒt}y[tjƒ}td|gƒ|dd@rÑ|dj	d	ƒrÑ|d
dkrÑt}nWnt
k
rìtƒnX|r,tƒs|jtdƒƒqC|jtd
ƒdƒn|jtdƒdƒt
ƒjdj|ƒdd||dƒdS(NsHTTPS connection error "%s"
sUIt looks like your current configuration do not allow to connect to the https://%s/.
tverifysfYou can disable HTTPS certificates validation in the E2iPlayer configuration to suppress this problem.susePyCurl VERSION: %siiis7.6iswolfSSL/3.15.3sIYou can enable PyCurl in the E2iPlayer configuration to fix this problem.s/Please report this problem to the developer %s.siptvplayere2@gmail.coms;You can install PyCurl package from %s to fix this problem.s http://www.iptvplayer.gitlab.io/s
terrori(i€(RÁRjRHt_RRhtpycurltversion_infoRRYRÖRR
RtpushRI(R/R?R¶R2RÀtmessagestpyCurlInstalledtverInfo((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytreportHttpsErrorQs(1

	cCs™t}tƒr•|jdkr‰yDtjƒ}td|gƒ|dd@rXt|_n	t|_Wq‰tk
r…t|_t	ƒq‰Xn|j}n|S(NsusePyCurl VERSION: %siiii€(
RhR
RÕR>RÜRÝRRjRÖR(R/tbRetRá((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt	usePyCurlks	

	cCsd|jkrf|jdƒ\}}|rfyt|ƒd|jd<Wqctk
r_tƒqcXqfn|jjddƒjƒS(NtcountryCodeshttp://ip-api.com/jsonRG(RÓtgetPaget
json_loadsRÖRR–tlower(R/RètstsR((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetCountryCodes
c
Cstjƒ}t|ƒ}|jƒ}|jƒx¸tt|ƒƒD]¤}t}||jdƒ}	t|	ƒdkrxqAn|	dj	dƒr¦|	dd|	d<t
}n|	ddkrÉd|	d<t
}n|rAdj|	ƒ||<qAqAW|jt
dj|ƒƒ|d	|d
|ƒ|S(Ns	iis
#HttpOnly_i
it0RGtignore_discardtignore_expires(t	cookielibtMozillaCookieJarRŒt	readlinesR$RËRXRhRÄRYRjRIt_really_loadR(
R/t
cookiefilet
ignoreDiscardt
ignoreExpirestcjRtlinesR\tlineNeedFixRJ((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt_pyCurlLoadCookie‹s&
	
	+c	CsøyØg}|jƒr-|j|||ƒ}ntjƒ}|j|d|ƒxH|D]@}|j|krSd|ksƒ|j|krS|j|ƒqSqSWx*|D]"}|j|j	|j
|jƒqžW|j|d|ƒWntk
rót
ƒtSXtS(NRì(RäRøRîRïtloadtnameR>RHtclearRÀtpathtsaveRÖRRhRj(	R/Ròt
leaveNamestremoveNamesRóRôttoRemoveRõtcookie((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytclearCookieŸs 
*
 
cCs|j|ƒ}|j|dƒS(NRG(tgetCookieItemsR–(R/RòRœtcookiesDict((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt
getCookieItem²scCsld}yG|jƒr-|j|||ƒ}ntjƒ}|j|d|ƒWntk
rgtƒnX|S(NRì(R>RäRøRîRïRùRÖR(R/RòRóRôRõ((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt	getCookie¶s
cCs_i}y:|j|||ƒ}x|D]}|j||j<q%WWntk
rZtƒnX|S(N(RRORúRÖR(R/RòRóRôRRõR((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRÂs

c
Cs©d}y„|j|||ƒ}xh|D]`}dt|ƒkrO||krOq%n||}	|rqtj|	ƒ}	n|d||	f7}q%WWntk
r¤tƒnX|S(NRGis%s=%s; (RRXR*tunquoteRÖR(
R/RòtallowedNamesRRóRôtretRRúRO((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetCookieHeaderÌs


cs¬
tƒrUtdƒ}tdƒ}tƒjdj||gƒddƒtdƒ‚ndˆkrntˆd<ni|_|j}d}t	}t
ƒ‰ˆjdgƒ‰d‰tg‰ˆjd	d
ƒ‰i‰‡‡fd†}	‡‡fd†}
‡‡‡‡‡‡fd
†}d„}yòˆjddƒ}
dˆkrGˆd}n	|j}dˆkriˆd}n(d|j
kr„|j
}n
i|d6}d|krª||d<ntdtˆƒƒtdt|ƒƒdˆkrôtˆddƒ‰ntt	ƒd|jkrtjƒ}nYˆjdt	ƒrY|j}d|_|jƒtjƒ}n|j}d|_|jƒˆjdt	ƒr|jtjdƒng}x§|D]Ÿ}|jƒ}|dkrâ|jtj||ƒqª|dkr|jtj||ƒqª|dkr.|jtj||ƒqª|jd|||fƒqªWt|ƒro|jtj|ƒn|jtj dƒdˆjddƒkrÒ|j!ˆdƒ}d|krÒ|jtj"|ƒqÒnd ˆkrd!ˆkrd"ˆksd#ˆkrtˆd <nˆjd t	ƒrd}xXˆjd$iƒj#ƒD]>}td%|ˆd$|fƒ|d&|ˆd$|f7}q@W|dkr¤|jtj|ƒnˆjd"t	ƒrØ|jtj$ˆjd!dƒƒnˆjd#t	ƒr|jtj%ˆjd!dƒƒqn|
dkrW|jtj&|
ƒ|jtj'|
ƒ|jtj(d'ƒnˆjd(t	ƒs¥|jtj)dƒ|jtj*dƒ|jtj+d)ƒnt,ƒsê|jtj-d*ƒ|jtj.d*ƒ|jtj/d*ƒn&|jtj0d+ƒ|jtj1d+ƒ|j2r%|j3}nd}d,ˆkrDˆd,}nd|krptd-ƒ|jtj4|ƒn|}ˆjd.dƒ}|dkr²|j5t6j7|dƒƒ}ntd/|ƒ|jtj8|ƒd|krrtd0t|ƒƒˆjd1t	ƒr|jtj9|ƒqrˆjd2t	ƒrStd3ƒ|}|jtj:|ƒqr|jtj9t6j;|ƒƒn|jtj<|	ƒˆr¡|jtj=|ƒn5ˆd*krÃ|jtj=|
ƒn|jtj>ˆƒ|jtj?t	ƒ|jtj@|ƒ|jtjAdƒtBƒs÷	ˆd*krqy|jCƒWq{tjDk
rm}|d*tjEkrc|‚qntFƒq{Xn
|jCƒ|jGtjHƒ|d4<|jGtjIƒ|d5<|jGtjJƒ|d6<ˆjd t	ƒr
	ˆjd#t	ƒr
	|jtjKd7ƒ|jtjKd8ƒn|jƒ||_ttƒ|jL|ˆd9ˆjd:ƒƒˆdr_	ˆjMƒ}nd}|jNˆ||ƒ\}}|d5d;krî	ˆjd<dBdCgƒ}xI|D]8}|d5|d*kr¯	|d5|dkr¯	t}Pq¯	q¯	Wq÷	t}nˆr

ˆjƒnWnRtjDk
rH
}|d*t|dƒf|d?<tFƒntk
r_
tFƒnXttƒtd@||fƒˆjdAt	ƒr¢
tO||ƒ}n||fS(DNs=It is not allowed to call getURLRequestData from main thread.s>You should never perform block I/O operations in the __init__.s\sRÚi(sWrong usage!treturn_datatcheck_first_bytest
max_data_sizeiÿÿÿÿcs×d|krdˆkr‰|dkrGdˆkr4dSˆjddƒq‰|jdƒr‰|jddƒd	dd!dkr‰tˆd<q‰ndS|jddƒ\}}|jƒ}|jƒ}|jƒ}|ˆ|<dS(NRÂis
s
tnsHTTP/s 30iiÿÿÿÿt1t2t3t7(s
s
(RRRR(tpopR>RYRÄRjtstripRè(t
headerLineRúRO(tmaxDataSizetresponseHeaders(sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt_headerFunctionðs2cs'ˆj|ƒˆˆjƒkr#dSdS(Ni(R#ttell(ttoWriteData(tbufferR(sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt_breakConnections
cs‡ˆdrtˆd<dˆkrjˆdˆjddƒjddƒdkrjtdˆjddƒƒdSdˆkrˆjddƒjddƒd	}yYt}x(ˆdD]}||kr¬t}Pq¬q¬W|sðtd
ˆjddƒƒdSWqtk
rtƒdSXqntˆƒrƈj|ƒd}t}ˆj
ƒ}x^ˆD]V}t|ƒt|ƒkr‰|j|ƒr¡t}ˆ2Pq¡qK|j|ƒrKt}qKqKW|sÆtdt|ƒƒdSnˆdkr]dtˆƒkr]yZˆj
ƒdkr!ˆj
ƒdkr!ˆjˆj
ƒƒn|dkr=ˆj|ƒnWq]tk
rYtƒdSXn|dkrƒˆdrƒˆj|ƒndS(
Nitcheck_maintypescontent-typeRGRÃiswrong maintype: %stcheck_subtypesiÿÿÿÿswrong type: %sswrong body: %sR(RhR–RÄRRjRÖRRXR#R>R%RYRR(RtcontentSubTypetvalidtsubTypeROttoCheck(RtcheckFromFirstBytestfileHandlertfirstAttempttparamsR(sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt
_bodyFunctions^

,"



$
cSstƒrtdƒtSdS(Ns>> _terminateFunction(R
RRj(t
download_tt
download_dtupload_ttupload_d((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt_terminateFunctionDs	
ttimeoutthostR­s
User-Agents)pCommon - getPageWithPyCurl() -> params: s*pCommon - getPageWithPyCurl() -> headers: tsave_to_fileR!tuse_new_sessiontuse_fresh_connectis
user-agentRtreferers%s: %sRGtssl_protocolt
use_cookieRòtload_cookietsave_cookietcookie_itemsscookie_item[%s=%s]s%s=%s; i
tno_redirectioniis"/etc/ssl/certs/ca-certificates.crtR±sgetPageWithPyCurl USE PROXYR¯s
pageUrl: [%s]s,pCommon - getPageWithPyCurl() -> post data: t
raw_post_datatmultipart_post_datas!multipart_post_data NOT SUPPORTEDR¶tstatus_codet
size_downloadtFLUSHtALLtcollectAllHeaderstcollect_all_headersiÈtignore_http_code_rangesi”iôtpycurl_errors>pCommon - getPageWithPyCurl() return -> 
sts: %s
metadata: %s
t
with_metadata(i”i”(iôiô(PRRÛRRÞRIRÖRjRµR>RhRR–tHOSTtHEADERRR@RRRÔRÜtCurlR$tresettsetoptt
FRESH_CONNECTRèt	USERAGENTtCOOKIEtREFERERRHRXt
HTTPHEADERtACCEPT_ENCODINGtgetPyCurlSSLProtocolVersiont
SSLVERSIONtkeyst
COOKIEFILEt	COOKIEJARtCONNECTTIMEOUTtLOW_SPEED_TIMEtLOW_SPEED_LIMITtFOLLOWLOCATIONtUNRESTRICTED_AUTHt	MAXREDIRSRtSSL_VERIFYHOSTtSSL_VERIFYPEERtPROXY_SSL_VERIFYPEERtCAINFOtPROXY_CAINFORÒRÑtPROXYR½R*t
quote_plustURLt
POSTFIELDStHTTPPOSTt	urlencodetHEADERFUNCTIONt
WRITEFUNCTIONt	WRITEDATAt
NOPROGRESStPROGRESSFUNCTIONtNOSIGNALR
tperformRÚt
E_WRITE_ERRORRtgetinfot
EFFECTIVE_URLt	HTTP_CODEt
SIZE_DOWNLOADt
COOKIELISTtfillHeaderItemsR%t
handleCharsetR(R/R¶R&t	post_datatmsg1tmsg2tmetadatatout_dataRéRRR'R,R-R.R3RÔt
customHeadersRNtlKeytsslProtoVert
cookiesStrt	cookieKeyR±tpageUrlR¯tdataPosttetignoreCodeRangestignoreCodeRange((RR#R$R%RR&RsO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt_getPageWithPyCurlÙsP	%
				<	
	



		
		

0
 "%		


		
$
	


(	


c	Cs7|jdkrt}nt}td}}yçd}d}xõ||kr1|d7}|j|||ƒ\}}|r-d|jkr-tj|jddkr-d|jddksÌd|jddkrëtdƒ|r*t}q=q*q-d|jddkr-d	|kr-t	|ƒ}d
|d	<q=q-nPq=W|rd|jkr|jddtjkrƒ|j
d||jddƒq|jddtjtjtj
tjgkrÓ|j
d||jddƒq|jddtjkr|j
d||jddƒqnWntk
r,tƒnX||fS(
NiiiRBsSSL_set_session faileds-308s8pCommon - getPageWithPyCurl() - retry with fresh sessions-313R3tTLSv1_2totherRÙ(RÔR>RjRhRƒRµRÜtE_SSL_CONNECT_ERRORRR§RâtE_SSL_CACERTtE_SSL_ISSUER_ERRORtE_SSL_PEER_CERTIFICATEtE_SSL_CACERT_BADFILEtE_SSL_INVALIDCERTSTATUSRÖR(	R/R¶R&Rtt
sessionReusedRéRtmaxTriesttries((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetPageWithPyCurlsB	

.
	#
	!!(
c
Csddddg}|r-ddddg}n|}xCtt|ƒƒD]/}|||krF||||||<qFqFW|rd	|krç|d	}|jd
ƒ}	x@|	D]5}
|
jƒ}
|
|kr«||
||
jƒ<q«q«Wnx1|jƒD] \}}||||jƒ<qôWndS(Nscontent-typescontent-dispositionscontent-lengthtlocationsContent-TypesContent-DispositionsContent-LengthtLocationsAccess-Control-Allow-Headerst,(RËRXRÄRRèRÊ(
R/RwRt	camelCaseR?t
returnKeyst
sourceKeysR\tacaht	acah_keysRNR­RO((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRr@s"

cCs
|jdtƒr1|jƒr1|j|||ƒSy?||d<d|krWt|d<n|j||ƒ}t}Wndtjk
r±}ytƒt}|}|jdtƒr’i|_	|j	}|j
jƒ|d<|j|d<|j
||j
jƒtd|jdƒƒ|j
j|jddƒƒ}|j
jƒjdd	ƒd
krXt|ƒ}n|j|||ƒ\}}t||ƒ}|j
jƒnWq×tk
r­tƒq×Xn&tjk
r³}tƒt|ƒ}	d|kr2d|	kr2y-t|ƒ}
d
|
d<|j||
|ƒSWq2tk
r.q2Xnd|	krT|jd||	ƒnPd|	krv|jd||	ƒn.d|	ksŽd|	kr¤|jd||	ƒnd}t}n$tk
rÖtƒd}t}nX|dr|rt|tƒrt}n||fS(s wraps getURLRequestData RR¶R;R?R@R
iÿÿÿÿsContent-EncodingRGRR3tTLSV1_ALERT_PROTOCOL_VERSIONR„tVERSIONtversiont
VERIFY_FAILEDRÙtSSLsunknown url type: httpsR…N(R–RjRäRtgetURLRequestDataRQt	HTTPErrorRRhRµR1tgeturlR.RrtinfoRRRsRR$RÖtURLErrorR@R§RæRâR>R´t
basestring(R/R¶t	addParamsRttresponseR-R€RwRterrorMsgt	newParams((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRæ_sh


		
+!


	

 	c%s*|jdiƒ‰‡‡fd†}‡fd†}|}i|d6ˆjddƒd6dd6}|j|jd	iƒƒ|jitd
6td6td6td
6ˆjddƒd6|d	6ƒˆj|||ƒ\}}	d}
x@|
dkr|rd|	krtjƒ}|
d7}
t}yáˆj|	jdƒ}
|	}d|krVd|krVPnt	dƒt	|ƒt	dƒˆj
j|dƒd}ˆj
j|dƒd}|dkrÌddlm
}|dtƒƒ}||jd<dˆjddƒkr
ˆd|jd<n|j|ƒ}|dkr2tdfSˆj
j|dddtƒ\}}|sftdfSˆj
j|d ƒd}|dkr|||
ƒ}n
|	jd}ˆj
j|d!dtƒdjƒ}ttjd"|ƒƒ}d|kr||d#<nwàt|ƒ}t|d	ƒ|d	<||d	d<|d$kr|d%|krV|d&7}n
|d%7}|tj|ƒ7}d}nˆj|||ƒ\}}	t	d'ƒt	|ƒt	d(ƒt	|	ƒt	d)ƒn/t
j|dMd,d-dƒ}x0|D](}d.|krîd/|krî|}PqîqîWd}itd0ƒd16g}t
j|dNd4d-t
jƒ}d}xftdt|ƒd5ƒD]L}t
j||dd6d-t
jƒ}|rs||}d7||f}qsqsW|jd8d9ƒ}|jd:d;ƒ}|jd<dƒ}|jd=dƒ}|jd>d?ƒjd@|
ƒ}t	|ƒ|jidA||fdB6ƒt |ƒ} t	| ƒttjd"|ƒƒ}!| dCjdDdƒ|!dE<|t
j|dFƒ|
ƒ}"i}#x|!D]}$|!|$|#|$<qÁWt	dG|"ƒt	dHt!|#ƒƒt|ƒ}t|d
<t|d<t|jd	iƒƒ|d	<|d	ji|d6ˆjddƒd6dd6ƒt	dItjƒ|ƒ|
dkr®t"ƒj#dJtjƒ|ƒnt"ƒj#dJƒt	dItjƒ|ƒt	dOƒˆj|"||#ƒ\}}	Wqt$k
rt%ƒPqXqàPqàW||	fS(PNtcloudflare_paramscs*dˆkrˆd|ƒSˆj||ƒS(Ntfull_url_handle(RÈ(R¶tbaseUrl(tcfParamsR/(sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt_getFullUrl¢scsdˆkrˆd|ƒS|S(Ntfull_url_handle2((R¶R©(Rª(sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt_getFullUrl2§stReferers
User-AgentRGttextsAccept-EncodingR­RCR4R6R5tcookie_fileRòiiiR¶tsitekeyt	challenges>>s<<sdata-sitekey="([^"]+?)"sdata-ray="([^"]+?)"iÿÿÿÿ(tUnCaptchaReCaptchatlangs<forms</form>Rvsaction="([^"]+?)"smethod="([^"]+?)"s3<input[^>]*name="([^"]*)"[^>]*value="([^"]*)"[^>]*>sg-recaptcha-responseR–t?t&s
+++++++++++++s
-------------s++++++++++++++s<scriptt>s	</script>Rwt
setTimeoutssubmit()scf_max.byteRüs<divthiddens</div>itids]document.children.push ( new element('', '%s', 'div')); document.children[6].innerHTML ='%s';s÷(function(){
    var a = function() {try{return !!window.addEventListener} catch(e) {return !1} },
    b = function(b, c) {a() ? document.addEventListener("DOMContentLoaded", b, c) : document.attachEvent("onreadystatechange", b)};
    b(function()sfunction pippo()s
f.submit()sprint(a.value)ssetTimeout(function(){s, 4000);
    }, false);
  })()sjt = document.createElement('div');
        t.innerHTML="<a href='/'>x</a>";
        t = t.firstChild.href;s
t="%domain%";s%domain%s%s
%s

pippo(); R.Rs
tjschl_answertactionsCF verification url: %ssCF post data: %ssTime spent: [%s]is
Timeout: [%s]i (s<scriptR·(s<divR·R¹sTimeout: [4000](&R–tupdateRjRæR>ttimeRhRÁRµRRRft/Plugins.Extensions.IPTVPlayer.libs.recaptcha_v2R³RRªtprocessCaptchaRxRèR§treRyR*RdRtSTART_SRËRXtgetattrtItreplaceRHRR@RtSleepRÖR(%R/R©R&RtR«R­R¶R­RéRtcurrentt
start_timet	doRefreshRÀtverDataR±RºR³t	recaptchattokenttmpt
actionTypet
post_data2tparams2RVRœtdecodedt	js_paramstcode2R\tname_idtvalue_idR	R=tverUrlt
postDataCFRN((RªR/sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetPageCFProtectionŸsØ'C





$

%


	





#





2!

c	Cs±t}d}t|d<||d<d|krB|jdƒ|d<nd|krd|jdƒ|d<n|j|||ƒ\}}|r•|jd}n
t|ƒi|d	6|d
6S(NiRCR/tmaintypeRtsubtypesRR<Rétfsize(RhRjRRRµR	(	R/RŽR¶t
add_paramsRtRãtdownDataSizeRéR((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytsaveWebFileWithPyCurl0s


cCs[t|ƒ}|j|ƒ\}}|j|ƒd|krmd|krmd}i|d6dd6}||d<nt|d<|jƒr™|j||||ƒSt}	d}
i}ys|j|||ƒ\}}
|jd	tƒr|
jƒ}t	|j
d
ƒdƒ}nd}|jdgƒ}t}d|kr‰|d|
j
jkr‰td
|d|
j
jfƒdt|ƒkr€|
jƒnt}n|rÕd|krÕt}x1|dD]"}||
j
jkr¬t}Pq¬q¬Wn|sçt|ƒr|jddƒ}d}x¼tr½|
j|ƒ}t|ƒrft}x'|D]}|j|ƒr0t}Pq0q0W|s]Pqfg}n|spPn|
t|ƒ7}
t|ƒr|dkrªt|dƒ}n|j|ƒqqW|dkr×|jƒn|
jƒd|kr||
krt}	qq|
dkrt}	qnWntk
r;tdƒnX|ji|	d6|
d6ƒ|S(NR­R.srMozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36s
User-Agents?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8R¥Ritignore_content_lengthsContent-LengthRRÙs;common.getFile wrong maintype! requested[%r], retrieved[%r]RÚt
block_sizei R!s&common.getFile download file exceptionRéRÛ(R§R»R½RhRäRÞRæR–R tintt
getheadersR>RjR3RÙRRXR$tsubtypeRRYRR#RÖR(R/RŽR¶R£RtR¸RºR.R­RãRÝtdictRetRétdownHandlerRµt
contentLengthR#tOKRœt	blockSizeR$R((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytsaveWebFileBs‚


"
		
	


cCsSt|tƒs)tƒjdddƒ|S|dkr<tjS|dkrOtjSdS(NsWgetUrllibSSLProtocolVersion error. Please report this problem to iptvplayere2@gmail.comRÚi(R„tTLSv1_1(R´R¢RRÞtssltPROTOCOL_TLSv1_2tPROTOCOL_TLSv1_1R>(R/tprotocolName((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytgetUrllibSSLProtocolVersion‘scCsSt|tƒs)tƒjdddƒ|S|dkr<tjS|dkrOtjSdS(NsWgetPyCurlSSLProtocolVersion error. Please report this problem to iptvplayere2@gmail.comRÚi(R„Rê(R´R¢RRÞRÜtSSLVERSION_TLSv1_2tSSLVERSION_TLSv1_1R>(R/Rî((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRO›sc$Cs(
d„}tƒr^tdƒ}tdƒ}tƒjdj||gƒddƒtdƒ‚nd|krŒ|jd	tƒrŒtd
ƒ‚ntj	ƒ}d}d}d}	d}
i|_|j}|jddƒ}d|krí|d}
n	|j}
d
|kr|d
}n(d|j
kr*|j
}n
i|
d6}d|krP|
|d<ntdt|ƒƒtdt|ƒƒg}d|kr»d|kr»d|ks®d|kr»t|d<n|jdtƒr?|jdtƒr:y|j|ddtƒWq:tk
rtd|dƒq:tk
r6tƒq:XnyÑxÊ|jdiƒjƒD]°}td||d|fƒtjddd|d|d|dddtdd d!td"td#d$d%td&td'dd(td)dd*dd+idd,6d-tƒ}|j|ƒqVWWntk
r%tƒnX|jtj|ƒƒn|jd.tƒrd|jtƒƒnd|jd/dƒkr’|j|d/ƒ}nd}tƒsÿyG|dkrÂtj|ƒ}ntjƒ}|jtjd0|ƒƒWq6tk
rûq6Xn7|dkr6tj |ƒ}|jtjd0|ƒƒn|j!rK|j"}nd }d1|krj|d1}nd |kr½td2ƒ|jtj#i|d36ƒƒ|jtj#i|d46ƒƒn|d5}|jd6d ƒ}|d kr|j$t%j&|d ƒƒ}ntd7|ƒd|kržtd8t|ƒƒ|jd9tƒrL|}n:|jd:tƒrw|jt'ƒƒ|}nt%j(|ƒ}tj)|||ƒ}ntj)|d|ƒ}|jd	tƒsÚ||||ƒ}	n”t}y¿||||ƒ}|j*ƒjd;ƒd<krt}nyL|j+ƒ|d5<|j,ƒ|d=<|j-||j*ƒtd>|jd?ƒƒWntk
rxnX|j.|jdd@ƒƒ}|j/ƒWn#tj0k
rÄ}|jdAdSdTgƒ}t}|j1|d=<x>|D]6}|j1|dkræ|j1|dDkræt}PqæqæW|rØtdE|j1ƒ|j2j*ƒjd;d ƒd<krat}nyB|j2j+ƒ|d5<|j-||j2j*ƒtd>|jd?ƒƒWntk
r¶nX|j2j.|jdd@ƒƒ}qÅ|j1dFkrE|jdtƒr<|j2j*ƒjdGd ƒ}tdH|ƒ|j3|ddtƒn|‚qÅ|j1dUkr»|jdtƒr»|jdtƒr»|j2j*ƒjdGd ƒ}tdH|ƒ|j3|ddtƒn|‚nXy)|rçtdMƒt4|ƒ}	n|}	Wn}tk
rm	}tƒ|jdd@ƒd@krd	tdNƒ}tdOt|ƒƒ}tƒjdP||fddQƒn|}	nX|jdtƒrÓ	|jdtƒrÓ	y|j3|ddtƒWqÓ	tk
rÏ	}tƒ|‚qÓ	Xn|j5||	|ƒ\}	}|jdRtƒr$
|jd	tƒr$
t6|	|ƒ}	n|	S(VNcSsŽt|ƒdkrWtj|Œ}|dkrE|j|d|ƒ}qŠ|j|ƒ}n3|dkr{tj|d|ƒ}ntj|ƒ}|S(NiR-(RXRQtbuild_openerR>RŒturlopen(R0t
customOpenersR-topenerR¤((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyturlOpen§ss=It is not allowed to call getURLRequestData from main thread.s>You should never perform block I/O operations in the __init__.s\sRÚi(sWrong usage!R
Rsreturn_data == False is not accepted with max_data_size.
Please also note that return_data == False is deprecated and not supported with PyCurl HTTP backend!R-R.R­s
User-Agents)pCommon - getURLRequestData() -> params: s*pCommon - getURLRequestData() -> headers: R4RòR5R6RìsCookie file [%s] not existsR7scookie_item[%s=%s]RšiRúROtporttport_specifiedRÀRGtdomain_specifiedtdomain_initial_dotRüRÃtpath_specifiedtsecuretexpirestdiscardtcommenttcomment_urltresttHttpOnlytrfc2109R8R3tcontextR±sgetURLRequestData USE PROXYthttpthttpsR¶R¯s
pageUrl: [%s]s,pCommon - getURLRequestData() -> post data: R9R:sContent-EncodingRR;R?R@iÿÿÿÿRAi”iôis(!!!!!!!! %s: getURLRequestData - handledi÷s
Set-Cookies> new_cookie[%s]i,i.i/i3sContent-Encoding == gzips;Critical Error – Content-Encoding gzip cannot be handled!sLast error:
%ss%s

%siRC(i”i”(iôiô(i,i.i/i3(7RRÛRRÞRIRÖR–RhRîRïR>RµRDRERR@RjRùtIOErrorRRQtCookiet
set_cookieRHRQtHTTPCookieProcessorR)RïRRët_create_unverified_contexttHTTPSHandlert
SSLContextRÒRÑtProxyHandlerR½R*R`R<RdtRequestR RŸtgetcodeRrRR$RžR.R1RýRRsR(R/R&RtRöRuRvRõR¤R0RxRõRwR-R.R3RôR}t
cookieItemR{tctxR±R~R¯Rt
gzip_encodingRR€Rt
ignoreCodeR‚t
new_cookie((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyR¥s2		%		
	


0



	
	

 
			,


&!	/
!	3


#
$
$cCs]y8|jdtƒr7|jdtƒr7d}d|krk|jj|dddtƒdjƒjƒ}n|dkrÖ|jdtƒrÖ|jj|d	d
tƒd}|jj|ddtƒdjƒjƒ}n|dkr7td|ƒy|j|ƒj	dƒ}Wnt
k
r&tƒnX||d
<q7nWnt
k
rRtƒnX||fS(NRtconvert_charsetRGscontent-typescharset=([A-Za-z0-9\-]+)iitsearch_charsets (<meta[^>]+?Content-Type[^>]+?>)ResUTF-8s>> encoding[%s]torig_charset(RGsUTF-8(R–RhRjRRfRtupperRR’R—RÖR(R/R&RRwtencoding((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyRsss$$2.

cCstjdd„|ƒS(Ns[€-ÿ]cSsdt|jdƒƒS(Ns%%%02xi(R•tgroup(tc((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt<lambda>‰s(RÁtsub(R/tb((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyturlEncodeNonAsciiˆscCsÍy®t|jdƒƒ}g}x‚t|ƒD]t\}}|}y:|dkr^|jdƒ}n|j|jdƒƒ}Wntk
r‘tƒnX|j|ƒq+Wt|ƒSWntk
rÈtƒnX|S(Nsutf-8itidna(	RR’t	enumerateR—R RÖRRHR(R/tiritpartstencodedPartstpartitparttnewPart((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytiriToUri‹s 

s0 - 9cCsCt|ƒ}x0tddƒD]}|jtt|ƒƒƒqW|S(NiAi[(RWRËRHR@tunichr(R/ttabtstrTabti((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pytmakeABCListœs((R6R7RDR>RERURR¡R«R»RhRÁRÈRÉRÐRjRØRâRäRêRøRRRRR
RƒRRrRæRØRÞRéRïRORRsR R)R.(((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyR¢êsL		
	

ÿ?)@‘O	
	
Î			(((7t7Plugins.Extensions.IPTVPlayer.components.iptvplayerinitRRÛRRt-Plugins.Extensions.IPTVPlayer.tools.iptvtypesRt-Plugins.Extensions.IPTVPlayer.tools.iptvtoolsRRRRRR	R
Rt2Plugins.Extensions.IPTVPlayer.components.asynccallRR
Rt)Plugins.Extensions.IPTVPlayer.tools.e2ijsRt"Plugins.Extensions.IPTVPlayer.libsRt*Plugins.Extensions.IPTVPlayer.libs.e2ijsonRRçRt
json_dumpsR*RQtbase64RëRÖRÁR¾RîR“RÜt	cStringIORRRRRtbinasciiRRR(tHTTPRedirectHandlerR)tBaseHandlerR<RUR¢(((sO/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer/tsiplayer/libs/pCommon.pyt<module>sJ:



			‘