From 964c16d309dea2fb6203c2ab088098d785f3f8dd Mon Sep 17 00:00:00 2001 From: David Soms Date: Sun, 21 Dec 2014 01:46:21 +0100 Subject: [PATCH 001/156] Update kodi.py Change some remaining XBMC to KODI. --- sickbeard/notifiers/kodi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sickbeard/notifiers/kodi.py b/sickbeard/notifiers/kodi.py index c297bfc6..1b33cd22 100644 --- a/sickbeard/notifiers/kodi.py +++ b/sickbeard/notifiers/kodi.py @@ -271,7 +271,7 @@ class KODINotifier: logger.log(u'No KODI host passed, aborting update', logger.DEBUG) return False - logger.log(u"Updating XMBC library via HTTP method for host: " + host, logger.DEBUG) + logger.log(u"Updating KODI library via HTTP method for host: " + host, logger.DEBUG) # if we're doing per-show if showName: @@ -424,7 +424,7 @@ class KODINotifier: logger.log(u'No KODI host passed, aborting update', logger.DEBUG) return False - logger.log(u"Updating XMBC library via JSON method for host: " + host, logger.INFO) + logger.log(u"Updating KODI library via JSON method for host: " + host, logger.INFO) # if we're doing per-show if showName: From 13dc2fde933bb41be682e3670aed0b17239726d3 Mon Sep 17 00:00:00 2001 From: NeO_AtOmiC Date: Sun, 21 Dec 2014 18:15:03 +0100 Subject: [PATCH 002/156] Added search provider icons. Added network logos. Fix https://github.com/SiCKRAGETV/sickrage-issues/issues/18 fix https://github.com/SiCKRAGETV/sickrage-issues/issues/240 --- gui/slick/images/network/AHC.png | Bin 0 -> 3275 bytes gui/slick/images/network/sky atlantic.png | Bin 0 -> 3643 bytes gui/slick/images/network/the history channel.png | Bin 0 -> 5299 bytes gui/slick/images/providers/dognzb_cr.png | Bin 0 -> 1054 bytes gui/slick/images/providers/fastnzb_info.png | Bin 0 -> 318 bytes gui/slick/images/providers/nmatrix_co_za.png | Bin 0 -> 1406 bytes gui/slick/images/providers/nzb_is.png | Bin 0 -> 1110 bytes gui/slick/images/providers/nzbfinder_ws.png | Bin 0 -> 877 bytes gui/slick/images/providers/nzbgeek_info.png | Bin 0 -> 747 bytes gui/slick/images/providers/nzbid_org.png | Bin 0 -> 727 bytes gui/slick/images/providers/nzbindex_in.png | Bin 0 -> 1155 bytes gui/slick/images/providers/nzbplanet_net.png | Bin 0 -> 775 bytes gui/slick/images/providers/nzbsooti_sx.png | Bin 0 -> 1127 bytes gui/slick/images/providers/nzbstars_com.png | Bin 0 -> 1051 bytes gui/slick/images/providers/nzbtv_net.png | Bin 0 -> 223 bytes gui/slick/images/providers/nzbzombie_com.png | Bin 0 -> 1316 bytes gui/slick/images/providers/opennzb_net.png | Bin 0 -> 775 bytes gui/slick/images/providers/oznzb_com.png | Bin 0 -> 3413 bytes 18 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 gui/slick/images/network/AHC.png create mode 100644 gui/slick/images/network/sky atlantic.png create mode 100644 gui/slick/images/network/the history channel.png create mode 100644 gui/slick/images/providers/dognzb_cr.png create mode 100644 gui/slick/images/providers/fastnzb_info.png create mode 100644 gui/slick/images/providers/nmatrix_co_za.png create mode 100644 gui/slick/images/providers/nzb_is.png create mode 100644 gui/slick/images/providers/nzbfinder_ws.png create mode 100644 gui/slick/images/providers/nzbgeek_info.png create mode 100644 gui/slick/images/providers/nzbid_org.png create mode 100644 gui/slick/images/providers/nzbindex_in.png create mode 100644 gui/slick/images/providers/nzbplanet_net.png create mode 100644 gui/slick/images/providers/nzbsooti_sx.png create mode 100644 gui/slick/images/providers/nzbstars_com.png create mode 100644 gui/slick/images/providers/nzbtv_net.png create mode 100644 gui/slick/images/providers/nzbzombie_com.png create mode 100644 gui/slick/images/providers/opennzb_net.png create mode 100644 gui/slick/images/providers/oznzb_com.png diff --git a/gui/slick/images/network/AHC.png b/gui/slick/images/network/AHC.png new file mode 100644 index 0000000000000000000000000000000000000000..9c95a0685f5f3c1564f4ece6a512d35c73824372 GIT binary patch literal 3275 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 D)+PYT literal 0 HcmV?d00001 diff --git a/gui/slick/images/network/sky atlantic.png b/gui/slick/images/network/sky atlantic.png new file mode 100644 index 0000000000000000000000000000000000000000..bd971a2b77c477ca0d995f448d3b8490bf27cf6a GIT binary patch literal 3643 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 JT8)Yw>VFBW?=b)X literal 0 HcmV?d00001 diff --git a/gui/slick/images/network/the history channel.png b/gui/slick/images/network/the history channel.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d4b25abb357db6a9bc4e443a155987db5c73ec GIT binary patch literal 5299 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 literal 0 HcmV?d00001 diff --git a/gui/slick/images/providers/nmatrix_co_za.png b/gui/slick/images/providers/nmatrix_co_za.png new file mode 100644 index 0000000000000000000000000000000000000000..316fd5bf4f5698de6165b1814b216794aa5bb868 GIT binary patch literal 1406 zcmZQzU<5(|0R}M0U}azs1F|%L7$l?s#Ec9aKoZP=&`9k6|Nk>cWm+*Xv?n9vMp>gF zFd70QA_SPQ0|o{ZaZpeo2|z*yE&vNCr~r%$)dJ))GD0xa3>Y6~0Eo{B#7KM~7e61Q V2T48He4Ko!i(vA|G{Ujuu>kD72LAv6 literal 0 HcmV?d00001 diff --git a/gui/slick/images/providers/nzb_is.png b/gui/slick/images/providers/nzb_is.png new file mode 100644 index 0000000000000000000000000000000000000000..60314a9dfd3b09952f8e07f41dda896d2f503c11 GIT binary patch literal 1110 zcmV-c1gZOpP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz1II~3K~y+TV|e!LB|}sFOoq>&KUzL~cz@%C zix-|BI&kpkwk=!#u3EYB-`qKK{!N-V@lRW8>&Lp<+S@hN)ji!kJ>o@0MGXJ{{|{ww zwo4cGa?MGb*uVHqPv_jft0v9)b7b-2Kbu#t{=0nn@_(~u&-vfq*Y~%jx%p3dS=qnr ztgOE&Nl7pAv$IRU2B^sS*-Hqy{*VxK{VOT#{;ycx=HFRGwSSv6js7k44*EB(s`h_R zSJ%J#y1IWQMa6$J($oJ%#>D(;2nf0kHo(d>*-l>4=cl}+?_W77|G$MsK{u|sdKK=s zcQ08at@fmYTjGCzVB~_Y=EO}wxN<-$afXRsJ|-8 z34bG8N*0uv2Qq^2GGp8Nb}sRMJ!(b)?QLx=u?8lS9aPo-^*K8Kxu|Dy0Bk@|P^+xI zLBU5Iz2d)mMpgf;?A!VS-C7xXG;NuenmelXh${Y=Vq$MGIk$)wc^3kL$ zu5HCtN?S6EI4iB3L}uukJU*|i_4~An_P@)X0WSZ3{|;j)nSP3~d)Wmgzxw^(0$Pv! ziJ5fz^~TxrB)2H*+}z>n7d(-Lh3UAXJJY3rFqboGy1z~8Y`6q7aoqvtXj(TrZ(tfx?MR)yLM=!?nR`wvxZ%!#`{skKF z>$1CV`YAazNJ47d@q~e~-~mJI#>bJSD<1!oS^o5|^U50wx5}%(S|FkH@l0+>B2e?o z(~25@K=_QV$<50Vv4UsJY#4zCSTKNq?Vfjxeuv)jNN#$wn{nmKf2s>_eB7#{^J{^Y z$-hTtAT9(cScp`*JW4l_-6~3Fy3fr0qaG8&ijn&JKhTLtbKW(d*zGYxt5;) z3fRT|PY{y*w^mZ=-*I{MzZa|=`Y!tfF&>pyg=#_q5yw9<)L!|*XtMjA5BIt^uN2~2 z{zfu!|10N`_%}sJ?(a@rvrSjRqD6KxFfc;3V1kgt9~h#JeqiuA^xlSh-RlqL;)=hc zm<0c|s~E0XYwp0f(ZK_^W*7)M_@1F?;VMS$bAL_sW6L+kDyTJ2362+7;ONbGDm@RX c3I-S$05n3zm_^YBP5=M^07*qoM6N<$g3H7){Qv*} literal 0 HcmV?d00001 diff --git a/gui/slick/images/providers/nzbfinder_ws.png b/gui/slick/images/providers/nzbfinder_ws.png new file mode 100644 index 0000000000000000000000000000000000000000..ac45d833b21f9eab7a136f513698d2d1aa9fff12 GIT binary patch literal 877 zcmV-z1CsoSP)b{3qw;Jm);m z^E=P~D1eD49Vn)xG?aZlC(a#|-aC&t@@=ac3Vt>flXJu2Jt88qx@x(6TusVi|xU8z&5s{`Vj>yyo8E~%+`Q?f;7N&`@N7BE@Z_vz<* z=5Bf$Q5nt!ecjAS#TlPB2cI5>=&vskx%pxTGZ9*vTlTLnwn?qeDQ2rCMMVWN(EW>i zvT0+kgG7J(^gCn|0PNYdLwYZq$62+E#@(B7`^pDLp=fZSe*G zHhfUqZteVOP4_}St4j-USi*R0QASfMdHAn1Eh_gd`TF?jfC3o#<9qV$USxcbOI=Ao zp_%gwn)lX6E4FUo`j5YH<9MwyE#BosQn65Lh&NWu!{S|xLD%)|exE~D zxvjFZ{v)Y;*)K9Nf~4ZK1%o6bzfb$%|7yE>_2gUSMJE~#eM!n!#_+TF#Q8I4m54^# zFmSsI$+}pZG6F_?5MyirV|0Koc5K@gcNFqrz^;;d60^-74Fp!AO!;Ug3$Ir#Cu_*O zY}GsG-eE=kZB*VYYb-H>t|^`+%GMXyOoT#LJgZ)-q^{ZpBIL?vr_kBxr}du3v6e7t z5h^_%nPoF$G8^iz!5FWU+cD>vx&QYlGk-#F|3CZ(v_WeIV|ttW00000NkvXXu0mjf D++mQ^ literal 0 HcmV?d00001 diff --git a/gui/slick/images/providers/nzbgeek_info.png b/gui/slick/images/providers/nzbgeek_info.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2ddb86ae3071e9442968947c4b9e42fd4221a1 GIT binary patch literal 747 zcmVkHg{lTaRG2GAYPHhfh*@i}G;rmc?>e2HxOa=JCE4~r ze;yp#S9KE)E^&OWUa5Q1uHI;W6^g^Bhdw?zpX@v+C!szf2-`;!@pYC-?nECqeTOZBOha{ez9eekU zbD3K?Ni54kjG=h&??G4H1EUZmDCFYxUw-=GN2r&}l^`)syT2_iR>~DJmygfA`F02)&9Yogf`E(yI$VI-P;GYR_2%yG!{)97 zuTGyl|H*}z^ozvhn=3Jva@8ObLC|4ll}g|HAAFc+z5W*tYf%6N07t&DzWVpQdkznT zn?`ex1m#)USzTM7m^kifmm-n8wQ}?J+S;AFo8}Gxjv#^W%)aIh5&%>!1i}9%0C#u% dH*^qiJO?z)Sv~)ejGq7i002ovPDHLkV1f#9StPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz0!T?jK~y+TP1E0Ri%}fM@$Xt&dl4%#W;Ft-F{DvP}FKVVKP} zuDm}yq8G2Eea`oM&UwD)JoePI0CNPdMWDvn>%!651K|%02 z0X=4u1T^z-x9dKp@fDx&0fV@SeJF!t?L|eQezODtKMAO^;nLXSc4|~K!*AgcF%FD2L1;$Frd|{a2Ic(0Ifa) zOQ6^Lj+fNOtiy4F?BGumagKqlsK6a4;3$^DgE`oaZx|-vsJ z4NRjE)zB*cns^$kFdOQPF47dMKS_JN2Q3x|oMb|~8xTVcbQg4tx`9ckaT}py&SH#! z#IwS}E!N`m)zgDpY9bSxuoDL;>V|IOF#7QrL(pw}O+dJ_w6x4pj#I}~*0(UqM4f`V zT#MWIg3qo|j8HSco?GEX^%_Wltusm002ov JPDHLkV1njQJq7>( literal 0 HcmV?d00001 diff --git a/gui/slick/images/providers/nzbindex_in.png b/gui/slick/images/providers/nzbindex_in.png new file mode 100644 index 0000000000000000000000000000000000000000..f958657d45fa3928ca049ec34b429ad8be91f595 GIT binary patch literal 1155 zcmV-}1bq96P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz1N2EmK~y+TV?YLujt-0g(&HXliO& zASWlcft8hYFP{MadId4j8jHmEY}HL0SF#@1|Bqq+zJE}y3=AqNDvTN$8jR7=QF3Nx zra7XbA}86{*q(@qiM{vo^!%i&tNTHOpZ}q@p21bq){civ`+)}R+xrWw*~Z42(ZE2T zF+M&{R!>j2R7_0t20J_3PXPgeKhvg8{k>`H=D)GAvEQ6Ev=8PwdTt4A>U_wwXAj5) ze;C5U!x`-CY#C?Gn#G`|rWPzJDtZWL^FJ0AmOm=W%71q5-ub7itLsZ~Sk#3HRxTZj z(~ApySFBmjzHcwc1^*bleY_cg7-W#Bu&{71FCXt)IXT%smKNr})z#Jh=H};pjCOE2 z(_!V>d(6_?YufC^_WI|}_HiEA{~u_;e+ENCLuMdmu(GnU20D4GmX_9^oZOsWHFdQ= zloSrm-Ca8nAcIe+Cyj2e#!)mNJQohy?NR z@g0tcjQF;3(}uSVb+wP3G;}s@^p9!T?Ga(S%_Cg+62FW@PhNSb(~8wwnU5R-dEr09 zl(tTugKO3cNC^qYNs5ad(l;@_7U=1@K3Ps<#XkFh(j!j6HisR9c-Mp^DeREYj+|-d zyE?qR?=8cblfM}c9|9Y|Fg>RzuRlEQK&xlKyooxN-K$m2CmnJN4?gA->we55l4GBZ zui7Ci-^@-ut9nnrfCXBe9rxIFZ2!l&Vf}w_G;VVVD&KD5v1_Y|OTl^#EB_4|*74gj ziiA)4#PMJ7h|=GnZJQgXZ#q+5UjCG%jLaJm4fXGA`uab4EG?ga4cHZ#Vz|#E-1&fw zugZ2cOR|0MBWnZ^)8S`8V2eyOGf#Rn3EM3u%^+MV)pb9<1Tll={tUjA}(bN>bg z_EQyQrP;=My6OyU=p3YR%+}Xpmv>~)9Ph9haW;K`85kIR zGchswEH5wrSU^zlkes}HySt}{B{1PJGHlnh7ThABma)Ui%X5c&Xzp6)fXTg{LGv

RYT3VXf+S-ZPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz0(eP8K~y+Tm5==|6mT5J{ROtHeyG+pL``k7 zvRJhBpro3IlP(W6jFg&|L_Y{C57(VdadKRdIl7alLwP8wUC#8xx*n`DqBwbomLBKT z^|aiu<+Xjb&-VR(UZ3~JY&PBuPx7aoJJPC28agJ~oHR#?xbpX4QpH!YTgNz7JH$o( zIFClZVVL+fvrPN+6T0UgdH4P+O6_-!R`;?))kDP1K|IyHoO?4FO! z-ZDJIT8>mbAyM0nxUH9S58sm7)`vx03oBCY5nIz`dWx>gK!D^L_WP796RBAuEH&0u zR!3Chm9FJz`C|f$+S!tRmrV&xte3W#3S16eN3ctQrROEKiyLrHu4iRPIRc+jmKsF@ z-!fxg!kWM$mirW86I5X;h|g)k%D0e3TeF$xn2Mb!m)#kS_+>V+F|HQdy~ae|Y8GxQ zV5zqXf#(%+YTo{nJbF2RrN;&A{N&7AlZ=I93g!-{S>a!RTVf5Nm$d}Rnpth# zcAjiDP4JU2sfKVxExz$eRthti?{o%p`vexaNU#=O#5t-Ir^rfTignY6{}NrOVUI+G zZLrL^Dz+WJfLnAnB5@&MvJ%3L z6`H9eCQmc__NkmLsV7*PPmm-J|Fm3U6zcyQoI7S_KLD#Yo^uARfp7o-002ovPDHLk FV1glnVe|k1 literal 0 HcmV?d00001 diff --git a/gui/slick/images/providers/nzbsooti_sx.png b/gui/slick/images/providers/nzbsooti_sx.png new file mode 100644 index 0000000000000000000000000000000000000000..da58bf72551e812e10b1f061a129fc19c960196b GIT binary patch literal 1127 zcmV-t1ep7YP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz1K3GKK~y+TO^tg@lUEqV&-Z=3ptSS`bU+If z3*pjPlqpcQNt^;&nf!r+DxF}hI3?RCg{+J^+5Cf=2pyJg1Y}6E%;2OjWe8%eT+GU4 zK}Bu_24UIUGU76&($VjHJBV34$uG})p67Y<0-iY1H*9AbFFY}w#}0^PB^1iqX^=!w;HKpGCZ@f~yQrI*IQ3n=SdtgCb4?KqSfZhxv6&WN@98}-d zH`~e5X1lkfsn;8o@aDw9qO;3}ZwI`2#=2ES*3o||t~g0O$~Jm;$g;~0Qd8AJ%2P8* zke;Kl*K|0^>JBIT^2P{M>nc6R3?{FoYYcvTzG*cfb^jA>W!*|%S=IBRszzAd?xf7u zhhe$(DvV3q;4JWw|2qa2TQQF#r9knESli*14g4|^4}{= z7fIBiez-RY^mv!lfIZQ1cz7)I@7BHF;GBdn_6#6$_eyM!D_I zP`!p6Z!Uzpw}(H;PK|wRH>=@5T|R6qJK)LBkUyJj`2Y^rYp9hndG^nDel+9{g(_miQaP6OLCK5=&8(j zFUOZT2_jzOq)3Cf^&)@Ps1Jh}0svUT0@;^!N*UBCPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz1B^*TK~y+Tb)JS{N zbA;`5CXZ^#E}N9UrE#?ulnlKOmzt#M;E~7127vzO7+|a=q3x6aZcbZDIOOl-PF*kQ z3iMa`JXb#u8!BM3`4}Ith|qU_9fd1^u8K_1iI->UDi*z@J_y(ADkBSAm)<-&(=T?@ zBPWoztF*;>Qt*mTkq=lAuJc(DmIfZ258OWzmruz=^;7LTd%Ycdy1gB{Zv}ckHKUO_ zgjC0v>Fxu!9kML($R{9e@Bq1_?_&|c2EzB@84q)W6X$cP{ayP#^gsoom4`4r`~ya# zH4IWom|*``K7ZG{>dA|_ZO$_yvGpYXZG(gq0FVZN|Boy}xi2!xA=|jsb9uXh?ko49 zJBKh*u>p1E9MV+Gq0w&`T3Lo?|9)@Q*PcgF&B8Ndl9+;Uz|*>xU;$GV8E5-NxOcj< zNE=j^&S3Rt7;8Uduy!AV?(M>8xDW+z?wIz?{CF&P=FW@Iab+C@mQ#t4 z1qMHgUSw%p{k-qm+JAz|4PIt!GsaXtX56o1Y~9KPZok}bJDXCK@5HI z3;>qKM1lp35|U$Yezq`hLujT)Hqh)5LhfCN@s}XvEN1+gyz8bWUN$T0{#gMG3IBnK z)}#m)v^T}4xPIpyoatTToE?6_8BpbDed;0=?f!gpNU83Z|9jvDwv#|5sN8zCEru*y;vSX=l&BZ*(5mBw!~)F-^kT5PCGfFS??@E@SV V;JE~n{2>4U002ovPDHLkV1j%|_UNWpFD3#O#|A` N;OXk;vd$@?2>=r1OqKuu literal 0 HcmV?d00001 diff --git a/gui/slick/images/providers/nzbzombie_com.png b/gui/slick/images/providers/nzbzombie_com.png new file mode 100644 index 0000000000000000000000000000000000000000..b6cf95780affa3d78bebda52d8f418a09ea4bd69 GIT binary patch literal 1316 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{T%CB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsfTm^->U zTDlmTSr{6)niv{7nL3(UIGZ_{7+RPam^r(_%)qAC&B@Zh+{xU{(7?>e(9qSy(ZtEj z#n1pK>}urbY+wn~>zP+vl9-pA3bQv8XfIT+D_*@;&PAz-CHX}m`T04p6cCV+Uy@&( zkzb(T9Bir(o|%`DUtSD~9Ee|CQj0RnQd8WD@^clyp=*_i#dgBJhUiTpC&cuDj?o7t z4Wy(369T3`5EGv8fgE_&NzDW1mm*-s;Q5wfz`(#5=IP=XQgN$h(&?gR10Gk^+Y%lx zP1fgH#eQS|_5c5c)bh7llhXv3rSyDso;sPQu_f&AA*R^ZFSs}lJ4D#%r>%~x&Un}# zaM*=oV_ocOFH!%a-)g0u_lTbeoOJS!qIlE`cia1CR+nCVBh_W1>u}`kZMXF%mWvz| z9KvTs8Eu{E=F~W+)l49EU60+g(?a|H%}`ul)bXHSuJ}#$s+pITzVk6}+)@+Srg!7k zsURbv#p-7BZ`}HoHR}a$>XO6H4{p`lb;7G|&*$I$dqsk@DzyV2U@zPT-f_HhKtWbU_ZCwk8{Q6CpOrNtX_2Qs(5jX$$hoeMsjVIzRB;t zIXvi1Z+H?qv)K7|L>Z6hrqkxX!}dN+-{v8xW58LaF_-1f_xMMVH+-*uWKrMPo%!^! zz~Q2G$qmKk+q(JxUR%zxJX$ek_t)o%f4B@7emptTnVKGx0V=mVUHx3vIVCg!0E-RM A8vpPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;Eegmrwuz0(eP8K~y+Tm5==|6mT5J{ROtHeyG+pL``k7 zvRJhBpro3IlP(W6jFg&|L_Y{C57(VdadKRdIl7alLwP8wUC#8xx*n`DqBwbomLBKT z^|aiu<+Xjb&-VR(UZ3~JY&PBuPx7aoJJPC28agJ~oHR#?xbpX4QpH!YTgNz7JH$o( zIFClZVVL+fvrPN+6T0UgdH4P+O6_-!R`;?))kDP1K|IyHoO?4FO! z-ZDJIT8>mbAyM0nxUH9S58sm7)`vx03oBCY5nIz`dWx>gK!D^L_WP796RBAuEH&0u zR!3Chm9FJz`C|f$+S!tRmrV&xte3W#3S16eN3ctQrROEKiyLrHu4iRPIRc+jmKsF@ z-!fxg!kWM$mirW86I5X;h|g)k%D0e3TeF$xn2Mb!m)#kS_+>V+F|HQdy~ae|Y8GxQ zV5zqXf#(%+YTo{nJbF2RrN;&A{N&7AlZ=I93g!-{S>a!RTVf5Nm$d}Rnpth# zcAjiDP4JU2sfKVxExz$eRthti?{o%p`vexaNU#=O#5t-Ir^rfTignY6{}NrOVUI+G zZLrL^Dz+WJfLnAnB5@&MvJ%3L z6`H9eCQmc__NkmLsV7*PPmm-J|Fm3U6zcyQoI7S_KLD#Yo^uARfp7o-002ovPDHLk FV1glnVe|k1 literal 0 HcmV?d00001 diff --git a/gui/slick/images/providers/oznzb_com.png b/gui/slick/images/providers/oznzb_com.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5c53117562280ac3622fa86e2261c3f0fa120b GIT binary patch literal 3413 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 literal 0 HcmV?d00001 From f304537df2c79401bfcb8e173dd2ce7ec618ea35 Mon Sep 17 00:00:00 2001 From: NeO_AtOmiC Date: Sun, 21 Dec 2014 19:59:04 +0100 Subject: [PATCH 003/156] Added TNT Drama" network logo. https://github.com/SiCKRAGETV/sickrage-issues/issues/250 --- gui/slick/images/network/tnt drama.png | Bin 0 -> 2089 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 gui/slick/images/network/tnt drama.png diff --git a/gui/slick/images/network/tnt drama.png b/gui/slick/images/network/tnt drama.png new file mode 100644 index 0000000000000000000000000000000000000000..cd252084b64bc1a53229dd59f612ad0db1b1742e GIT binary patch literal 2089 zcmeHIX*3ji6#rYZ_p-z=q0kElW5zmU9cCuWV@&q!GeityGM2F=dc+VZ3E3W%CC2Mn zLJHYQ%93OqQCZq#_onyleRyBrr~c>O`#bl4?(f`l@45HfWE*R=AfF^306-9nLE%_v z#8O!v4wlU}rT@hOPG4gyV*qN?`FB0JSUy`Q4s8Oe2cgS9BE2y|r*Rcr#YOl90hq`PqU0tpf+FmmE69n!M)}oV6VQ z9PDg5+Ui2$`U;$idc0~#L0PS1P_g}w(cA$$3FW*+Ar>FgbIoLX7hV5yDuG``ZS=o3=0jSnCzzYR?;F15nFI$?KaPHH^k%SyBeN-6*I zqJ6)s%@w<|$)~Q0GDmGy;Wz~Y(m4b#*6?+0w;q+Uu+`gMidh#o`WYKRGk0d88m}x1)$|l+vM^ zwkcAVB|h(!Th`T|1GM2S(j)Udj6zCVhn^+ErY&TJ$1 zcs#_LOb+qQ)H3HBwsHP7PT9Pb$H(lm(m4V+Tphe;ct;I-^p|~g`AyA6Yzz=+n#3>8?0NaP1c2eL z3W=*~(_oOLD)obC$u!97$)H%XrVXV@J`E#1Wxe~G&S%6&0Fv7LR#LfCxj!X;K~=Ek z(e+2CH*ngh*fk2ZkJ&&uiUyGaMir+a4T(?tZrj5^6Md?asFFizYp zl`28cLsm|n8ywM*h3X)(agnMK6hCDr6)Op(OGv+^56mDjE8O7#Vsbm~y2wJ*(+*;@ zTAkt81B9cnZ-otim)w^B;vrK>54Gn;8~MZD`mym-dYX`@r%zAO*T0xnKSBFcHDQEG zGG*4*wmOC^8feTnofUg;#d0wOi6e7vI~t=0VV@Bfo^#|dycG@8vtdezvD7Ihr)kSgz6;phD8{jdqI0UZ+Cb#d zE7jCjKD*BEQcx$fNjIcLgNUe-gktM7^PQN0NwQS~T;kZkc65UzEcC-Q$i%m<-ZzG7 z7Tu+OlkQ|4By>wEIjvMc-hr+h_^Fgs?vgnZFDA00*!Noc@aPO6kEB9^n3R)J#XNb&Kc5Rl$v0t)~frmmr)4p)Jz z2Awfh3>v#EAbU#K6YrECS?520IdwLiHpQfUytBiy(^) b^zAw2}v$p!#xW{s*g@woIi&o_ej literal 0 HcmV?d00001 From 0b35e9f2fd7d64b3f770b4b20174d62bf7406fc2 Mon Sep 17 00:00:00 2001 From: echel0n Date: Sun, 21 Dec 2014 17:14:11 -0800 Subject: [PATCH 004/156] Dropped pastebin and switched to using Gist's for attaching logs to issue reports. --- lib/pastebin.py | 710 -------------------------------------------- sickbeard/logger.py | 17 +- 2 files changed, 8 insertions(+), 719 deletions(-) delete mode 100644 lib/pastebin.py diff --git a/lib/pastebin.py b/lib/pastebin.py deleted file mode 100644 index 3211d06d..00000000 --- a/lib/pastebin.py +++ /dev/null @@ -1,710 +0,0 @@ -#!/usr/bin/env python - -############################################################################# -# Pastebin.py - Python 3.2 Pastebin API. -# Copyright (C) 2012 Ian Havelock -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -############################################################################# - -# This software is a derivative work of: -# http://winappdbg.sourceforge.net/blog/pastebin.py - -############################################################################# - - -__all__ = ['delete_paste', 'user_details', 'trending', 'pastes_by_user', - 'generate_user_key', 'paste', 'PastebinAPI', 'PastebinError'] - -import sys -import urllib - -class PastebinError(RuntimeError): - """Pastebin API error. - - The error message returned by the web application is stored as the Python - exception message.""" - -class PastebinAPI(object): - """Pastebin API interaction object. - - Public functions: - - paste -- Pastes a user-specified file or string using the new API-key POST - method. - - generate_user_key -- Generates a session-key that is required for other - functions. - - pastes_by_user -- Returns all public pastes submitted by the specified login - credentials. - - trending -- Returns the top trending paste. - - user_details -- Returns details about the user for the specified API user - key. - - delete_paste -- Adds two numbers together and returns the result.""" - - # String to determine bad API requests - _bad_request = 'Bad API request' - - # Base domain name - _base_domain = 'pastebin.com' - - # Valid Pastebin URLs begin with this string (kinda bvious) - _prefix_url = 'http://%s/' % _base_domain - - # Valid Pastebin URLs with a custom subdomain begin with this string - _subdomain_url = 'http://%%s.%s/' % _base_domain - - # DEPRECATED - # URL to the LEGACY POST API - #_legacy_api_url = 'http://%s/api_public.php' % _base_domain - - # URL to the POST API - _api_url = 'http://%s/api/api_post.php' % _base_domain - - # URL to the Login API - _api_login_url = 'http://%s/api/api_login.php' % _base_domain - - # Valid paste_expire_date values (Never, 10 minutes, 1 Hour, 1 Day, 1 Month) - paste_expire_date = ('N', '10M', '1H', '1D', '1M') - - # Valid paste_expire_date values (0 = public, 1 = unlisted, 2 = private) - paste_private = ('public', 'unlisted', 'private') - - # Valid parse_format values - paste_format = ( - '4cs', # 4CS - '6502acme', # 6502 ACME Cross Assembler - '6502kickass', # 6502 Kick Assembler - '6502tasm', # 6502 TASM/64TASS - 'abap', # ABAP - 'actionscript', # ActionScript - 'actionscript3', # ActionScript 3 - 'ada', # Ada - 'algol68', # ALGOL 68 - 'apache', # Apache Log - 'applescript', # AppleScript - 'apt_sources', # APT Sources - 'asm', # ASM (NASM) - 'asp', # ASP - 'autoconf', # autoconf - 'autohotkey', # Autohotkey - 'autoit', # AutoIt - 'avisynth', # Avisynth - 'awk', # Awk - 'bascomavr', # BASCOM AVR - 'bash', # Bash - 'basic4gl', # Basic4GL - 'bibtex', # BibTeX - 'blitzbasic', # Blitz Basic - 'bnf', # BNF - 'boo', # BOO - 'bf', # BrainFuck - 'c', # C - 'c_mac', # C for Macs - 'cil', # C Intermediate Language - 'csharp', # C# - 'cpp', # C++ - 'cpp-qt', # C++ (with QT extensions) - 'c_loadrunner', # C: Loadrunner - 'caddcl', # CAD DCL - 'cadlisp', # CAD Lisp - 'cfdg', # CFDG - 'chaiscript', # ChaiScript - 'clojure', # Clojure - 'klonec', # Clone C - 'klonecpp', # Clone C++ - 'cmake', # CMake - 'cobol', # COBOL - 'coffeescript', # CoffeeScript - 'cfm', # ColdFusion - 'css', # CSS - 'cuesheet', # Cuesheet - 'd', # D - 'dcs', # DCS - 'delphi', # Delphi - 'oxygene', # Delphi Prism (Oxygene) - 'diff', # Diff - 'div', # DIV - 'dos', # DOS - 'dot', # DOT - 'e', # E - 'ecmascript', # ECMAScript - 'eiffel', # Eiffel - 'email', # Email - 'epc', # EPC - 'erlang', # Erlang - 'fsharp', # F# - 'falcon', # Falcon - 'fo', # FO Language - 'f1', # Formula One - 'fortran', # Fortran - 'freebasic', # FreeBasic - 'freeswitch', # FreeSWITCH - 'gambas', # GAMBAS - 'gml', # Game Maker - 'gdb', # GDB - 'genero', # Genero - 'genie', # Genie - 'gettext', # GetText - 'go', # Go - 'groovy', # Groovy - 'gwbasic', # GwBasic - 'haskell', # Haskell - 'hicest', # HicEst - 'hq9plus', # HQ9 Plus - 'html4strict', # HTML - 'html5', # HTML 5 - 'icon', # Icon - 'idl', # IDL - 'ini', # INI file - 'inno', # Inno Script - 'intercal', # INTERCAL - 'io', # IO - 'j', # J - 'java', # Java - 'java5', # Java 5 - 'javascript', # JavaScript - 'jquery', # jQuery - 'kixtart', # KiXtart - 'latex', # Latex - 'lb', # Liberty BASIC - 'lsl2', # Linden Scripting - 'lisp', # Lisp - 'llvm', # LLVM - 'locobasic', # Loco Basic - 'logtalk', # Logtalk - 'lolcode', # LOL Code - 'lotusformulas', # Lotus Formulas - 'lotusscript', # Lotus Script - 'lscript', # LScript - 'lua', # Lua - 'm68k', # M68000 Assembler - 'magiksf', # MagikSF - 'make', # Make - 'mapbasic', # MapBasic - 'matlab', # MatLab - 'mirc', # mIRC - 'mmix', # MIX Assembler - 'modula2', # Modula 2 - 'modula3', # Modula 3 - '68000devpac', # Motorola 68000 HiSoft Dev - 'mpasm', # MPASM - 'mxml', # MXML - 'mysql', # MySQL - 'newlisp', # newLISP - 'text', # None - 'nsis', # NullSoft Installer - 'oberon2', # Oberon 2 - 'objeck', # Objeck Programming Langua - 'objc', # Objective C - 'ocaml-brief', # OCalm Brief - 'ocaml', # OCaml - 'pf', # OpenBSD PACKET FILTER - 'glsl', # OpenGL Shading - 'oobas', # Openoffice BASIC - 'oracle11', # Oracle 11 - 'oracle8', # Oracle 8 - 'oz', # Oz - 'pascal', # Pascal - 'pawn', # PAWN - 'pcre', # PCRE - 'per', # Per - 'perl', # Perl - 'perl6', # Perl 6 - 'php', # PHP - 'php-brief', # PHP Brief - 'pic16', # Pic 16 - 'pike', # Pike - 'pixelbender', # Pixel Bender - 'plsql', # PL/SQL - 'postgresql', # PostgreSQL - 'povray', # POV-Ray - 'powershell', # Power Shell - 'powerbuilder', # PowerBuilder - 'proftpd', # ProFTPd - 'progress', # Progress - 'prolog', # Prolog - 'properties', # Properties - 'providex', # ProvideX - 'purebasic', # PureBasic - 'pycon', # PyCon - 'python', # Python - 'q', # q/kdb+ - 'qbasic', # QBasic - 'rsplus', # R - 'rails', # Rails - 'rebol', # REBOL - 'reg', # REG - 'robots', # Robots - 'rpmspec', # RPM Spec - 'ruby', # Ruby - 'gnuplot', # Ruby Gnuplot - 'sas', # SAS - 'scala', # Scala - 'scheme', # Scheme - 'scilab', # Scilab - 'sdlbasic', # SdlBasic - 'smalltalk', # Smalltalk - 'smarty', # Smarty - 'sql', # SQL - 'systemverilog', # SystemVerilog - 'tsql', # T-SQL - 'tcl', # TCL - 'teraterm', # Tera Term - 'thinbasic', # thinBasic - 'typoscript', # TypoScript - 'unicon', # Unicon - 'uscript', # UnrealScript - 'vala', # Vala - 'vbnet', # VB.NET - 'verilog', # VeriLog - 'vhdl', # VHDL - 'vim', # VIM - 'visualprolog', # Visual Pro Log - 'vb', # VisualBasic - 'visualfoxpro', # VisualFoxPro - 'whitespace', # WhiteSpace - 'whois', # WHOIS - 'winbatch', # Winbatch - 'xbasic', # XBasic - 'xml', # XML - 'xorg_conf', # Xorg Config - 'xpp', # XPP - 'yaml', # YAML - 'z80', # Z80 Assembler - 'zxbasic', # ZXBasic - ) - - def __init__(self): - pass - - - def delete_paste(self, api_dev_key, api_user_key, api_paste_key): - """Delete the paste specified by the api_paste_key. - - - Usage Example:: - >>> from pastebin import PastebinAPI - >>> x = PastebinAPI() - >>> paste_to_delete = x.delete_paste('453a994e0e2f1efae07f8759e59e075b', - ... 'c57a18e6c0ae228cd4bd16fe36da381a', - ... 'WkgcTFtv') - >>> print paste_to_delete - Paste Removed - - - @type api_dev_key: string - @param api_dev_key: The API Developer Key of a registered U{http://pastebin.com} account. - - @type api_user_key: string - @param api_user_key: The API User Key of a U{http://pastebin.com} registered user. - - @type api_paste_key: string - @param api_paste_key: The Paste Key of the paste to be deleted (string after final / in U{http://pastebin.com} URL). - - @rtype: string - @returns: A successful deletion returns 'Paste Removed'. - """ - - # Valid api developer key - argv = {'api_dev_key' : str(api_dev_key) } - - # Requires pre-registered account - if api_user_key is not None: - argv['api_user_key'] = str(api_user_key) - - # Key of the paste to be deleted. - if api_paste_key is not None: - argv['api_paste_key'] = str(api_paste_key) - - # Valid API option - 'user_details' in this instance - argv['api_option'] = str('delete') - - - # lets try to read the URL that we've just built. - request = urllib.urlopen(self._api_url, urllib.urlencode(argv)) - response = request_string.read() - - return response - - - def user_details(self, api_dev_key, api_user_key): - """Return user details of the user specified by the api_user_key. - - - Usage Example:: - >>> from pastebin import PastebinAPI - >>> x = PastebinAPI() - >>> details = x.user_details('453a994e0e2f1efae07f8759e59e075b', - ... 'c57a18e6c0ae228cd4bd16fe36da381a') - >>> print details - - MonkeyPuzzle - python - N - http://pastebin.com/i/guest.gif - 0 - - user@email.com - - 0 - - - - @type api_dev_key: string - @param api_dev_key: The API Developer Key of a registered U{http://pastebin.com} account. - - @type api_user_key: string - @param api_user_key: The API User Key of a U{http://pastebin.com} registered user. - - @rtype: string - @returns: Returns an XML string containing user information. - """ - - # Valid api developer key - argv = {'api_dev_key' : str(api_dev_key) } - - # Requires pre-registered account to generate an api_user_key - # (see generate_user_key) - if api_user_key is not None: - argv['api_user_key'] = str(api_user_key) - - # Valid API option - 'user_details' in this instance - argv['api_option'] = str('userdetails') - - # lets try to read the URL that we've just built. - request_string = urllib.urlopen(self._api_url, urllib.urlencode(argv)) - response = request_string.read() - - # do some basic error checking here so we can gracefully handle any - # errors we are likely to encounter - if response.startswith(self._bad_request): - raise PastebinError(response) - - elif not response.startswith(''): - raise PastebinError(response) - - return response - - - def trending(self, api_dev_key): - """Returns the top trending paste details. - - - Usage Example:: - >>> from pastebin import PastebinAPI - >>> x = PastebinAPI() - >>> details = x.trending('453a994e0e2f1efae07f8759e59e075b') - >>> print details - - jjMRFDH6 - 1333230838 - - 6416 - 0 - 0 - None - text - http://pastebin.com/jjMRFDH6 - 6384 - - - Note: Returns multiple trending pastes, not just 1. - - - @type api_dev_key: string - @param api_dev_key: The API Developer Key of a registered U{http://pastebin.com} account. - - - @rtype: string - @return: Returns the string (XML formatted) containing the top trending pastes. - """ - - # Valid api developer key - argv = {'api_dev_key' : str(api_dev_key) } - - # Valid API option - 'trends' is returns trending pastes - argv['api_option'] = str('trends') - - # lets try to read the URL that we've just built. - request_string = urllib.urlopen(self._api_url, urllib.urlencode(argv)) - response = request_string.read() - - # do some basic error checking here so we can gracefully handle any - # errors we are likely to encounter - if response.startswith(self._bad_request): - raise PastebinError(response) - - elif not response.startswith(''): - raise PastebinError(response) - - return response - - - def pastes_by_user(self, api_dev_key, api_user_key, results_limit = None): - """Returns all pastes for the provided api_user_key. - - - Usage Example:: - >>> from pastebin import PastebinAPI - >>> x = PastebinAPI() - >>> details = x.user_details('453a994e0e2f1efae07f8759e59e075b', - ... 'c57a18e6c0ae228cd4bd16fe36da381a', - ... 100) - >>> print details - - DLiSspYT - 1332714730 - Pastebin.py - Python 3.2 Pastebin.com API - 25300 - 0 - 0 - Python - python - http://pastebin.com/DLiSspYT - 70 - - - Note: Returns multiple pastes, not just 1. - - - @type api_dev_key: string - @param api_dev_key: The API Developer Key of a registered U{http://pastebin.com} account. - - @type api_user_key: string - @param api_user_key: The API User Key of a U{http://pastebin.com} registered user. - - @type results_limit: number - @param results_limit: The number of pastes to return between 1 - 1000. - - @rtype: string - @returns: Returns an XML string containing number of specified pastes by user. - """ - - # Valid api developer key - argv = {'api_dev_key' : str(api_dev_key) } - - # Requires pre-registered account - if api_user_key is not None: - argv['api_user_key'] = str(api_user_key) - - # Number of results to return - between 1 & 1000, default = 50 - if results_limit is None: - argv['api_results_limit'] = 50 - - if results_limit is not None: - if results_limit < 1: - argv['api_results_limit'] = 50 - elif results_limit > 1000: - argv['api_results_limit'] = 1000 - else: - argv['api_results_limit'] = int(results_limit) - - # Valid API option - 'paste' is default for new paste - argv['api_option'] = str('list') - - # lets try to read the URL that we've just built. - request_string = urllib.urlopen(self._api_url, urllib.urlencode(argv)) - response = request_string.read() - - # do some basic error checking here so we can gracefully handle any - # errors we are likely to encounter - if response.startswith(self._bad_request): - raise PastebinError(response) - - elif not response.startswith(''): - raise PastebinError(response) - - return response - - - def generate_user_key(self, api_dev_key, username, password): - """Generate a user session key - needed for other functions. - - - Usage Example:: - >>> from pastebin import PastebinAPI - >>> x = PastebinAPI() - >>> my_key = x.generate_user_key('453a994e0e2f1efae07f8759e59e075b', - ... 'MonkeyPuzzle', - ... '12345678') - >>> print my_key - c57a18e6c0ae228cd4bd16fe36da381a - - - @type api_dev_key: string - @param api_dev_key: The API Developer Key of a registered U{http://pastebin.com} account. - - @type username: string - @param username: The username of a registered U{http://pastebin.com} account. - - @type password: string - @param password: The password of a registered U{http://pastebin.com} account. - - @rtype: string - @returns: Session key (api_user_key) to allow authenticated interaction to the API. - - """ - # Valid api developer key - argv = {'api_dev_key' : str(api_dev_key) } - - # Requires pre-registered pastebin account - if username is not None: - argv['api_user_name'] = str(username) - - # Requires pre-registered pastebin account - if password is not None: - argv['api_user_password'] = str(password) - - # lets try to read the URL that we've just built. - request_string = urllib.urlopen(self._api_login_url, urllib.urlencode(argv)) - response = request_string.read() - - # do some basic error checking here so we can gracefully handle any errors we are likely to encounter - if response.startswith(self._bad_request): - raise PastebinError(response) - - return response - - - def paste(self, api_dev_key, api_paste_code, - api_user_key = None, paste_name = None, paste_format = None, - paste_private = None, paste_expire_date = None): - - """Submit a code snippet to Pastebin using the new API. - - - Usage Example:: - >>> from pastebin import PastebinAPI - >>> x = PastebinAPI() - >>> url = x.paste('453a994e0e2f1efae07f8759e59e075b' , - ... 'Snippet of code to paste goes here', - ... paste_name = 'title of paste', - ... api_user_key = 'c57a18e6c0ae228cd4bd16fe36da381a', - ... paste_format = 'python', - ... paste_private = 'unlisted', - ... paste_expire_date = '10M') - >>> print url - http://pastebin.com/tawPUgqY - - - @type api_dev_key: string - @param api_dev_key: The API Developer Key of a registered U{http://pastebin.com} account. - - @type api_paste_code: string - @param api_paste_code: The file or string to paste to body of the U{http://pastebin.com} paste. - - @type api_user_key: string - @param api_user_key: The API User Key of a U{http://pastebin.com} registered user. - If none specified, paste is made as a guest. - - @type paste_name: string - @param paste_name: (Optional) Title of the paste. - Default is to paste anonymously. - - @type paste_format: string - @param paste_format: (Optional) Programming language of the code being - pasted. This enables syntax highlighting when reading the code in - U{http://pastebin.com}. Default is no syntax highlighting (text is - just text and not source code). - - @type paste_private: string - @param paste_private: (Optional) C{'public'} if the paste is public (visible - by everyone), C{'unlisted'} if it's public but not searchable. - C{'private'} if the paste is private and not searchable or indexed. - The Pastebin FAQ (U{http://pastebin.com/faq}) claims - private pastes are not indexed by search engines (aka Google). - - @type paste_expire_date: str - @param paste_expire_date: (Optional) Expiration date for the paste. - Once past this date the paste is deleted automatically. Valid - values are found in the L{PastebinAPI.paste_expire_date} class member. - If not provided, the paste never expires. - - @rtype: string - @return: Returns the URL to the newly created paste. - """ - - - # Valid api developer key - argv = {'api_dev_key' : str(api_dev_key) } - - # Code snippet to submit - if api_paste_code is not None: - argv['api_paste_code'] = str(api_paste_code) - - # Valid API option - 'paste' is default for new paste - argv['api_option'] = str('paste') - - # API User Key - if api_user_key is not None: - argv['api_user_key'] = str(api_user_key) - elif api_user_key is None: - argv['api_user_key'] = str('') - - # Name of the poster - if paste_name is not None: - argv['api_paste_name'] = str(paste_name) - - # Syntax highlighting - if paste_format is not None: - paste_format = str(paste_format).strip().lower() - argv['api_paste_format'] = paste_format - - # Is the snippet private? - if paste_private is not None: - if paste_private == 'public': - argv['api_paste_private'] = int(0) - elif paste_private == 'unlisted': - argv['api_paste_private'] = int(1) - elif paste_private == 'private': - argv['api_paste_private'] = int(2) - - # Expiration for the snippet - if paste_expire_date is not None: - paste_expire_date = str(paste_expire_date).strip().upper() - argv['api_paste_expire_date'] = paste_expire_date - - # lets try to read the URL that we've just built. - request_string = urllib.urlopen(self._api_url, urllib.urlencode(argv)) - response = request_string.read() - - # do some basic error checking here so we can gracefully handle any - # errors we are likely to encounter - if response.startswith(self._bad_request): - raise PastebinError(response) - elif not response.startswith(self._prefix_url): - raise PastebinError(response) - - return response - - -###################################################### - -delete_paste = PastebinAPI.delete_paste -user_details = PastebinAPI.user_details -trending = PastebinAPI.trending -pastes_by_user = PastebinAPI.pastes_by_user -generate_user_key = PastebinAPI.generate_user_key -paste = PastebinAPI.paste - -###################################################### - -if __name__ == "__main__": - main() diff --git a/sickbeard/logger.py b/sickbeard/logger.py index 323c43c9..9ea47133 100644 --- a/sickbeard/logger.py +++ b/sickbeard/logger.py @@ -27,8 +27,7 @@ import platform import sickbeard from sickbeard import classes, encodingKludge as ek -from github import Github -from pastebin import PastebinAPI +from github import Github, InputFileContent # log levels ERROR = logging.ERROR @@ -149,11 +148,11 @@ class Logger(object): gh_org = sickbeard.GIT_ORG or 'SiCKRAGETV' gh_repo = 'sickrage-issues' - gh_issues = Github(login_or_token=sickbeard.GIT_USERNAME, password=sickbeard.GIT_PASSWORD, - user_agent="SiCKRAGE").get_organization(gh_org).get_repo(gh_repo) + gh = Github(login_or_token=sickbeard.GIT_USERNAME, password=sickbeard.GIT_PASSWORD, user_agent="SiCKRAGE") try: # read log file + log_data = None if self.logFile and os.path.isfile(self.logFile): with ek.ek(open, self.logFile) as f: log_data = f.readlines() @@ -164,7 +163,7 @@ class Logger(object): if not curError.title: continue - pastebin_url = None + gist = None regex = "^(%s)\s*([A-Z]+)\s*(.+?)\s*\:\:\s*(.*)$" % curError.time for i, x in enumerate(log_data): x = ek.ss(x) @@ -173,7 +172,7 @@ class Logger(object): level = match.group(2) if reverseNames[level] == ERROR: paste_data = "".join(log_data[i:50]) - pastebin_url = PastebinAPI().paste('f59b8e9fa1fc2d033e399e6c7fb09d19', paste_data) + gist = gh.get_user().create_gist(True, {"sickrage.log": InputFileContent(paste_data)}) break message = u"### INFO\n" @@ -181,8 +180,8 @@ class Logger(object): message += u"Operating System: **" + platform.platform() + "**\n" message += u"Branch: **" + sickbeard.BRANCH + "**\n" message += u"Commit: SiCKRAGETV/SickRage@" + sickbeard.CUR_COMMIT_HASH + "\n" - if pastebin_url: - message += u"Pastebin Log URL: " + pastebin_url + "\n" + if gist: + message += u"Link to Log: " + gist.html_url + "\n" message += u"### ERROR\n" message += u"```\n" message += curError.message + "\n" @@ -190,7 +189,7 @@ class Logger(object): message += u"---\n" message += u"_STAFF NOTIFIED_: @SiCKRAGETV/owners @SiCKRAGETV/moderators" - issue = gh_issues.create_issue("[APP SUBMITTED]: " + curError.title, message) + issue = gh.get_organization(gh_org).get_repo(gh_repo).create_issue("[APP SUBMITTED]: " + curError.title, message) if issue: self.log('Your issue ticket #%s was submitted successfully!' % issue.number) From 68e4acaf3730a114ccabc9585d8958676257142d Mon Sep 17 00:00:00 2001 From: echel0n Date: Sun, 21 Dec 2014 19:01:52 -0800 Subject: [PATCH 005/156] Fix for sickragetv/sickrage-issues#256 --- sickbeard/postProcessor.py | 2 ++ sickbeard/tv.py | 7 +------ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py index 02cf37d1..d4d2b03f 100644 --- a/sickbeard/postProcessor.py +++ b/sickbeard/postProcessor.py @@ -624,6 +624,8 @@ class PostProcessor(object): # now that we've figured out which episode this file is just load it manually try: curEp = show.getEpisode(season, cur_episode) + if not curEp: + raise exceptions.EpisodeNotFoundException() except exceptions.EpisodeNotFoundException, e: self._log(u"Unable to create episode: " + ex(e), logger.DEBUG) raise exceptions.PostProcessingFailed() diff --git a/sickbeard/tv.py b/sickbeard/tv.py index df39d1af..1c1e27ee 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -1585,12 +1585,7 @@ class TVEpisode(object): self.dirty = False return True - def loadFromIndexer(self, season=None, episode=None, cache=True, tvapi=None, cachedSeason=None): - - if season is None: - season = self.season - if episode is None: - episode = self.episode + def loadFromIndexer(self, season, episode, cache=True, tvapi=None, cachedSeason=None): logger.log(str(self.show.indexerid) + u": Loading episode details from " + sickbeard.indexerApi( self.show.indexer).name + " for episode " + str(season) + "x" + str(episode), logger.DEBUG) From d6c856cabe7b2b8cc9e729748e9856fdb2bf10b3 Mon Sep 17 00:00:00 2001 From: markheloking Date: Mon, 22 Dec 2014 14:48:23 +0100 Subject: [PATCH 006/156] Update&add canadian network logos Added logos for tele quebec, tva, V and more --- gui/slick/images/network/radio canada.png | Bin 1644 -> 3836 bytes gui/slick/images/network/src.png | Bin 0 -> 3836 bytes gui/slick/images/network/tva.png | Bin 0 -> 7349 bytes gui/slick/images/network/télé-québec.png | Bin 0 -> 6270 bytes gui/slick/images/network/v.png | Bin 0 -> 5873 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 gui/slick/images/network/src.png create mode 100644 gui/slick/images/network/tva.png create mode 100644 gui/slick/images/network/télé-québec.png create mode 100644 gui/slick/images/network/v.png diff --git a/gui/slick/images/network/radio canada.png b/gui/slick/images/network/radio canada.png index f91bb09ab3e94b294cddd5d2f62dd2c124a67fbb..ea0fb921565f5c5676bd50dd4c4828bac4dc7d24 100644 GIT binary patch literal 3836 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 diff --git a/gui/slick/images/network/src.png b/gui/slick/images/network/src.png new file mode 100644 index 0000000000000000000000000000000000000000..ea0fb921565f5c5676bd50dd4c4828bac4dc7d24 GIT binary patch literal 3836 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 literal 0 HcmV?d00001 diff --git a/gui/slick/images/network/v.png b/gui/slick/images/network/v.png new file mode 100644 index 0000000000000000000000000000000000000000..029ff4b667590d25aa4dff024785e287dd8d20db GIT binary patch literal 5873 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 Date: Tue, 23 Dec 2014 17:59:53 -0200 Subject: [PATCH 007/156] Don't re-download same quality if we do MANUAL SEARCH If we want to re-download the same quality, set as WANTED. As mentioned in here: https://github.com/SiCKRAGETV/sickrage-issues/issues/206 --- sickbeard/tv.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 1c1e27ee..1e7a5373 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -1224,11 +1224,11 @@ class TVShow(object): if epStatus in (WANTED, UNAIRED, SKIPPED): logger.log(u"Existing episode status is wanted/unaired/skipped, getting found episode", logger.DEBUG) return True - elif manualSearch: - logger.log( - u"Usually ignoring found episode, but forced search allows the quality, getting found episode", - logger.DEBUG) - return True + #elif manualSearch: + # logger.log( + # u"Usually ignoring found episode, but forced search allows the quality, getting found episode", + # logger.DEBUG) + # return True else: logger.log(u"Quality is on wanted list, need to check if it's better than existing quality", logger.DEBUG) From 972ee14216a6146e69fa909355791380d4c4e1bf Mon Sep 17 00:00:00 2001 From: echel0n Date: Tue, 23 Dec 2014 22:38:15 -0800 Subject: [PATCH 008/156] Fix for sickragetv/sickrage-issues#263 --- sickbeard/tv.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 1c1e27ee..df39d1af 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -1585,7 +1585,12 @@ class TVEpisode(object): self.dirty = False return True - def loadFromIndexer(self, season, episode, cache=True, tvapi=None, cachedSeason=None): + def loadFromIndexer(self, season=None, episode=None, cache=True, tvapi=None, cachedSeason=None): + + if season is None: + season = self.season + if episode is None: + episode = self.episode logger.log(str(self.show.indexerid) + u": Loading episode details from " + sickbeard.indexerApi( self.show.indexer).name + " for episode " + str(season) + "x" + str(episode), logger.DEBUG) From 0da960ff51c4c13441bc6bbda36fd5c8efd75003 Mon Sep 17 00:00:00 2001 From: echel0n Date: Wed, 24 Dec 2014 07:48:36 -0800 Subject: [PATCH 009/156] Fixed issues with newznab custom provider categories. Updated feedparser and added custom code to parse subcategories. Updated jQuery and Bootstrap. --- .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes .../fonts/glyphicons-halflings-regular.svg | 229 ++ .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes gui/slick/css/lib/bootstrap.css | 620 +++-- gui/slick/css/lib/bootstrap.css.map | 1 + gui/slick/css/lib/bootstrap.min.css | 5 + gui/slick/interfaces/default/apiBuilder.tmpl | 2 +- gui/slick/interfaces/default/inc_top.tmpl | 2 +- .../interfaces/default/restart_bare.tmpl | 2 +- gui/slick/js/configProviders.js | 30 +- gui/slick/js/lib/bootstrap.js | 2320 +++++++++++++++ gui/slick/js/lib/bootstrap.min.js | 5 +- gui/slick/js/lib/jquery-1.11.2.min.js | 4 + gui/slick/js/lib/jquery-1.11.2.min.map | 1 + gui/slick/js/lib/jquery-1.8.3.min.js | 2 - gui/slick/js/lib/npm.js | 13 + gui/slick/js/script.js | 7 - lib/feedparser/feedparser.egg-info/PKG-INFO | 30 - .../feedparser.egg-info/SOURCES.txt | 2480 ----------------- .../feedparser.egg-info/dependency_links.txt | 1 - .../feedparser.egg-info/top_level.txt | 1 - lib/feedparser/feedparser.py | 1244 ++++----- lib/feedparser/feedparsertest.py | 62 +- lib/feedparser/{sgmllib3.py => sgmllib.py} | 4 +- .../rss/item_guid_not_permalink_not_url.xml | 2 +- sickbeard/helpers.py | 8 +- sickbeard/providers/animezb.py | 2 +- sickbeard/providers/ezrss.py | 2 +- sickbeard/providers/fanzub.py | 2 +- sickbeard/providers/kat.py | 2 +- sickbeard/providers/newznab.py | 31 +- sickbeard/providers/nyaatorrents.py | 2 +- sickbeard/providers/omgwtfnzbs.py | 2 +- sickbeard/providers/rsstorrent.py | 2 +- sickbeard/providers/tokyotoshokan.py | 2 +- sickbeard/providers/tvtorrents.py | 2 +- sickbeard/providers/womble.py | 2 +- sickbeard/rssfeeds.py | 30 +- tests/feedparser_tests.py | 28 + 40 files changed, 3594 insertions(+), 3590 deletions(-) create mode 100644 gui/slick/css/fonts/glyphicons-halflings-regular.eot create mode 100644 gui/slick/css/fonts/glyphicons-halflings-regular.svg create mode 100644 gui/slick/css/fonts/glyphicons-halflings-regular.ttf create mode 100644 gui/slick/css/fonts/glyphicons-halflings-regular.woff create mode 100644 gui/slick/css/lib/bootstrap.css.map create mode 100644 gui/slick/css/lib/bootstrap.min.css create mode 100644 gui/slick/js/lib/bootstrap.js create mode 100644 gui/slick/js/lib/jquery-1.11.2.min.js create mode 100644 gui/slick/js/lib/jquery-1.11.2.min.map delete mode 100644 gui/slick/js/lib/jquery-1.8.3.min.js create mode 100644 gui/slick/js/lib/npm.js delete mode 100644 lib/feedparser/feedparser.egg-info/PKG-INFO delete mode 100644 lib/feedparser/feedparser.egg-info/SOURCES.txt delete mode 100644 lib/feedparser/feedparser.egg-info/dependency_links.txt delete mode 100644 lib/feedparser/feedparser.egg-info/top_level.txt rename lib/feedparser/{sgmllib3.py => sgmllib.py} (99%) create mode 100644 tests/feedparser_tests.py diff --git a/gui/slick/css/fonts/glyphicons-halflings-regular.eot b/gui/slick/css/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..4a4ca865d67e86f961bc6e2ef00bffa4e34bb9ed GIT binary patch literal 20335 zcma%iRa9Lu*X_aGIXLtH2X}XOcXxM};>BGK?k>gMi@Uo+afec%&=$Y_zI(@iAMVRd zMzYtMnVHGh`(bBgBrYld0G2WU0R1n+0{)ZW{#ye8Pyh%N;2)-_`hS4`dHjR_o8s?3 z%Kr!aAA=Sk15gC$0aO9906BmJKn0)-&;Wq`d1e4dfc3v(2XF@106hNnKnJJ;tp3?v z|4=i4`#;17p#2YV|JP~t*4IuDO^FK=e+xx$$?LVd`z~aAr@Bit+ z4B+|46aYB=Q+D{L`5%t;Kdt|aZw_GpXL0?v@B%pgd3^uI=KcSkIq3hHHvk~6A@l#d zDHwovCxFWvz!d;sGQ^&}h@CLq(3!MVaFhSyL!rg*&d8F%X_&hML`QYBTiRZ}i=N8C zfX|m2SCm$2B^?XKJ=3POS}r1sVM9Nj*l5q`5#S% zQ}FD^zy1Pj*xUGOm4;*C;l80oktO?~%SdX8H^8@@idBFWyOINSr_!xo{REWRlXgw| z3-(h5XcHaEdPKzyy2-P+Rljn4lR?IelEOtWLiC?_9FW&x@kpuRtfsn*-QLS4EoN{{q0u8pt_^hD_!V);D{hen z-XpV~5QeQTYTIl1+B^5r72`!7FRQQ$Jh74=Gm*OkaIoNUC7!wk7rRZVuVK6urnp@}QDpB~9*S zkVWg8LyXz8-%53>GXb$%*H0(bqkUIN`Oz8g=bse?bAumC8`5XqA+(_y{fV^j(1$BZ za*@mJ(&?Dl2k;8tW}O6OaavJE|17u#1t>M^0!@SDJc2)cLZL`m7!-)74CQUXoksM* z9m|Sjh}@dm-Tnc8<77&TfjT6H{3)kXMM774`D!eA0|(RuQz@iQO(4-7lX|aK*M`Y=f%R{_&<*A? zB(AZUl6JXgz^9c9q7ZW~Lpncpv1I^6O4mGX@3P^Q)?jBgx(f#RD_4y0q5aC_beGG> zn%RbEy_vdx`sL?|Jvlgyxal-}XM^FDQYp|Euiu=%8o(=wic+XSimJ4(Adn3`QH6^D zQ}H@oBN{|Zg^2u|@8c~h7Kv&HCx??xy^J$3{B0{XnlrThDaoQqjXjXHi#b!KIjA7( z$hT;Ah_VP&j)(Z6&(xn;KF3rHsF^A#il?$)q4Pp#sly?|%OmoRG|MiNW3+)?3Wd9= zgbUjzTLX+!G&oYj9P;jnHmT91qKPzxkj@>rsqi|=M5$PfrRCY%E7${xLDZFtYcC%k zorpLj$T65dN+HV@=yRlKSS8W~SMxFkK1~U-XW2@DXcG`4-V)z|605uD4Q{MP10fD5 zc!T#)n57))zXXfg=dwnZuD_`DCJc3cHE6HuA(>36o_neqgoF0pRK0eEc~{rD8%Pfh z@dtE6ovkazKj3fd{)*&tB0YA^1d^^?2oeNyB7u(P+O4$@lCNc~%mb5iP)dLGM|z;x zEkRYM_^U`g%s5jiH=8Q2h zlS%BdC6DaYEWi0UNhnc*zFT$fV`4_VMNU~nH;q(Ld?!#lIvm)K;W_4C(l3+4TZ=QI zD%siB%cY+Y7vMFM_KAg?sxm(^nJsMIV?v|vAS8l;zotv$#Ml-Y!n7|X5Y5C)=TiGZ zQ+=(9%lk0&L&hDtwRD=Ua6wQeS{g2mvwc>^|4$ot-2Hi`z)|V$N{mNAEZC3gw_8%z zq(L3Bcwr2gin62dXM8cG-D-auD7HayLz zJI2|m=8$F?Ko>v@P4{(W5g=}-b$%tJgfywp`6&A96|Zx{9N;1@_>hto7TQf3EIMm+ zJ`;@@4ycXnHM>|iJ?FXkWGc8YuGviO&L*^ajd+vyLIxAAT{isADQQM5S;YP+jAYp7 z3E1Nm1HDd%SXi``NR*so7XidvRPj#BM7A`S{cU%VISQOhrMLr08;N36AYg9}40Ml# zU)GUxQy(D1%P`@`HDaXn&%m8`hOu~_2a`%P{v7w2;KUNhll)N(y4wD#p#{+($uLOB z!X;K=sci1erRm1=Qcx#ja(r=E8*89RNH8`C7T4|#uVRc=Kaf}0Xw)>8g0(4H!ZrK^ zh-Kf(V#NQcMU79on9bk?`U7eI{Nu-CdboLYH-7lJI|7VCob2872$p->3n)-J>N|b% zIn3vzKet~nvHB=bP6rDRV|&&4LL}S7`iu2ok&r8ecw~yUROul?44VSV3;z7qSQWl+y^cX=$j~OQ;o~0+_)5WDRF0^JbuD_umr4Mn$EPEyB-_eog^1*P#Ui}dCDH6-GndXgi$XV2SNHe#HHQoU z`2f{kT*~Y-Gtyd}I#v=*PbShJzp4hgaK>cr++;2GSGr7^2gA_3H1F;=06B{L4@fTs zD?F!vb_51Hnzb3BJlYiI4qZ5fDt|CaKX-N&2aP_DVX`bH*FN93cV*3fPvociz|dFF zDI@_;;4`*j9yW7pmnXjEwqe@BEQw*5Kcl$=zJxCo$}$5>0aU8*UXir zlo6vuHSn81M=rz-M|tYukSa7I2M$#Q-7`8&2-+UvW25@8gOf1VSR}3RdVFr|-&}4T zky0u`XuQc%0#b=LJWu5hm&cbB$Zk2FeYD~v-Cc92u|%sIUh-65dJR zZ3)g?oGWe-H6(Dl5E)k2)Hal?$9R73FM9`l`qB^<^f4kuce&|T)yCo{^=_a`TY*c$ zRRh_284jJjLoW$Wjv_@n$8LbXuW0pZw;g`-3$XUHD0Me!pbdD8z$3+L^KKYOabFdl zZW8&J8yRWfjLh?e7QJEkgl<&QwDnZ2^WwgBH0{AjxI^@Q)51nlGRVgj8j^jL0%{L5 zg~N&QybX0(ldaaot?}x4%vuVeTbZ96fpg*k(_p?a+IFGn!YUuS;~_Z0CLyGFeQ=ow zhS}^5R4dLfu9Q@MFw7c5_Tg`%mq$XF81YXSFD~rt=E6o|lVBQmHpMG(*<)M(E(4f* zifS(;Yjenr?~y*l>F20zQ%mciliU45f-wznJZdw(tS7t6>004*2#X3Ej3pco3fi`a z?|gM_ckVQxZ*D!nTeU+|gbdPEj(!rKUXu)| zkLqUGanZqn25Ek?PHa9%4W|%Ad_2AJ^C4ZsK(9AW?d?fe_y54j#ceCX7%ZMmS`{x=_0fcCjb0L>U_D>5f4kNy zHQQg5@4aYV)6gpTnv`z06M5a}w7=9Zxp`bcn&i(EOAPWj!?Z(2O?^DESnGfRDGcs1 z?IvJ*{LKonl7#robcFc@OJ<~_Nrt1&v@ePe#wEFKMxfTA!AwJm2~n9HG8Q3?YR-Yz z9Qm3kx|c48;)6Kyoo?<`!|@@xwp~u#ofuQm>ip4bLvO_8W)9{2phqI7{WR9NLgJ5S zHO8hXtJ(CY)mUG&o(gGo!3Qk!=#XUS13O&o{vweBJ4o1y<~#&5^$s69ECV9xM}=+2 z3!NJW8%Q`f_Ja)nexErX5!VB@V=TLVghSEjRt5vdJ8zuRg0R+Y>(Wb*7ED)es#R7< zyyj>az=m}1XQ+E7Z@KG=Cs|{!+EejQ_B-7_Z_Y;kETxVVJOayFzr&scDu#RzsdT7?ZD( zjt$GiPqMQDN##jNA(UuHMgjopqE;pkUTep+3YhG2G!BnK?~X#v(Hh{G+w3pu5aBF+5$)Hq);#9CbG zsE7UhKwvg;w*V(0K7kvgnm5CXt2oMK#y!&dqW6^CO`o-9h;rpe8sX@M7vdNHrSI)y z9KlvS+@+-`CzlS3h}P)VbJn)MN&1rZJDgsR=F2FHZMpd&S1VRKi;7W;=|X`v`iwr; z6={w%x(Bj(^(a<%?7PB*S%}>sft}U!!qdscsQgT@3X5WihmLBxuS7?1$@SvvJ3<<| zt}Y%yqH_W&6!_(na-jr#Zv7W*Cu#c6Hqr$o{eMTHmIWfcuI+rsXc1x$ibc)|lxs`| z^lhQp&^b^BTL(xEI!6k8bxom-D8C}+6_a%`?CYjSuFcEh5J1&Y`Z-6Dj-I`%()n$9 zg*b<&Zs^xdC{p2ab~}fxiuobr7XT7pIefDq+B0S-e*#Ncv}xLJi{{yPWu)?Esyu0; z1qsK_FAEg-C+$p0cp*xgs1s4btkM&3lqqeQRpD2eomd(OP0Q@*e&Xas38amh5^boC zOw$(pnvN$4MdoQ_u*a%EGU#34!L8h;hCq2qu>vma`dr@6OJ$uR*Uy0|v+9(q#{vUE z-6#WJn9K=D1b|=3z9t2tlyis<332BeH7r+zY@~b=^WA5yuvSMiyU=H97SQ7PJ=xDq8^5h@!5s)7NwIC(^9c}UqFKh>XnFPu|+L@P;S z3sSA!`G>+GcF}A^nfl|n_2P=oi#0>A$BphJo^niV$39q>jBn7=yG3jodFC|0-)C$R z@AvsPawzRcdI+N@#+XCUhE-bV6R(fb0#L8<{kZo-bBF0d_eb2=Oq%CRy|M%BGBmTi z*(vF=mDqfB)Ffbr1WObL5rtaXXn7h$vMIMyd!!E!)5Fe{yHa{ZKHpGwQ9J-@cQ$OX z8Bux&6WJ%|zF+jJZ&(g-&u~QV-Y_~q?DJ>#3~9WiBeIU_uh)eb{b{VUn_K9kFfYXL z#W?5L8z;XrA?Kc&ua35Hi_uhWghl9)h*)J}%wG+Xnnp2ZOl*YtK3VQxUMfBM+z>E2 zeI`!tBDijjXYxlLEZu7t_T<~!mR0{o>6W*Ejr z6v8z^G$W!dDq*^y$WbyhI)x}-s>tdk0{-;A z91U?k6Rg*%T*U)Uv_PP_}4jhJ6|~ z)$B}m4(d`YtCBcrVbz?cQGo|NhMK(@OnGsU7OAKgUBJLh?E@OO@sfUG8M``oQbcDgDKEy^t6!AhE@HqgSG<3Q{ND7tH!G1 zQFCZgl=Ykxr~0pdq)`n2y3~Y0cvkO5i!CLTAc68-9cOMi2c29BTcg!W5=XzHR68tT zH%o4w$B?>YF0Aq0w*Q@DIf|UyjajcxO2`!Av{p;s2#z_Xfp*{$2fM>65~br|rCyhX zcrN@r4!w~3imlj-eew7qq8d&vtYnSAT9&|&Y&=~}zF5=-5at@Gr1s6~`eBk{nJh+@ z#(=xEI>c6xXU(ucS*a_!ww@WYvo?~@3dBjqAUH~h9mW5q!R#);8l%8+oJnb+-ydqv)LHQJSgY=p%{@~Fk(V6=o{<5fV>)fPWOyXSo|G?G=*~> z?z><)(Ss@lE|vU-2vhORxCM>@LEx4O{!kmzI5 zFUOuOX^BHASj%#FATqS(FnqPTp^|Sq;eg3wKvIzUJ%FNpoCY`^OPv(^>&j{V#RFzE z@3Y)bA(4m_iaS`J&gG(v^)Jth;W$iESCeCBA1#B(N63V{dggoJ%RQn}c>a@^%gazJ zI$Shg5yVpcpnJOOWY^dBUI=3iC>#a1p2NQs|b zgZHukR9HwV8Sgp{#+jN7ZB3DI6~hIHv@&% z=$?K2gzM;xC?K<9N0|-BMSk4bLI)uB*!ugfY0qP3R%y5O?&{Xfzojfbw?zj^P+_;e zRVm>&GsN)=HBH+0BHxJo&ckuL8w0=_w~q6R{ghxeMmsDh;9@n%VFE`Zx%pQglC=A4 zmJFxIgNwqP)8^b#RwBGP+eI;wi}{^pYMTtQ4h21k5DL#G?TZ4VCjrqHlXx z5GWyy1)M+9Im*H1Nb!*p1miCdMHEs>^!0KnPX60;FztLJwN}7vh;E>|7i^aSKwZPp zbmc@;Z{n(|)caxrl1Z94YDTS$mif`TC>B#m4S#$l?uReS>1@v!TRjv$vg^osFiop z3Ec1yBx|_DM8|$B+gdt2+Wo8>VSiOZMk{KxbsETEqXrMe43bz3J;k2|bk1|VfW}}N ziBRxsE0VSSOf}i%^gY0FFMldwBHt78EjW?Hs`TiH)s0WX#E(VMU>!x(pRNEl0?(%d z(09!|c3J9g+xi&)MKNr%Lz~VacC(%gKWoY@ID6_>a>(E=mVmuqrKtH5d$d}xX&NeD z5RiuBXo9`O{xL>+V-49mRc(3kT+>qNP814Xc&F=6k?M%@t6NOb@@_X`d3htI>|zGN z&z3d$7^TV;cV+eyHCzB+pyNz1atbYX3gZfiSjHB<0Ehv&M)7xxzlJu32@Iosx5?qd z-7Ka#WS9+1pr}6b%d2z-ZT+Fzpf`63fy)jTb-|y39hX-WFKTi7kn^+4(;QJI%l!pK ze2L!7r+ad0PfD2bsar6XgD>XWJxwwoHCORf9r0VEIM_qM zCzw=0@8aB8TV{tjzE5zvR&0MR>so`xq~rHSLBuI)mS!Dh1{CI~)~Nb^?^R@Gb*0A1 z=&MnM%PG*qmrKBjp8ZIYS@DFDNwe5Ww=2e65vs{7e0?Ou*xB{?A9P$i{y zM|4xJ3)%!G%8d{u-AC5&>)0?3EeMgln4Yut1`I~s-Cl*~G*Ri1k>5}JY295;&pq@- z#Lm^4Hp$Vz)X?2y^sW@;*ClyG-%gBU|LBB2+bG$zX%YcrI$cSa$$Sdz2EBDDiX$!I z{_-)%I3e)hC3KOBqNUpTOsPtReVV3GD|?sDzlEY;lsV>UYEWf_58h)t*RN0JkrGu0p9p8L{s_RPwvTR zXR9)eJN*RNMO^RZbZOXGNdieWgVSs&xvqTIv}1x>vCDtEk6_WWAVXu?Nu7sREv!;U zh%KMgdA}u72`Xz6{1nx8ud@3we5$9_>x#f2Ci}@h{1$Fh&}3CiF{d z+}gjEHbU-5+06vi&lbqcVU4dKyM_2lgko*2LU$@58M9ER0>@8%8{Q`H zM^pmfKp*!)YkLi|P(GT%H`-^=EmrEUhQ4I?ux{(gb8Cfs3Y;=$r!4-O%2yn10(6sR zU6xmo^&_$SnfCEbTemLPST3#%z3J!5Y}po{ihZicg?6_ADfUcz?o1} zmJxCzhnNT~o!=vhmRTEXGQ4OT$Zvhr5{5Midj2y-p}oGVqRFwQiNxp#2-*sjF6fsF zV6XhhsSL>wR!QmL`QcBPeEpof>)1LNkZE`AL+G5)@6qC>qR! z8+){akxki?kaFfX6i}pXp_`Xlck94~S-?9*q=QqL2z=I4B@Zvi@4?yJho3QIdNI8l z#4QKGd<)2;6Vy;X#e*x_gP*hHWyFFgqukOJH7ndQUKry!7s+}S>|FP?VT3DlK1qQQ zk=oA%rP%@u3Q)BH2;)Li&oL3#M*r$!{Ih zASM=(#VCobo1BhR#*@dO*~PX)#gN9<0l;rNRKG4|p!^Nocw@Iy>-~ZJ?0T#CqSxD+ zevj?m@H}89TT2L<6HsC#BB(?}DykVK9k*1%F~}N9y4KadeB)RvJq;@3pmQntjRuyp zd+bH2w#~~?gnNl>cBMwx5@vUCsl~4k*^~r4aR!EORAjW02r1eGW<}-vIl3BCwVUEw zh(xbpj>h?!;M4gDxV}8^il-Ur;r34S_`LeD#vXa-JKk@`B;%!=m}ILfo6GCRP-vnwGMvS1TCwL(fwPc-To}O1cyV3K?4x z{_{-2*jZ}zOd{hm(Z%1afi9LPcXUtDSf?C9Eh3I80lt-6uc=&~q`FuW) zKHDvFXfegSj8LcxD#zUuFPYuggI{ZvI5 zj|TJPpX&$cTSpufZ23uYl>m#4Uva-%N<10wTI1Mav~)-=p+fo(j6RRxz{*!Z9U-)C z9>Fg)gf&-?LrVVy@(_wx>%nb~#fWvMjZ~3snIE4PjYc%6*#^HD>*h`@M=No(8gEO?tGG;DGL! zIknN6VVIpLepd7%^9kPQ=@m~$#G`d&22uBd7N`xiP7nd~8%zL8zY7$6HJXuC?e(YU zo|ZhfFlXWkh}8`aNOTEuicNS}80_)bI`FU)e}Gw)H(>SGZcAB2IjJ%f(xjS0D3g$f zpKWvE6C}I95gE5ucsGJw!I(^u@Qq2m!}b62JC2|pO%)yPHM(i^a4hL6s!^uhSYDQ( zs6-SU+3-3w$KoVN{lR=H^hVSP#EnRfCNooS9%oP_bri+sHqLwpN!J;gB#HbCT*wP$kPMWfp>3s$!F>BG0nI}(tOBcS z`;|a~gZLF43#h#S#h9K-xNW62tdPsD6m#K0iM?V&GbYaL+Tv1R7X)gj~#SmUb78qLnlqoP^ zSe`gkIP@zojM0&GO=h@|U1Brj_A5+?CK^Vl?qgjE)=Mo|Man|gckYv`pkbSNoKK!l zI{10#kbR9{p%uRJ4wx<2MtMI>or0N#cP<&(WR_(NRzrNObQ6E4VtUzc?fH?Q`SmTe ze9vOyJ~XZ1o3+9UPw0YlgJEIwL%gBxaQO=tjEqDxu@8q>P<_RrX#GyAh7*w=e!%zM zvmm+X4>-{%3kZ>L>`>A9e(Oe^W8*8imEKjvrX~B9Z?mF4pdgAW0GcqQ8K?PWbOtli z6v1wXRcjUM?UkNSiRv~-lG&n=6 z$-Xti>!AZ`H4B7vrP6?>0{7UrywB2v>KcE_pW4LIO&E1X8z-=JL#R3C|YNnMkc!*60bMHvnH<`ilEG%{J&Fe*%+ zjTZG$y6;1$L>`qR_sp}wV!83lNr^{s08V1fY$}RtDBk_ zY{PKqIRP(E+njlJ>;-Ne9DTE9Yc-7W#!7e7F3YVtOg2yK#&M<)w#4K*c(bn^FnHGi zOO53p1ce|18`isRiPy2)Cp&cXWCMewS7U(<3?fr$6<2fP(VAkoOk?Mn;n6cy6eoEN zcTNR*-IloNR3v5#qTkK~&Q92!hff@mt5?U>fQ)(sn9?kZ zoELH=@&o-m=!`QtVP*4!Zq3MI*C)c*169O@A6{Sw1BrU77bX<7)o+B=OKOT3M_qUu z)G%1v*Dw$3!{WTWe}2o~d*W7}{itvohqK!zI4HNk!NALAmrWckmSUmNsWC3}z589I z?(Ph?T0sx*T5P5eOv%MYbRzUJ)6Kn!@@StdaavA^up>Bu#v(VH%nlM5iNgY!YUrMi ze_F{-tA~K?Z+>D_Z`ea`+x(I5S4rc!$&2G#xZi5!P+od8TU36$-U+2lUz(G)^M=`)XHCub}p+?s<^N%UM4vVLX!W z3!0^;2XT5crok6h1={vUZ6hmQ4N20z`>5mfN}W4i2ah$KgcnPPpEs_(#;Q{)27f<( z*y2iflq`qB-OJXu(8w@R=)->-a6|4bNxNMnft?20HkuCy$6$L09kd)G)W4O=9BM|{ z0njynOnyNaTVrFARb&?Wz)KO0c=aeIrmJGdj2T21U*d{=r&%WGB_fB}!Crdq%$!h6 zTYHZU91PZ_u6~E*gTy3XA#JV7W1QF6sjN;@hLE{nCX07QHTpvH15PaG$-!bfNO#d# zLz-yQ&tSY!D@K{1sPCqy(XopWKKD^Su(X0yAdtrAPbwvb;0KzwfBiTWK|Q z=@~d0^<3M_hSR&Ce?AW}16N8iRRYrnJD8B8G!k~7@GQoI<#32mT-zRtY2CpF2f(XA zMU6CkH@0EN1UN@jBxhBao0Y7;t{jc1e4a+0fB6N7b2yPo(8A@@2haBnasAf%nJCjH zql`!qJ9zbokA$A+Li$D^=r%*k928%W0a#oK{oyi-%i#({q!i0)WJ1(aFJgY*$gn{8I=(Ww04qI1{H zye0i*Mr`~uq|h*1yj(Kb6ltw^K@0am&(EmI`#hR*0ct8#{B~3BSz88+3Bzg4k81*^8%KE#*02QR*UK z2M-^JFu#z+ux)Gj9-Ypn7I{$oQ)oL1`l&|nToNk4Tamb^hRS)nuoZIEjHOtFqfhay zZUTan1jXVWhNrTYA$UlLl2*5w4DdkB`Zffs@;~cY=26uyjz?2T9bVi&2sRpcJQEc} zswq*+P- zDN^CmeDw%s_1+%}Im49+!#OjZ;j(Q*hfk#Bm}vcixtLUk-l>q@`BV7ppOrG2W#Z%& zW()~2c*wbgWlG&}uVkUND;LEy@?#C{}77N~WYzz)?Az@B@SyxF&QfwgRVOOn%0aye75&&}>S zzXc$D2{D5sKzp?kZ^aDn`*nF+3|f|e(o$M#yR)s_4THwu&3vi*JPwOBR)%9|cQ^)g z4XHCFEsKY{w1K@z=AIAvPKl3~tb_^UIhBwmBDl`00~fq=Sz&xh<>PA2hJCH!hGwUW zSgtprf2*L$jmE;I<{4F(Ggnc%YAXfr=SqhudnSKgbgU~un2Z{YIR{ZU&6?3OUcSLAaY@eW`eEgpt7 zlUlHem*R=;T?P@87+ei=K*i)c(`M7rgYp~;1v3UAroT0zo2b1J>$(E72e7wJRJ^j+ zfwa{lP}teWV2Cat(t`GRp|FvPh+q_fqDrDbm_Mgv ze11tcDh~Zxw+#nx2(x{He?+>B8}7!V`sarmVDe6{$$s5`AD)NF!*)Lkxhe86X@8YJ zUKj5XynC5Tkh`933miE2XeIrq#2DMX^k7QLZ zL|1DDSCs` zP~b8wgEc_AKuOkS68=kJJcC!LEhv(jc*PJc+JDJEZntc9XnDeon^R1KS8VypEKVS=!F?4_G(KTNE3yww1& z<<4Fsm#(W&-EE|$ep#8R2{KX@^9n+)nbR_CuKu2`y-?j&_Et#qL+_J4;tN=2WAJ?_ z>GAwa1Ld2`rz_J{-N+hUE`7D?$vACB{U+#Df4rK7HY2#|H7ad3`gquCdhAM5`64&^ zml&N+{;t8*A@sURFNd(28=x_y`ZPiZmZ*JTwE@14fXfD|h6GL5)jmGBn&D0L=Vf@m zCfsvhVa?!2*QXbkyXRHMlvIPVI=myUYfFf`Kvx;HNNg+~nfLnniq{U32A~2`%1Vz|wmTEs2e$)WSRz z)ul1TY;;WAQl)z-Kdg2cN`8In{^lIY0O)kQ^I2SoQWf~F>*MJp!pVm!TB9y-tC8z^ zo;bCQ?{j%6p6`I;Hk8t!SYr(BA&>}DrGxg2UYggV|Zk#`Og7%@FQAPviijGoxn3uBn010T08 zQ!nFZtP~|hjSMd!(1+p*Ez!^!t-}`5!O{-R&*GB$6p41JkhO#U#f{uNj#66xGL$#dz~=tSkpT%4i1 zgjkQKiEant8(H)O7-+8ZSoA)7^JvjbKP-NF5#si838FETR9 z{>F}aEty|AxCF?_9K2a!PCD&{mLIaLn~rY9PkVlT{$&jW-^9L(DZPjb!3!(?6gP

!oRptb@n+ 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 literal 0 HcmV?d00001 diff --git a/gui/slick/css/fonts/glyphicons-halflings-regular.svg b/gui/slick/css/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 00000000..25691af8 --- /dev/null +++ b/gui/slick/css/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/gui/slick/css/fonts/glyphicons-halflings-regular.ttf b/gui/slick/css/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..67fa00bf83801d2fa568546b982c80d27f6ef74e GIT binary patch literal 41280 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

PBK;&Wcg|NX{>QR@W3{K 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 literal 0 HcmV?d00001 diff --git a/gui/slick/css/fonts/glyphicons-halflings-regular.woff b/gui/slick/css/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..8c54182aa5d4d1ab3c9171976b615c1dcb1dc187 GIT binary patch literal 23320 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 mX4Rts .caret, .dropup > .btn > .caret { border-top-color: #000 !important; @@ -255,6 +255,10 @@ th { .table { border-collapse: collapse !important; } + .table td, + .table th { + background-color: #fff !important; + } .table-bordered th, .table-bordered td { border: 1px solid #ddd !important; @@ -263,8 +267,8 @@ th { @font-face { font-family: 'Glyphicons Halflings'; - src: url('../fonts/glyphicons-halflings-regular.eot'); - src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); + src: url('../../../../../../../Desktop/dist/fonts/glyphicons-halflings-regular.eot'); + src: url('../../../../../../../Desktop/dist/fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../../../../../../../Desktop/dist/fonts/glyphicons-halflings-regular.woff') format('woff'), url('../../../../../../../Desktop/dist/fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../../../../../../../Desktop/dist/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); } .glyphicon { position: relative; @@ -284,7 +288,8 @@ th { .glyphicon-plus:before { content: "\2b"; } -.glyphicon-euro:before { +.glyphicon-euro:before, +.glyphicon-eur:before { content: "\20ac"; } .glyphicon-minus:before { @@ -910,12 +915,12 @@ textarea { line-height: inherit; } a { - color: #428bca; + color: #337ab7; text-decoration: none; } a:hover, a:focus { - color: #2a6496; + color: #23527c; text-decoration: underline; } a:focus { @@ -935,7 +940,6 @@ img { .carousel-inner > .item > img, .carousel-inner > .item > a > img { display: block; - width: 100% \9; max-width: 100%; height: auto; } @@ -944,7 +948,6 @@ img { } .img-thumbnail { display: inline-block; - width: 100% \9; max-width: 100%; height: auto; padding: 4px; @@ -1108,7 +1111,7 @@ p { font-weight: 300; line-height: 1.4; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .lead { font-size: 21px; } @@ -1117,9 +1120,6 @@ small, .small { font-size: 85%; } -cite { - font-style: normal; -} mark, .mark { padding: .2em; @@ -1153,10 +1153,10 @@ mark, color: #777; } .text-primary { - color: #428bca; + color: #337ab7; } a.text-primary:hover { - color: #3071a9; + color: #286090; } .text-success { color: #3c763d; @@ -1184,10 +1184,10 @@ a.text-danger:hover { } .bg-primary { color: #fff; - background-color: #428bca; + background-color: #337ab7; } a.bg-primary:hover { - background-color: #3071a9; + background-color: #286090; } .bg-success { background-color: #dff0d8; @@ -1257,7 +1257,7 @@ dt { dd { margin-left: 0; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .dl-horizontal dt { float: left; width: 160px; @@ -1328,10 +1328,6 @@ blockquote.pull-right small:after, blockquote.pull-right .small:after { content: '\00A0 \2014'; } -blockquote:before, -blockquote:after { - content: ""; -} address { margin-bottom: 20px; font-style: normal; @@ -1362,6 +1358,7 @@ kbd { kbd kbd { padding: 0; font-size: 100%; + font-weight: bold; -webkit-box-shadow: none; box-shadow: none; } @@ -1396,12 +1393,12 @@ pre code { margin-right: auto; margin-left: auto; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .container { width: 750px; } } -@media (min-width: 1011px) { +@media (min-width: 992px) { .container { width: 970px; } @@ -1583,7 +1580,7 @@ pre code { .col-xs-offset-0 { margin-left: 0; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { float: left; } @@ -1741,7 +1738,7 @@ pre code { margin-left: 0; } } -@media (min-width: 1011px) { +@media (min-width: 992px) { .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { float: left; } @@ -2060,6 +2057,12 @@ pre code { table { background-color: transparent; } +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} th { text-align: left; } @@ -2120,12 +2123,10 @@ th { .table-bordered > thead > tr > td { border-bottom-width: 2px; } -.table-striped > tbody > tr:nth-child(odd) > td, -.table-striped > tbody > tr:nth-child(odd) > th { +.table-striped > tbody > tr:nth-child(odd) { background-color: #f9f9f9; } -.table-hover > tbody > tr:hover > td, -.table-hover > tbody > tr:hover > th { +.table-hover > tbody > tr:hover { background-color: #f5f5f5; } table col[class*="col-"] { @@ -2244,13 +2245,15 @@ table th[class*="col-"] { .table-hover > tbody > tr.danger:hover > th { background-color: #ebcccc; } +.table-responsive { + min-height: .01%; + overflow-x: auto; +} @media screen and (max-width: 767px) { .table-responsive { width: 100%; margin-bottom: 15px; - overflow-x: auto; overflow-y: hidden; - -webkit-overflow-scrolling: touch; -ms-overflow-style: -ms-autohiding-scrollbar; border: 1px solid #ddd; } @@ -2375,14 +2378,14 @@ output { box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); } .form-control::-moz-placeholder { - color: #777; + color: #999; opacity: 1; } .form-control:-ms-input-placeholder { - color: #777; + color: #999; } .form-control::-webkit-input-placeholder { - color: #777; + color: #999; } .form-control[disabled], .form-control[readonly], @@ -2397,24 +2400,25 @@ textarea.form-control { input[type="search"] { -webkit-appearance: none; } -input[type="date"], -input[type="time"], -input[type="datetime-local"], -input[type="month"] { - line-height: 34px; - line-height: 1.42857143 \0; -} -input[type="date"].input-sm, -input[type="time"].input-sm, -input[type="datetime-local"].input-sm, -input[type="month"].input-sm { - line-height: 30px; -} -input[type="date"].input-lg, -input[type="time"].input-lg, -input[type="datetime-local"].input-lg, -input[type="month"].input-lg { - line-height: 46px; +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { + line-height: 46px; + } } .form-group { margin-bottom: 15px; @@ -2423,12 +2427,12 @@ input[type="month"].input-lg { .checkbox { position: relative; display: block; - min-height: 20px; margin-top: 10px; margin-bottom: 10px; } .radio label, .checkbox label { + min-height: 20px; padding-left: 20px; margin-bottom: 0; font-weight: normal; @@ -2491,35 +2495,41 @@ fieldset[disabled] .checkbox label { padding-left: 0; } .input-sm, -.form-horizontal .form-group-sm .form-control { +.form-group-sm .form-control { height: 30px; padding: 5px 10px; font-size: 12px; line-height: 1.5; border-radius: 3px; } -select.input-sm { +select.input-sm, +select.form-group-sm .form-control { height: 30px; line-height: 30px; } textarea.input-sm, -select[multiple].input-sm { +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { height: auto; } .input-lg, -.form-horizontal .form-group-lg .form-control { +.form-group-lg .form-control { height: 46px; padding: 10px 16px; font-size: 18px; line-height: 1.33; border-radius: 6px; } -select.input-lg { +select.input-lg, +select.form-group-lg .form-control { height: 46px; line-height: 46px; } textarea.input-lg, -select[multiple].input-lg { +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { height: auto; } .has-feedback { @@ -2530,7 +2540,7 @@ select[multiple].input-lg { } .form-control-feedback { position: absolute; - top: 25px; + top: 0; right: 0; z-index: 2; display: block; @@ -2538,6 +2548,7 @@ select[multiple].input-lg { height: 34px; line-height: 34px; text-align: center; + pointer-events: none; } .input-lg + .form-control-feedback { width: 46px; @@ -2554,7 +2565,11 @@ select[multiple].input-lg { .has-success .radio, .has-success .checkbox, .has-success .radio-inline, -.has-success .checkbox-inline { +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { color: #3c763d; } .has-success .form-control { @@ -2580,7 +2595,11 @@ select[multiple].input-lg { .has-warning .radio, .has-warning .checkbox, .has-warning .radio-inline, -.has-warning .checkbox-inline { +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { color: #8a6d3b; } .has-warning .form-control { @@ -2606,7 +2625,11 @@ select[multiple].input-lg { .has-error .radio, .has-error .checkbox, .has-error .radio-inline, -.has-error .checkbox-inline { +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { color: #a94442; } .has-error .form-control { @@ -2627,6 +2650,9 @@ select[multiple].input-lg { .has-error .form-control-feedback { color: #a94442; } +.has-feedback label ~ .form-control-feedback { + top: 25px; +} .has-feedback label.sr-only ~ .form-control-feedback { top: 0; } @@ -2636,7 +2662,7 @@ select[multiple].input-lg { margin-bottom: 10px; color: #737373; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .form-inline .form-group { display: inline-block; margin-bottom: 0; @@ -2647,6 +2673,9 @@ select[multiple].input-lg { width: auto; vertical-align: middle; } + .form-inline .form-control-static { + display: inline-block; + } .form-inline .input-group { display: inline-table; vertical-align: middle; @@ -2699,7 +2728,7 @@ select[multiple].input-lg { margin-right: -15px; margin-left: -15px; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .form-horizontal .control-label { padding-top: 7px; margin-bottom: 0; @@ -2707,15 +2736,14 @@ select[multiple].input-lg { } } .form-horizontal .has-feedback .form-control-feedback { - top: 0; right: 15px; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .form-horizontal .form-group-lg .control-label { padding-top: 14.3px; } } -@media (min-width: 1010px) { +@media (min-width: 768px) { .form-horizontal .form-group-sm .control-label { padding-top: 6px; } @@ -2730,6 +2758,8 @@ select[multiple].input-lg { text-align: center; white-space: nowrap; vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; @@ -2741,13 +2771,17 @@ select[multiple].input-lg { } .btn:focus, .btn:active:focus, -.btn.active:focus { +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { outline: thin dotted; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } .btn:hover, -.btn:focus { +.btn:focus, +.btn.focus { color: #333; text-decoration: none; } @@ -2775,6 +2809,7 @@ fieldset[disabled] .btn { } .btn-default:hover, .btn-default:focus, +.btn-default.focus, .btn-default:active, .btn-default.active, .open > .dropdown-toggle.btn-default { @@ -2796,6 +2831,9 @@ fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, @@ -2811,17 +2849,18 @@ fieldset[disabled] .btn-default.active { } .btn-primary { color: #fff; - background-color: #428bca; - border-color: #357ebd; + background-color: #337ab7; + border-color: #2e6da4; } .btn-primary:hover, .btn-primary:focus, +.btn-primary.focus, .btn-primary:active, .btn-primary.active, .open > .dropdown-toggle.btn-primary { color: #fff; - background-color: #3071a9; - border-color: #285e8e; + background-color: #286090; + border-color: #204d74; } .btn-primary:active, .btn-primary.active, @@ -2837,17 +2876,20 @@ fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { - background-color: #428bca; - border-color: #357ebd; + background-color: #337ab7; + border-color: #2e6da4; } .btn-primary .badge { - color: #428bca; + color: #337ab7; background-color: #fff; } .btn-success { @@ -2857,6 +2899,7 @@ fieldset[disabled] .btn-primary.active { } .btn-success:hover, .btn-success:focus, +.btn-success.focus, .btn-success:active, .btn-success.active, .open > .dropdown-toggle.btn-success { @@ -2878,6 +2921,9 @@ fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, @@ -2898,6 +2944,7 @@ fieldset[disabled] .btn-success.active { } .btn-info:hover, .btn-info:focus, +.btn-info.focus, .btn-info:active, .btn-info.active, .open > .dropdown-toggle.btn-info { @@ -2919,6 +2966,9 @@ fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, @@ -2939,6 +2989,7 @@ fieldset[disabled] .btn-info.active { } .btn-warning:hover, .btn-warning:focus, +.btn-warning.focus, .btn-warning:active, .btn-warning.active, .open > .dropdown-toggle.btn-warning { @@ -2960,6 +3011,9 @@ fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, @@ -2980,6 +3034,7 @@ fieldset[disabled] .btn-warning.active { } .btn-danger:hover, .btn-danger:focus, +.btn-danger.focus, .btn-danger:active, .btn-danger.active, .open > .dropdown-toggle.btn-danger { @@ -3001,6 +3056,9 @@ fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, @@ -3016,12 +3074,12 @@ fieldset[disabled] .btn-danger.active { } .btn-link { font-weight: normal; - color: #428bca; - cursor: pointer; + color: #337ab7; border-radius: 0; } .btn-link, .btn-link:active, +.btn-link.active, .btn-link[disabled], fieldset[disabled] .btn-link { background-color: transparent; @@ -3036,7 +3094,7 @@ fieldset[disabled] .btn-link { } .btn-link:hover, .btn-link:focus { - color: #2a6496; + color: #23527c; text-decoration: underline; background-color: transparent; } @@ -3091,9 +3149,11 @@ input[type="button"].btn-block { } .collapse { display: none; + visibility: hidden; } .collapse.in { display: block; + visibility: visible; } tr.collapse.in { display: table-row; @@ -3105,9 +3165,15 @@ tbody.collapse.in { position: relative; height: 0; overflow: hidden; - -webkit-transition: height .35s ease; - -o-transition: height .35s ease; - transition: height .35s ease; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; } .caret { display: inline-block; @@ -3177,7 +3243,7 @@ tbody.collapse.in { .dropdown-menu > .active > a:focus { color: #fff; text-decoration: none; - background-color: #428bca; + background-color: #337ab7; outline: 0; } .dropdown-menu > .disabled > a, @@ -3239,7 +3305,7 @@ tbody.collapse.in { bottom: 100%; margin-bottom: 1px; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-right .dropdown-menu { right: 0; left: auto; @@ -3270,10 +3336,6 @@ tbody.collapse.in { .btn-group-vertical > .btn.active { z-index: 2; } -.btn-group > .btn:focus, -.btn-group-vertical > .btn:focus { - outline: 0; -} .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, @@ -3413,12 +3475,13 @@ tbody.collapse.in { .btn-group-justified > .btn-group .dropdown-menu { left: auto; } -[data-toggle="buttons"] > .btn > input[type="radio"], -[data-toggle="buttons"] > .btn > input[type="checkbox"] { +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { position: absolute; - z-index: -1; - filter: alpha(opacity=0); - opacity: 0; + clip: rect(0, 0, 0, 0); + pointer-events: none; } .input-group { position: relative; @@ -3607,7 +3670,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav .open > a:hover, .nav .open > a:focus { background-color: #eee; - border-color: #428bca; + border-color: #337ab7; } .nav .nav-divider { height: 1px; @@ -3658,7 +3721,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { top: auto; left: auto; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .nav-tabs.nav-justified > li { display: table-cell; width: 1%; @@ -3676,7 +3739,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav-tabs.nav-justified > .active > a:focus { border: 1px solid #ddd; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .nav-tabs.nav-justified > li > a { border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0; @@ -3700,7 +3763,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav-pills > li.active > a:hover, .nav-pills > li.active > a:focus { color: #fff; - background-color: #428bca; + background-color: #337ab7; } .nav-stacked > li { float: none; @@ -3723,7 +3786,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { top: auto; left: auto; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .nav-justified > li { display: table-cell; width: 1%; @@ -3744,7 +3807,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .nav-tabs-justified > .active > a:focus { border: 1px solid #ddd; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .nav-tabs-justified > li > a { border-bottom: 1px solid #ddd; border-radius: 4px 4px 0 0; @@ -3757,9 +3820,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn { } .tab-content > .tab-pane { display: none; + visibility: hidden; } .tab-content > .active { display: block; + visibility: visible; } .nav-tabs .dropdown-menu { margin-top: -1px; @@ -3772,12 +3837,12 @@ select[multiple].input-group-sm > .input-group-btn > .btn { margin-bottom: 20px; border: 1px solid transparent; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar { border-radius: 4px; } } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-header { float: left; } @@ -3794,7 +3859,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-collapse.in { overflow-y: auto; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-collapse { width: auto; border-top: 0; @@ -3806,6 +3871,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { height: auto !important; padding-bottom: 0; overflow: visible !important; + visibility: visible !important; } .navbar-collapse.in { overflow-y: visible; @@ -3821,7 +3887,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-fixed-bottom .navbar-collapse { max-height: 340px; } -@media (max-width: 480px) and (orientation: landscape) { +@media (max-device-width: 480px) and (orientation: landscape) { .navbar-fixed-top .navbar-collapse, .navbar-fixed-bottom .navbar-collapse { max-height: 200px; @@ -3834,7 +3900,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { margin-right: -15px; margin-left: -15px; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .container > .navbar-header, .container-fluid > .navbar-header, .container > .navbar-collapse, @@ -3847,7 +3913,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { z-index: 1000; border-width: 0 0 1px; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-static-top { border-radius: 0; } @@ -3859,7 +3925,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { left: 0; z-index: 1030; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-fixed-top, .navbar-fixed-bottom { border-radius: 0; @@ -3885,7 +3951,10 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-brand:focus { text-decoration: none; } -@media (min-width: 1010px) { +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { .navbar > .container .navbar-brand, .navbar > .container-fluid .navbar-brand { margin-left: -15px; @@ -3915,7 +3984,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-toggle .icon-bar + .icon-bar { margin-top: 4px; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-toggle { display: none; } @@ -3951,7 +4020,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { background-image: none; } } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-nav { float: left; margin: 0; @@ -3963,17 +4032,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn { padding-top: 15px; padding-bottom: 15px; } - .navbar-nav.navbar-right:last-child { - margin-right: -15px; - } -} -@media (min-width: 1010px) { - .navbar-left { - float: left !important; - } - .navbar-right { - float: right !important; - } } .navbar-form { padding: 10px 15px; @@ -3986,7 +4044,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn { -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-form .form-group { display: inline-block; margin-bottom: 0; @@ -3997,6 +4055,9 @@ select[multiple].input-group-sm > .input-group-btn > .btn { width: auto; vertical-align: middle; } + .navbar-form .form-control-static { + display: inline-block; + } .navbar-form .input-group { display: inline-table; vertical-align: middle; @@ -4037,8 +4098,11 @@ select[multiple].input-group-sm > .input-group-btn > .btn { .navbar-form .form-group { margin-bottom: 5px; } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-form { width: auto; padding-top: 0; @@ -4049,9 +4113,6 @@ select[multiple].input-group-sm > .input-group-btn > .btn { -webkit-box-shadow: none; box-shadow: none; } - .navbar-form.navbar-right:last-child { - margin-right: -15px; - } } .navbar-nav > li > .dropdown-menu { margin-top: 0; @@ -4059,6 +4120,8 @@ select[multiple].input-group-sm > .input-group-btn > .btn { border-top-right-radius: 0; } .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-top-left-radius: 4px; + border-top-right-radius: 4px; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } @@ -4078,13 +4141,22 @@ select[multiple].input-group-sm > .input-group-btn > .btn { margin-top: 15px; margin-bottom: 15px; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .navbar-text { float: left; margin-right: 15px; margin-left: 15px; } - .navbar-text.navbar-right:last-child { +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { margin-right: 0; } } @@ -4189,7 +4261,7 @@ fieldset[disabled] .navbar-default .btn-link:focus { border-color: #080808; } .navbar-inverse .navbar-brand { - color: #777; + color: #9d9d9d; } .navbar-inverse .navbar-brand:hover, .navbar-inverse .navbar-brand:focus { @@ -4197,10 +4269,10 @@ fieldset[disabled] .navbar-default .btn-link:focus { background-color: transparent; } .navbar-inverse .navbar-text { - color: #777; + color: #9d9d9d; } .navbar-inverse .navbar-nav > li > a { - color: #777; + color: #9d9d9d; } .navbar-inverse .navbar-nav > li > a:hover, .navbar-inverse .navbar-nav > li > a:focus { @@ -4247,7 +4319,7 @@ fieldset[disabled] .navbar-default .btn-link:focus { background-color: #080808; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { - color: #777; + color: #9d9d9d; } .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { @@ -4268,13 +4340,13 @@ fieldset[disabled] .navbar-default .btn-link:focus { } } .navbar-inverse .navbar-link { - color: #777; + color: #9d9d9d; } .navbar-inverse .navbar-link:hover { color: #fff; } .navbar-inverse .btn-link { - color: #777; + color: #9d9d9d; } .navbar-inverse .btn-link:hover, .navbar-inverse .btn-link:focus { @@ -4320,7 +4392,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { padding: 6px 12px; margin-left: -1px; line-height: 1.42857143; - color: #428bca; + color: #337ab7; text-decoration: none; background-color: #fff; border: 1px solid #ddd; @@ -4340,7 +4412,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { .pagination > li > span:hover, .pagination > li > a:focus, .pagination > li > span:focus { - color: #2a6496; + color: #23527c; background-color: #eee; border-color: #ddd; } @@ -4353,8 +4425,8 @@ fieldset[disabled] .navbar-inverse .btn-link:focus { z-index: 2; color: #fff; cursor: default; - background-color: #428bca; - border-color: #428bca; + background-color: #337ab7; + border-color: #337ab7; } .pagination > .disabled > span, .pagination > .disabled > span:hover, @@ -4468,11 +4540,11 @@ a.label:focus { background-color: #5e5e5e; } .label-primary { - background-color: #428bca; + background-color: #337ab7; } .label-primary[href]:hover, .label-primary[href]:focus { - background-color: #3071a9; + background-color: #286090; } .label-success { background-color: #5cb85c; @@ -4533,16 +4605,22 @@ a.badge:focus { text-decoration: none; cursor: pointer; } -a.list-group-item.active > .badge, +.list-group-item.active > .badge, .nav-pills > .active > a > .badge { - color: #428bca; + color: #337ab7; background-color: #fff; } +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} .nav-pills > li > a > .badge { margin-left: 3px; } .jumbotron { - padding: 30px; + padding: 30px 15px; margin-bottom: 30px; color: inherit; background-color: #eee; @@ -4559,18 +4637,19 @@ a.list-group-item.active > .badge, .jumbotron > hr { border-top-color: #d5d5d5; } -.container .jumbotron { +.container .jumbotron, +.container-fluid .jumbotron { border-radius: 6px; } .jumbotron .container { max-width: 100%; } -@media screen and (min-width: 1010px) { +@media screen and (min-width: 768px) { .jumbotron { - padding-top: 48px; - padding-bottom: 48px; + padding: 48px 0; } - .container .jumbotron { + .container .jumbotron, + .container-fluid .jumbotron { padding-right: 60px; padding-left: 60px; } @@ -4587,9 +4666,9 @@ a.list-group-item.active > .badge, background-color: #fff; border: 1px solid #ddd; border-radius: 4px; - -webkit-transition: all .2s ease-in-out; - -o-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; } .thumbnail > img, .thumbnail a > img { @@ -4599,7 +4678,7 @@ a.list-group-item.active > .badge, a.thumbnail:hover, a.thumbnail:focus, a.thumbnail.active { - border-color: #428bca; + border-color: #337ab7; } .thumbnail .caption { padding: 9px; @@ -4721,7 +4800,7 @@ a.thumbnail.active { line-height: 20px; color: #fff; text-align: center; - background-color: #428bca; + background-color: #337ab7; -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); -webkit-transition: width .6s ease; @@ -4742,18 +4821,6 @@ a.thumbnail.active { -o-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } -.progress-bar[aria-valuenow="1"], -.progress-bar[aria-valuenow="2"] { - min-width: 30px; -} -.progress-bar[aria-valuenow="0"] { - min-width: 30px; - color: #777; - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - box-shadow: none; -} .progress-bar-success { background-color: #5cb85c; } @@ -4786,29 +4853,35 @@ a.thumbnail.active { background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); } -.media, -.media-body { - overflow: hidden; - zoom: 1; -} -.media, -.media .media { +.media { margin-top: 15px; } .media:first-child { margin-top: 0; } -.media-object { - display: block; +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; } .media-heading { - margin: 0 0 5px; -} -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; + margin-top: 0; + margin-bottom: 5px; } .media-list { padding-left: 0; @@ -4835,12 +4908,6 @@ a.thumbnail.active { border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } -.list-group-item > .badge { - float: right; -} -.list-group-item > .badge + .badge { - margin-right: 5px; -} a.list-group-item { color: #555; } @@ -4857,6 +4924,7 @@ a.list-group-item:focus { .list-group-item.disabled:hover, .list-group-item.disabled:focus { color: #777; + cursor: not-allowed; background-color: #eee; } .list-group-item.disabled .list-group-item-heading, @@ -4874,8 +4942,8 @@ a.list-group-item:focus { .list-group-item.active:focus { z-index: 2; color: #fff; - background-color: #428bca; - border-color: #428bca; + background-color: #337ab7; + border-color: #337ab7; } .list-group-item.active .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading, @@ -4891,7 +4959,7 @@ a.list-group-item:focus { .list-group-item.active .list-group-item-text, .list-group-item.active:hover .list-group-item-text, .list-group-item.active:focus .list-group-item-text { - color: #e1edf7; + color: #c7ddef; } .list-group-item-success { color: #3c763d; @@ -5025,19 +5093,23 @@ a.list-group-item-danger.active:focus { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } -.panel > .list-group { +.panel > .list-group, +.panel > .panel-collapse > .list-group { margin-bottom: 0; } -.panel > .list-group .list-group-item { +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { border-width: 1px 0; border-radius: 0; } -.panel > .list-group:first-child .list-group-item:first-child { +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { border-top: 0; border-top-left-radius: 3px; border-top-right-radius: 3px; } -.panel > .list-group:last-child .list-group-item:last-child { +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { border-bottom: 0; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; @@ -5053,11 +5125,24 @@ a.list-group-item-danger.active:focus { .panel > .panel-collapse > .table { margin-bottom: 0; } +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} .panel > .table:first-child, .panel > .table-responsive:first-child > .table:first-child { border-top-left-radius: 3px; border-top-right-radius: 3px; } +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} .panel > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, .panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, @@ -5083,6 +5168,13 @@ a.list-group-item-danger.active:focus { border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; } +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} .panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, .panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, @@ -5104,7 +5196,9 @@ a.list-group-item-danger.active:focus { border-bottom-right-radius: 3px; } .panel > .panel-body + .table, -.panel > .panel-body + .table-responsive { +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { border-top: 1px solid #ddd; } .panel > .table > tbody:first-child > tr:first-child th, @@ -5180,7 +5274,8 @@ a.list-group-item-danger.active:focus { .panel-group .panel-heading { border-bottom: 0; } -.panel-group .panel-heading + .panel-collapse > .panel-body { +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { border-top: 1px solid #ddd; } .panel-group .panel-footer { @@ -5208,22 +5303,22 @@ a.list-group-item-danger.active:focus { border-bottom-color: #ddd; } .panel-primary { - border-color: #428bca; + border-color: #337ab7; } .panel-primary > .panel-heading { color: #fff; - background-color: #428bca; - border-color: #428bca; + background-color: #337ab7; + border-color: #337ab7; } .panel-primary > .panel-heading + .panel-collapse > .panel-body { - border-top-color: #428bca; + border-top-color: #337ab7; } .panel-primary > .panel-heading .badge { - color: #428bca; + color: #337ab7; background-color: #fff; } .panel-primary > .panel-footer + .panel-collapse > .panel-body { - border-bottom-color: #428bca; + border-bottom-color: #337ab7; } .panel-success { border-color: #d6e9c6; @@ -5307,7 +5402,8 @@ a.list-group-item-danger.active:focus { .embed-responsive .embed-responsive-item, .embed-responsive iframe, .embed-responsive embed, -.embed-responsive object { +.embed-responsive object, +.embed-responsive video { position: absolute; top: 0; bottom: 0; @@ -5378,7 +5474,7 @@ button.close { right: 0; bottom: 0; left: 0; - z-index: 1050; + z-index: 1040; display: none; overflow: hidden; -webkit-overflow-scrolling: touch; @@ -5388,14 +5484,16 @@ button.close { -webkit-transition: -webkit-transform .3s ease-out; -o-transition: -o-transform .3s ease-out; transition: transform .3s ease-out; - -webkit-transform: translate3d(0, -25%, 0); - -o-transform: translate3d(0, -25%, 0); - transform: translate3d(0, -25%, 0); + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); } .modal.in .modal-dialog { - -webkit-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); } .modal-open .modal { overflow-x: hidden; @@ -5419,12 +5517,10 @@ button.close { box-shadow: 0 3px 9px rgba(0, 0, 0, .5); } .modal-backdrop { - position: fixed; + position: absolute; top: 0; right: 0; - bottom: 0; left: 0; - z-index: 1040; background-color: #000; } .modal-backdrop.fade { @@ -5473,7 +5569,7 @@ button.close { height: 50px; overflow: scroll; } -@media (min-width: 1010px) { +@media (min-width: 768px) { .modal-dialog { width: 600px; margin: 30px auto; @@ -5486,7 +5582,7 @@ button.close { width: 300px; } } -@media (min-width: 1011px) { +@media (min-width: 992px) { .modal-lg { width: 900px; } @@ -5495,7 +5591,9 @@ button.close { position: absolute; z-index: 1070; display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 12px; + font-weight: normal; line-height: 1.4; visibility: visible; filter: alpha(opacity=0); @@ -5545,14 +5643,16 @@ button.close { border-top-color: #000; } .tooltip.top-left .tooltip-arrow { + right: 5px; bottom: 0; - left: 5px; + margin-bottom: -5px; border-width: 5px 5px 0; border-top-color: #000; } .tooltip.top-right .tooltip-arrow { - right: 5px; bottom: 0; + left: 5px; + margin-bottom: -5px; border-width: 5px 5px 0; border-top-color: #000; } @@ -5579,13 +5679,15 @@ button.close { } .tooltip.bottom-left .tooltip-arrow { top: 0; - left: 5px; + right: 5px; + margin-top: -5px; border-width: 0 5px 5px; border-bottom-color: #000; } .tooltip.bottom-right .tooltip-arrow { top: 0; - right: 5px; + left: 5px; + margin-top: -5px; border-width: 0 5px 5px; border-bottom-color: #000; } @@ -5597,6 +5699,10 @@ button.close { display: none; max-width: 276px; padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; text-align: left; white-space: normal; background-color: #fff; @@ -5624,8 +5730,6 @@ button.close { padding: 8px 14px; margin: 0; font-size: 14px; - font-weight: normal; - line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-radius: 5px 5px 0 0; @@ -5728,6 +5832,37 @@ button.close { .carousel-inner > .item > a > img { line-height: 1; } +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000; + perspective: 1000; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { @@ -5873,7 +6008,7 @@ button.close { .carousel-caption .btn { text-shadow: none; } -@media screen and (min-width: 1010px) { +@media screen and (min-width: 768px) { .carousel-control .glyphicon-chevron-left, .carousel-control .glyphicon-chevron-right, .carousel-control .icon-prev, @@ -5983,9 +6118,6 @@ button.close { } .affix { position: fixed; - -webkit-transform: translate3d(0, 0, 0); - -o-transform: translate3d(0, 0, 0); - transform: translate3d(0, 0, 0); } @-ms-viewport { width: device-width; @@ -6040,7 +6172,7 @@ button.close { display: inline-block !important; } } -@media (min-width: 1010px) and (max-width: 1012px) { +@media (min-width: 768px) and (max-width: 991px) { .visible-sm { display: block !important; } @@ -6055,22 +6187,22 @@ button.close { display: table-cell !important; } } -@media (min-width: 1010px) and (max-width: 1012px) { +@media (min-width: 768px) and (max-width: 991px) { .visible-sm-block { display: block !important; } } -@media (min-width: 1010px) and (max-width: 1012px) { +@media (min-width: 768px) and (max-width: 991px) { .visible-sm-inline { display: inline !important; } } -@media (min-width: 1010px) and (max-width: 1012px) { +@media (min-width: 768px) and (max-width: 991px) { .visible-sm-inline-block { display: inline-block !important; } } -@media (min-width: 1011px) and (max-width: 1199px) { +@media (min-width: 992px) and (max-width: 1199px) { .visible-md { display: block !important; } @@ -6085,17 +6217,17 @@ button.close { display: table-cell !important; } } -@media (min-width: 1011px) and (max-width: 1199px) { +@media (min-width: 992px) and (max-width: 1199px) { .visible-md-block { display: block !important; } } -@media (min-width: 1011px) and (max-width: 1199px) { +@media (min-width: 992px) and (max-width: 1199px) { .visible-md-inline { display: inline !important; } } -@media (min-width: 1011px) and (max-width: 1199px) { +@media (min-width: 992px) and (max-width: 1199px) { .visible-md-inline-block { display: inline-block !important; } @@ -6135,12 +6267,12 @@ button.close { display: none !important; } } -@media (min-width: 1010px) and (max-width: 1012px) { +@media (min-width: 768px) and (max-width: 991px) { .hidden-sm { display: none !important; } } -@media (min-width: 1011px) and (max-width: 1199px) { +@media (min-width: 992px) and (max-width: 1199px) { .hidden-md { display: none !important; } diff --git a/gui/slick/css/lib/bootstrap.css.map b/gui/slick/css/lib/bootstrap.css.map new file mode 100644 index 00000000..a02f6ba0 --- /dev/null +++ b/gui/slick/css/lib/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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AAA;EHsR9C;AGrRmC;EAAW,kBAAA;EHwR9C;AGvRmC;EAAW,kBAAA;EH0R9C;AGzRmC;EAAW,kBAAA;EH4R9C;AG3RmC;EAAW,kBAAA;EH8R9C;AG7RmC;EAAW,kBAAA;EHgS9C;AG/RmC;EAAW,kBAAA;EHkS9C;AGjSmC;EAAW,kBAAA;EHoS9C;AGnSmC;EAAW,kBAAA;EHsS9C;AGrSmC;EAAW,kBAAA;EHwS9C;AGvSmC;EAAW,kBAAA;EH0S9C;AGzSmC;EAAW,kBAAA;EH4S9C;AG3SmC;EAAW,kBAAA;EH8S9C;AG7SmC;EAAW,kBAAA;EHgT9C;AG/SmC;EAAW,kBAAA;EHkT9C;AGjTmC;EAAW,kBAAA;EHoT9C;AGnTmC;EAAW,kBAAA;EHsT9C;AGrTmC;EAAW,kBAAA;EHwT9C;AGvTmC;EAAW,kBAAA;EH0T9C;AGzTmC;EAAW,kBAAA;EH4T9C;AG3TmC;EAAW,kBAAA;EH8T9C;AG7TmC;EAAW,kBAAA;EHgU9C;AG/TmC;EAAW,kBAAA;EHkU9C;AGjUmC;EAAW,kBAAA;EHoU9C;AGnUmC;EAAW,kBAAA;EHsU9C;AGrUmC;EAAW,kBAAA;EHwU9C;AGvUmC;EAAW,kBAAA;EH0U9C;AGzUmC;EAAW,kBAAA;EH4U9C;AG3UmC;EAAW,kBAAA;EH8U9C;AG7UmC;EAAW,kBAAA;EHgV9C;AG/UmC;EAAW,kBAAA;EHkV9C;AGjVmC;EAAW,kBAAA;EHoV9C;AGnVmC;EAAW,kBAAA;EHsV9C;AGrVmC;EAAW,kBAAA;EHwV9C;AGvVmC;EAAW,kBAAA;EH0V9C;AGzVmC;EAAW,kBAAA;EH4V9C;AG3VmC;EAAW,kBAAA;EH8V9C;AG7VmC;EAAW,kBAAA;EHgW9C;AG/VmC;EAAW,kBAAA;EHkW9C;AGjWmC;EAAW,kBAAA;EHoW9C;AGnWmC;EAAW,kBAAA;EHsW9C;AGrWmC;EAAW,kBAAA;EHwW9C;AGvWmC;EAAW,kBAAA;EH0W9C;AGzWmC;EAAW,kBAAA;EH4W9C;AG3WmC;EAAW,kBAAA;EH8W9C;AG7WmC;EAAW,kBAAA;EHgX9C;AG/WmC;EAAW,kBAAA;EHkX9C;AGjXmC;EAAW,kBAAA;EHoX9C;AGnXmC;EAAW,kBAAA;EHsX9C;AGrXmC;EAAW,kBAAA;EHwX9C;AGvXmC;EAAW,kBAAA;EH0X9C;AGzXmC;EAAW,kBAAA;EH4X9C;AG3XmC;EAAW,kBAAA;EH8X9C;AG7XmC;EAAW,kBAAA;EHgY9C;AG/XmC;EAAW,kBAAA;EHkY9C;AGjYmC;EAAW,kBAAA;EHoY9C;AGnYmC;EAAW,kBAAA;EHsY9C;AGrYmC;EAAW,kBAAA;EHwY9C;AGvYmC;EAAW,kBAAA;EH0Y9C;AGzYmC;EAAW,kBAAA;EH4Y9C;AG3YmC;EAAW,kBAAA;EH8Y9C;AG7YmC;EAAW,kBAAA;EHgZ9C;AG/YmC;EAAW,kBAAA;EHkZ9C;AGjZmC;EAAW,kBAAA;EHoZ9C;AGnZmC;EAAW,kBAAA;EHsZ9C;AGrZmC;EAAW,kBAAA;EHwZ9C;AGvZmC;EAAW,kBAAA;EH0Z9C;AGzZmC;EAAW,kBAAA;EH4Z9C;AG3ZmC;EAAW,kBAAA;EH8Z9C;AG7ZmC;EAAW,kBAAA;EHga9C;AG/ZmC;EAAW,kBAAA;EHka9C;AGjamC;EAAW,kBAAA;EHoa9C;AGnamC;EAAW,kBAAA;EHsa9C;AGramC;EAAW,kBAAA;EHwa9C;AGvamC;EAAW,kBAAA;EH0a9C;AGzamC;EAAW,kBAAA;EH4a9C;AG3amC;EAAW,kBAAA;EH8a9C;AG7amC;EAAW,kBAAA;EHgb9C;AG/amC;EAAW,kBAAA;EHkb9C;AGjbmC;EAAW,kBAAA;EHob9C;AGnbmC;EAAW,kBAAA;EHsb9C;AGrbmC;EAAW,kBAAA;EHwb9C;AGvbmC;EAAW,kBAAA;EH0b9C;AGzbmC;EAAW,kBAAA;EH4b9C;AG3bmC;EAAW,kBAAA;EH8b9C;AG7bmC;EAAW,kBAAA;EHgc9C;AG/bmC;EAAW,kBAAA;EHkc9C;AGjcmC;EAAW,kBAAA;EHoc9C;AGncmC;EAAW,kBAAA;EHsc9C;AGrcmC;EAAW,kBAAA;EHwc9C;AGvcmC;EAAW,kBAAA;EH0c9C;AGzcmC;EAAW,kBAAA;EH4c9C;AG3cmC;EAAW,kBAAA;EH8c9C;AG7cmC;EAAW,kBAAA;EHgd9C;AG/cmC;EAAW,kBAAA;EHkd9C;AGjdmC;EAAW,kBAAA;EHod9C;AGndmC;EAAW,kBAAA;EHsd9C;AGrdmC;EAAW,kBAAA;EHwd9C;AGvdmC;EAAW,kBAAA;EH0d9C;AGzdmC;EAAW,kBAAA;EH4d9C;AG3dmC;EAAW,kBAAA;EH8d9C;AG7dmC;EAAW,kBAAA;EHge9C;AG/dmC;EAAW,kBAAA;EHke9C;AGjemC;EAAW,kBAAA;EHoe9C;AGnemC;EAAW,kBAAA;EHse9C;AGremC;EAAW,kBAAA;EHwe9C;AGvemC;EAAW,kBAAA;EH0e9C;AGzemC;EAAW,kBAAA;EH4e9C;AG3emC;EAAW,kBAAA;EH8e9C;AG7emC;EAAW,kBAAA;EHgf9C;AG/emC;EAAW,kBAAA;EHkf9C;AGjfmC;EAAW,kBAAA;EHof9C;AGnfmC;EAAW,kBAAA;EHsf9C;AGrfmC;EAAW,kBAAA;EHwf9C;AGvfmC;EAAW,kBAAA;EH0f9C;AGzfmC;EAAW,kBAAA;EH4f9C;AG3fmC;EAAW,kBAAA;EH8f9C;AG7fmC;EAAW,kBAAA;EHggB9C;AG/fmC;EAAW,kBAAA;EHkgB9C;AGjgBmC;EAAW,kBAAA;EHogB9C;AGngBmC;EAAW,kBAAA;EHsgB9C;AGrgBmC;EAAW,kBAAA;EHwgB9C;AGvgBmC;EAAW,kBAAA;EH0gB9C;AGzgBmC;EAAW,kBAAA;EH4gB9C;AG3gBmC;EAAW,kBAAA;EH8gB9C;AG7gBmC;EAAW,kBAAA;EHghB9C;AG/gBmC;EAAW,kBAAA;EHkhB9C;AGjhBmC;EAAW,kBAAA;EHohB9C;AGnhBmC;EAAW,kBAAA;EHshB9C;AGrhBmC;EAAW,kBAAA;EHwhB9C;AGvhBmC;EAAW,kBAAA;EH0hB9C;AGzhBmC;EAAW,kBAAA;EH4hB9C;AG3hBmC;EAAW,kBAAA;EH8hB9C;AG7hBmC;EAAW,kBAAA;EHgiB9C;AG/hBmC;EAAW,kBAAA;EHkiB9C;AGjiBmC;EAAW,kBAAA;EHoiB9C;AGniBmC;EAAW,kBAAA;EHsiB9C;AGriBmC;EAAW,kBAAA;EHwiB9C;AGviBmC;EAAW,kBAAA;EH0iB9C;AGziBmC;EAAW,kBAAA;EH4iB9C;AG3iBmC;EAAW,kBAAA;EH8iB9C;AG7iBmC;EAAW,kBAAA;EHgjB9C;AG/iBmC;EAAW,kBA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EACE,mBAAA;Efi7CH;Ael7CC;EACE,2BAAA;Efo7CH;Aer7CC;EACE,2BAAA;Efu7CH;Aex7CC;EACE,kBAAA;Ef07CH;Ae37CC;EACE,2BAAA;Ef67CH;Ae97CC;EACE,2BAAA;Efg8CH;Aej8CC;EACE,kBAAA;Efm8CH;Aep8CC;EACE,2BAAA;Efs8CH;Aev8CC;EACE,2BAAA;Efy8CH;Ae18CC;EACE,kBAAA;Ef48CH;Ae78CC;EACE,2BAAA;Ef+8CH;Aeh9CC;EACE,0BAAA;Efk9CH;Aen9CC;EACE,iBAAA;Efq9CH;Aaz9CD;EE9BI;IACE,aAAA;If0/CH;Een/CD;IACE,aAAA;Ifq/CD;Eet/CD;IACE,qBAAA;Ifw/CD;Eez/CD;IACE,qBAAA;If2/CD;Ee5/CD;IACE,YAAA;If8/CD;Ee//CD;IACE,qBAAA;IfigDD;EelgDD;IACE,qBAAA;IfogDD;EergDD;IACE,YAAA;IfugDD;EexgDD;IACE,qBAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,YAAA;IfghDD;EejhDD;IACE,qBAAA;IfmhDD;EephDD;IACE,oBAAA;IfshDD;EexgDD;IACE,aAAA;If0gDD;Ee3gDD;IACE,qBAAA;If6gDD;Ee9gDD;IACE,qBAAA;IfghDD;EejhDD;IACE,YAAA;IfmhDD;EephDD;IACE,qBAAA;IfshDD;EevhDD;IACE,qBAAA;IfyhDD;Ee1hDD;IACE,YAAA;If4hDD;Ee7hDD;IACE,qBAAA;If+hDD;EehiDD;IACE,qBAAA;IfkiDD;EeniDD;IACE,YAAA;IfqiDD;EetiDD;IACE,qBAAA;IfwiDD;EeziDD;IACE,oBAAA;If2iDD;EeviDD;IACE,aAAA;IfyiDD;EezjDD;IACE,YAAA;If2jDD;Ee5jDD;IACE,oBAAA;If8jDD;Ee/jDD;IACE,oBAAA;IfikDD;EelkDD;IACE,WAAA;IfokDD;EerkDD;IACE,oBAAA;IfukDD;EexkDD;IACE,oBAAA;If0kDD;Ee3kDD;IACE,WAAA;If6kDD;Ee9kDD;IACE,oBAAA;IfglDD;EejlDD;IACE,oBAAA;IfmlDD;EeplDD;IACE,WAAA;IfslDD;EevlDD;IACE,oBAAA;IfylDD;Ee1lDD;IACE,mBAAA;If4lDD;EexlDD;IACE,YAAA;If0lDD;Ee5kDD;IACE,mBAAA;If8kDD;Ee/kDD;IACE,2BAAA;IfilDD;EellDD;IACE,2BAAA;IfolDD;EerlDD;IACE,kBAAA;IfulDD;EexlDD;IACE,2BAAA;If0lDD;Ee3lDD;IACE,2BAAA;If6lDD;Ee9lDD;IACE,kBAAA;IfgmDD;EejmDD;IACE,2BAAA;IfmmDD;EepmDD;IACE,2BAAA;IfsmDD;EevmDD;IACE,kBAAA;IfymDD;Ee1mDD;IACE,2BAAA;If4mDD;Ee7mDD;IACE,0BAAA;If+mDD;EehnDD;IACE,iBAAA;IfknDD;EACF;Aa9mDD;EEvCI;IACE,aAAA;IfwpDH;EejpDD;IACE,aAAA;IfmpDD;EeppDD;IACE,qBAAA;IfspDD;EevpDD;IACE,qBAAA;IfypDD;Ee1pDD;IACE,YAAA;If4pDD;Ee7pDD;IACE,qBAAA;If+pDD;EehqDD;IACE,qBAAA;IfkqDD;EenqDD;IACE,YAAA;IfqqDD;EetqDD;IACE,qBAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,YAAA;If8qDD;Ee/qDD;IACE,qBAAA;IfirDD;EelrDD;IACE,oBAAA;IforDD;EetqDD;IACE,aAAA;IfwqDD;EezqDD;IACE,qBAAA;If2qDD;Ee5qDD;IACE,qBAAA;If8qDD;Ee/qDD;IACE,YAAA;IfirDD;EelrDD;IACE,qBAAA;IforDD;EerrDD;IACE,qBAAA;IfurDD;EexrDD;IACE,YAAA;If0rDD;Ee3rDD;IACE,qBAAA;If6rDD;Ee9rDD;IACE,qBAAA;IfgsDD;EejsDD;IACE,YAAA;IfmsDD;EepsDD;IACE,qBAAA;IfssDD;EevsDD;IACE,oBAAA;IfysDD;EersDD;IACE,aAAA;IfusDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,oBAAA;If4tDD;Ee7tDD;IACE,oBAAA;If+tDD;EehuDD;IACE,WAAA;IfkuDD;EenuDD;IACE,oBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EezuDD;IACE,WAAA;If2uDD;Ee5uDD;IACE,oBAAA;If8uDD;Ee/uDD;IACE,oBAAA;IfivDD;EelvDD;IACE,WAAA;IfovDD;EervDD;IACE,oBAAA;IfuvDD;EexvDD;IACE,mBAAA;If0vDD;EetvDD;IACE,YAAA;IfwvDD;Ee1uDD;IACE,mBAAA;If4uDD;Ee7uDD;IACE,2BAAA;If+uDD;EehvDD;IACE,2BAAA;IfkvDD;EenvDD;IACE,kBAAA;IfqvDD;EetvDD;IACE,2BAAA;IfwvDD;EezvDD;IACE,2BAAA;If2vDD;Ee5vDD;IACE,kBAAA;If8vDD;Ee/vDD;IACE,2BAAA;IfiwDD;EelwDD;IACE,2BAAA;IfowDD;EerwDD;IACE,kBAAA;IfuwDD;EexwDD;IACE,2BAAA;If0wDD;Ee3wDD;IACE,0BAAA;If6wDD;Ee9wDD;IACE,iBAAA;IfgxDD;EACF;AarwDD;EE9CI;IACE,aAAA;IfszDH;Ee/yDD;IACE,aAAA;IfizDD;EelzDD;IACE,qBAAA;IfozDD;EerzDD;IACE,qBAAA;IfuzDD;EexzDD;IACE,YAAA;If0zDD;Ee3zDD;IACE,qBAAA;If6zDD;Ee9zDD;IACE,qBAAA;Ifg0DD;Eej0DD;IACE,YAAA;Ifm0DD;Eep0DD;IACE,qBAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,YAAA;If40DD;Ee70DD;IACE,qBAAA;If+0DD;Eeh1DD;IACE,oBAAA;Ifk1DD;Eep0DD;IACE,aAAA;Ifs0DD;Eev0DD;IACE,qBAAA;Ify0DD;Ee10DD;IACE,qBAAA;If40DD;Ee70DD;IACE,YAAA;If+0DD;Eeh1DD;IACE,qBAAA;Ifk1DD;Een1DD;IACE,qBAAA;Ifq1DD;Eet1DD;IACE,YAAA;Ifw1DD;Eez1DD;IACE,qBAAA;If21DD;Ee51DD;IACE,qBAAA;If81DD;Ee/1DD;IACE,YAAA;Ifi2DD;Eel2DD;IACE,qBAAA;Ifo2DD;Eer2DD;IACE,oBAAA;Ifu2DD;Een2DD;IACE,aAAA;Ifq2DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,oBAAA;If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EACA,uBAAA;ErB+tFD;AqB7tFC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB+tFP;AqB7tFC;;;EAGE,wBAAA;ErB+tFH;AqB1tFG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBwuFT;AoBhtFD;ECnBI,gBAAA;EACA,2BAAA;ErBsuFH;AoBjtFD;ECxDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB4wFD;AqB1wFC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB4wFP;AqB1wFC;;;EAGE,wBAAA;ErB4wFH;AqBvwFG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBqxFT;AoB1vFD;ECtBI,gBAAA;EACA,2BAAA;ErBmxFH;AoB1vFD;EC5DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErByzFD;AqBvzFC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErByzFP;AqBvzFC;;;EAGE,wBAAA;ErByzFH;AqBpzFG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBk0FT;AoBnyFD;EC1BI,gBAAA;EACA,2BAAA;ErBg0FH;AoBnyFD;EChEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBs2FD;AqBp2FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBs2FP;AqBp2FC;;;EAGE,wBAAA;ErBs2FH;AqBj2FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB+2FT;AoB50FD;EC9BI,gBAAA;EACA,2BAAA;ErB62FH;AoB50FD;ECpEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBm5FD;AqBj5FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBm5FP;AqBj5FC;;;EAGE,wBAAA;ErBm5FH;AqB94FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB45FT;AoBr3FD;EClCI,gBAAA;EACA,2BAAA;ErB05FH;AoBr3FD;ECxEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBg8FD;AqB97FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;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","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-child(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n background-color: #eeeeee;\n opacity: 1;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm,\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm,\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\ntextarea.form-group-sm .form-control,\nselect[multiple].input-sm,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.input-lg,\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\nselect.input-lg,\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\ntextarea.form-group-lg .form-control,\nselect[multiple].input-lg,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.3px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n visibility: hidden;\n}\n.collapse.in {\n display: block;\n visibility: visible;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px solid;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child > .btn:last-child,\n.btn-group > .btn-group:first-child > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.33;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n visibility: hidden;\n}\n.tab-content > .active {\n display: block;\n visibility: visible;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n visibility: visible !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n visibility: visible;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-weight: normal;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n transition: transform 0.6s ease-in-out;\n backface-visibility: hidden;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n visibility: hidden !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // See https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-child(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9/10 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius;\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari.\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: @input-height-base;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm {\n line-height: @input-height-small;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg {\n line-height: @input-height-large;\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: 15px;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because

","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Bb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xb(b).text=a.text,yb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=db(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?""!==l[1]||kb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ub(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ub(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&nb.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qb,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Cb,Db={};function Eb(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("'),u.bgiframe.appendTo(c),c.bind("tooltipmove"+h,o.adjustBGIFrame)),m=r("
",{id:"qtip-rcontainer"}).appendTo(t.body),o.redraw(),u.overlay&&!v&&(s=function(){u.overlay[0].style.top=n.scrollTop()+"px"},n.bind("scroll.qtip-ie6, resize.qtip-ie6",s),s(),u.overlay.addClass("qtipmodal-ie6fix"),v=i)},adjustBGIFrame:function(){var e=n.get("dimensions"),t=n.plugins.tip,r=u.tip,i,s;s=parseInt(c.css("border-left-width"),10)||0,s={left:-s,top:-s},t&&r&&(i=t.corner.precedance==="x"?["width","left"]:["height","top"],s[i[1]]-=r[i[0]]()),u.bgiframe.css(s).css(e)},redraw:function(){if(n.rendered<1||d)return o;var e=a.style,t=a.position.container,r,i,s,u;return d=1,e.height&&c.css(l,e.height),e.width?c.css(f,e.width):(c.css(f,"").appendTo(m),i=c.width(),i%2<1&&(i+=1),s=c.css("max-width")||"",u=c.css("min-width")||"",r=(s+u).indexOf("%")>-1?t.width()/100:0,s=(s.indexOf("%")>-1?r:1)*parseInt(s,10)||i,u=(u.indexOf("%")>-1?r:1)*parseInt(u,10)||0,i=s+u?Math.min(Math.max(i,u),s):i,c.css(f,Math.round(i)).appendTo(t)),d=0,o},destroy:function(){p&&u.bgiframe.remove(),c.unbind(h)}}),o.init()}var i=!0,s=!1,o=null,u="x",a="y",f="width",l="height",c="top",h="left",p="bottom",d="right",v="center",m="flip",g="flipinvert",y="shift",b,w,E,S="qtip",x={},T=["ui-widget","ui-tooltip"],N="div.qtip."+S,C=S+"-default",k=S+"-focus",L=S+"-hover",A="_replacedByqTip",O="oldtitle",M;b=r.fn.qtip=function(e,t,u){var a=(""+e).toLowerCase(),f=o,l=r.makeArray(arguments).slice(1),c=l[l.length-1],h=this[0]?r.data(this[0],"qtip"):o;if(!arguments.length&&h||a==="api")return h;if("string"==typeof e)return this.each(function(){var e=r.data(this,"qtip");if(!e)return i;c&&c.timeStamp&&(e.cache.event=c);if(a!=="option"&&a!=="options"||!t)e[a]&&e[a].apply(e[a],l);else{if(!r.isPlainObject(t)&&u===n)return f=e.get(t),s;e.set(t,u)}}),f!==o?f:this;if("object"==typeof e||!arguments.length)return h=D(r.extend(i,{},e)),b.bind.call(this,h,c)},b.bind=function(e,t){return this.each(function(o){function p(e){function t(){c.render(typeof e=="object"||u.show.ready),a.show.add(a.hide).unbind(l)}if(c.cache.disabled)return s;c.cache.event=r.extend({},e),c.cache.target=e?r(e.target):[n],u.show.delay>0?(clearTimeout(c.timers.show),c.timers.show=setTimeout(t,u.show.delay),f.show!==f.hide&&a.hide.bind(f.hide,function(){clearTimeout(c.timers.show)})):t()}var u,a,f,l,c,h;h=r.isArray(e.id)?e.id[o]:e.id,h=!h||h===s||h.length<1||x[h]?b.nextid++:x[h]=h,l=".qtip-"+h+"-create",c=H.call(this,h,e);if(c===s)return i;u=c.options,r.each(w,function(){this.initialize==="initialize"&&this(c)}),a={show:u.show.target,hide:u.hide.target},f={show:r.trim(""+u.show.event).replace(/ /g,l+" ")+l,hide:r.trim(""+u.hide.event).replace(/ /g,l+" ")+l},/mouse(over|enter)/i.test(f.show)&&!/mouse(out|leave)/i.test(f.hide)&&(f.hide+=" mouseleave"+l),a.show.bind("mousemove"+l,function(e){_(e),c.cache.onTarget=i}),a.show.bind(f.show,p),(u.show.ready||u.prerender)&&p(t)}).attr("data-hasqtip",i)},w=b.plugins={Corner:function(e){e=(""+e).replace(/([A-Z])/," $1").replace(/middle/gi,v).toLowerCase(),this.x=(e.match(/left|right/i)||e.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(e.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var t=e.charAt(0);this.precedance=t==="t"||t==="b"?a:u,this.string=function(){return this.precedance===a?this.y+this.x:this.x+this.y},this.abbrev=function(){var e=this.x.substr(0,1),t=this.y.substr(0,1);return e===t?e:this.precedance===a?t+e:e+t},this.invertx=function(e){this.x=this.x===h?d:this.x===d?h:e||this.x},this.inverty=function(e){this.y=this.y===c?p:this.y===p?c:e||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(e,n){function c(e,t){i.left+=t*e.scrollLeft(),i.top+=t*e.scrollTop()}var i=e.offset(),s=e.closest("body"),o=r.browser.msie&&t.compatMode!=="CSS1Compat",u=n,a,f,l;if(u){do u.css("position")!=="static"&&(f=u.position(),i.left-=f.left+(parseInt(u.css("borderLeftWidth"),10)||0)+(parseInt(u.css("marginLeft"),10)||0),i.top-=f.top+(parseInt(u.css("borderTopWidth"),10)||0)+(parseInt(u.css("marginTop"),10)||0),!a&&(l=u.css("overflow"))!=="hidden"&&l!=="visible"&&(a=u));while((u=r(u[0].offsetParent)).length);(a&&a[0]!==s[0]||o)&&c(a||s,1)}return i},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||s,fn:{attr:function(e,t){if(this.length){var n=this[0],i="title",s=r.data(n,"qtip");if(e===i&&s&&"object"==typeof s&&s.options.suppress)return arguments.length<2?r.attr(n,O):(s&&s.options.content.attr===i&&s.cache.attr&&s.set("content.text",t),this.attr(O,t))}return r.fn["attr"+A].apply(this,arguments)},clone:function(e){var t=r([]),n="title",i=r.fn["clone"+A].apply(this,arguments);return e||i.filter("["+O+"]").attr("title",function(){return r.attr(this,O)}).removeAttr(O),i}}},r.each(w.fn,function(e,t){if(!t||r.fn[e+A])return i;var n=r.fn[e+A]=r.fn[e];r.fn[e]=function(){return t.apply(this,arguments)||n.apply(this,arguments)}}),r.ui||(r["cleanData"+A]=r.cleanData,r.cleanData=function(e){for(var t=0,i;(i=e[t])!==n;t++)try{r(i).triggerHandler("removeqtip")}catch(s){}r["cleanData"+A](e)}),b.version="2.0.1",b.nextid=0,b.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),b.zindex=15e3,b.defaults={prerender:s,id:s,overwrite:i,suppress:i,content:{text:i,attr:"title",deferred:s,title:{text:s,button:s}},position:{my:"top left",at:"bottom right",target:s,container:s,viewport:s,adjust:{x:0,y:0,mouse:i,resize:i,method:"flipinvert flipinvert"},effect:function(e,t,n){r(this).animate(t,{duration:200,queue:s})}},show:{target:s,event:"mouseenter",effect:i,delay:90,solo:s,ready:s,autofocus:s},hide:{target:s,event:"mouseleave",effect:i,delay:0,fixed:s,inactive:s,leave:"window",distance:s},style:{classes:"",widget:s,width:s,height:s,def:i},events:{render:o,move:o,show:o,hide:o,toggle:o,visible:o,hidden:o,focus:o,blur:o}},w.svg=function(e,n,i,s){var o=r(t),u=n[0],a={width:0,height:0,position:{top:1e10,left:1e10}},f,l,c,h,p;while(!u.getBBox)u=u.parentNode;if(u.getBBox&&u.parentNode){f=u.getBBox(),l=u.getScreenCTM(),c=u.farthestViewportElement||u;if(!c.createSVGPoint)return a;h=c.createSVGPoint(),h.x=f.x,h.y=f.y,p=h.matrixTransform(l),a.position.left=p.x,a.position.top=p.y,h.x+=f.width,h.y+=f.height,p=h.matrixTransform(l),a.width=p.x-a.position.left,a.height=p.y-a.position.top,a.position.left+=o.scrollLeft(),a.position.top+=o.scrollTop()}return a},w.ajax=function(e){var t=e.plugins.ajax;return"object"==typeof t?t:e.plugins.ajax=new B(e)},w.ajax.initialize="render",w.ajax.sanitize=function(e){var t=e.content,n;t&&"ajax"in t&&(n=t.ajax,typeof n!="object"&&(n=e.content.ajax={url:n}),"boolean"!=typeof n.once&&n.once&&(n.once=!!n.once))},r.extend(i,b.defaults,{content:{ajax:{loading:i,once:i}}}),w.tip=function(e){var t=e.plugins.tip;return"object"==typeof t?t:e.plugins.tip=new F(e)},w.tip.initialize="render",w.tip.sanitize=function(e){var t=e.style,n;t&&"tip"in t&&(n=e.style.tip,typeof n!="object"&&(e.style.tip={corner:n}),/string|boolean/i.test(typeof n.corner)||(n.corner=i),typeof n.width!="number"&&delete n.width,typeof n.height!="number"&&delete n.height,typeof n.border!="number"&&n.border!==i&&delete n.border,typeof n.offset!="number"&&delete n.offset)},r.extend(i,b.defaults,{style:{tip:{corner:i,mimic:s,width:6,height:6,border:i,offset:0}}}),w.modal=function(e){var t=e.plugins.modal;return"object"==typeof t?t:e.plugins.modal=new I(e)},w.modal.initialize="render",w.modal.sanitize=function(e){e.show&&(typeof e.show.modal!="object"?e.show.modal={on:!!e.show.modal}:typeof e.show.modal.on=="undefined"&&(e.show.modal.on=i))},w.modal.zindex=b.zindex-200,w.modal.focusable=["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"],r.extend(i,b.defaults,{show:{modal:{on:s,effect:i,blur:i,stealfocus:i,escape:i}}}),w.viewport=function(n,r,i,s,o,m,b){function j(e,t,n,i,s,o,u,a,f){var l=r[s],c=x[e],h=T[e],p=n===y,d=-O.offset[s]+A.offset[s]+A["scroll"+s],m=c===s?f:c===o?-f:-f/2,b=h===s?a:h===o?-a:-a/2,w=_&&_.size?_.size[u]||0:0,E=_&&_.corner&&_.corner.precedance===e&&!p?w:0,S=d-l+E,N=l+f-A[u]-d+E,C=m-(x.precedance===e||c===x[t]?b:0)-(h===v?a/2:0);return p?(E=_&&_.corner&&_.corner.precedance===t?w:0,C=(c===s?1:-1)*m-E,r[s]+=S>0?S:N>0?-N:0,r[s]=Math.max(-O.offset[s]+A.offset[s]+(E&&_.corner[e]===v?_.offset:0),l-C,Math.min(Math.max(-O.offset[s]+A.offset[s]+A[u],l+C),r[s]))):(i*=n===g?2:0,S>0&&(c!==s||N>0)?(r[s]-=C+i,H["invert"+e](s)):N>0&&(c!==o||S>0)&&(r[s]-=(c===v?-C:C)+i,H["invert"+e](o)),r[s]N&&(r[s]=l,H=x.clone())),r[s]-l}var w=i.target,E=n.elements.tooltip,x=i.my,T=i.at,N=i.adjust,C=N.method.split(" "),k=C[0],L=C[1]||C[0],A=i.viewport,O=i.container,M=n.cache,_=n.plugins.tip,D={left:0,top:0},P,H,B;if(!A.jquery||w[0]===e||w[0]===t.body||N.method==="none")return D;P=E.css("position")==="fixed",A={elem:A,height:A[(A[0]===e?"h":"outerH")+"eight"](),width:A[(A[0]===e?"w":"outerW")+"idth"](),scrollleft:P?0:A.scrollLeft(),scrolltop:P?0:A.scrollTop(),offset:A.offset()||{left:0,top:0}},O={elem:O,scrollLeft:O.scrollLeft(),scrollTop:O.scrollTop(),offset:O.offset()||{left:0,top:0}};if(k!=="shift"||L!=="shift")H=x.clone();return D={left:k!=="none"?j(u,a,k,N.x,h,d,f,s,m):0,top:L!=="none"?j(a,u,L,N.y,c,p,l,o,b):0},H&&M.lastClass!==(B=S+"-pos-"+H.abbrev())&&E.removeClass(n.cache.lastClass).addClass(n.cache.lastClass=B),D},w.imagemap=function(e,t,n,i){function E(e,t,n){var r=0,i=1,s=1,o=0,u=0,a=e.width,f=e.height;while(a>0&&f>0&&i>0&&s>0){a=Math.floor(a/2),f=Math.floor(f/2),n.x===h?i=a:n.x===d?i=e.width-a:i+=Math.floor(a/2),n.y===c?s=f:n.y===p?s=e.height-f:s+=Math.floor(f/2),r=t.length;while(r--){if(t.length<2)break;o=t[r][0]-e.position.left,u=t[r][1]-e.position.top,(n.x===h&&o>=i||n.x===d&&o<=i||n.x===v&&(oe.width-i)||n.y===c&&u>=s||n.y===p&&u<=s||n.y===v&&(ue.height-s))&&t.splice(r,1)}}return{left:t[0][0],top:t[0][1]}}t.jquery||(t=r(t));var s=e.cache.areas={},o=(t[0].shape||t.attr("shape")).toLowerCase(),u=t[0].coords||t.attr("coords"),a=u.split(","),f=[],l=r('img[usemap="#'+t.parent("map").attr("name")+'"]'),m=l.offset(),g={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10}},y=0,b=0,w;m.left+=Math.ceil((l.outerWidth()-l.width())/2),m.top+=Math.ceil((l.outerHeight()-l.height())/2);if(o==="poly"){y=a.length;while(y--)b=[parseInt(a[--y],10),parseInt(a[y+1],10)],b[0]>g.position.right&&(g.position.right=b[0]),b[0]g.position.bottom&&(g.position.bottom=b[1]),b[1]0?setTimeout(d.proxy(a,this),b):void a.call(this)}function m(a){this.tooltip.hasClass(ab)||(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this.timers.show=l.call(this,function(){this.toggle(D,a)},this.options.show.delay))}function n(a){if(!this.tooltip.hasClass(ab)&&!this.destroyed){var b=d(a.relatedTarget),c=b.closest(W)[0]===this.tooltip[0],e=b[0]===this.options.show.target[0];if(clearTimeout(this.timers.show),clearTimeout(this.timers.hide),this!==b[0]&&"mouse"===this.options.position.target&&c||this.options.hide.fixed&&/mouse(out|leave|move)/.test(a.type)&&(c||e))try{a.preventDefault(),a.stopImmediatePropagation()}catch(f){}else this.timers.hide=l.call(this,function(){this.toggle(E,a)},this.options.hide.delay,this)}}function o(a){!this.tooltip.hasClass(ab)&&this.options.hide.inactive&&(clearTimeout(this.timers.inactive),this.timers.inactive=l.call(this,function(){this.hide(a)},this.options.hide.inactive))}function p(a){this.rendered&&this.tooltip[0].offsetWidth>0&&this.reposition(a)}function q(a,c,e){d(b.body).delegate(a,(c.split?c:c.join("."+S+" "))+"."+S,function(){var a=y.api[d.attr(this,U)];a&&!a.disabled&&e.apply(a,arguments)})}function r(a,c,f){var g,i,j,k,l,m=d(b.body),n=a[0]===b?m:a,o=a.metadata?a.metadata(f.metadata):F,p="html5"===f.metadata.type&&o?o[f.metadata.name]:F,q=a.data(f.metadata.name||"qtipopts");try{q="string"==typeof q?d.parseJSON(q):q}catch(r){}if(k=d.extend(D,{},y.defaults,f,"object"==typeof q?h(q):F,h(p||o)),i=k.position,k.id=c,"boolean"==typeof k.content.text){if(j=a.attr(k.content.attr),k.content.attr===E||!j)return E;k.content.text=j}if(i.container.length||(i.container=m),i.target===E&&(i.target=n),k.show.target===E&&(k.show.target=n),k.show.solo===D&&(k.show.solo=i.container.closest("body")),k.hide.target===E&&(k.hide.target=n),k.position.viewport===D&&(k.position.viewport=i.container),i.container=i.container.eq(0),i.at=new A(i.at,D),i.my=new A(i.my),a.data(S))if(k.overwrite)a.qtip("destroy",!0);else if(k.overwrite===E)return E;return a.attr(T,c),k.suppress&&(l=a.attr("title"))&&a.removeAttr("title").attr(cb,l).attr("title",""),g=new e(a,k,c,!!j),a.data(S,g),g}function s(a){return a.charAt(0).toUpperCase()+a.slice(1)}function t(a,b){var d,e,f=b.charAt(0).toUpperCase()+b.slice(1),g=(b+" "+rb.join(f+" ")+f).split(" "),h=0;if(qb[b])return a.css(qb[b]);for(;d=g[h++];)if((e=a.css(d))!==c)return qb[b]=d,e}function u(a,b){return Math.ceil(parseFloat(t(a,b)))}function v(a,b){this._ns="tip",this.options=b,this.offset=b.offset,this.size=[b.width,b.height],this.init(this.qtip=a)}function w(a,b){this.options=b,this._ns="-modal",this.init(this.qtip=a)}function x(a){this._ns="ie6",this.init(this.qtip=a)}var y,z,A,B,C,D=!0,E=!1,F=null,G="x",H="y",I="width",J="height",K="top",L="left",M="bottom",N="right",O="center",P="flipinvert",Q="shift",R={},S="qtip",T="data-hasqtip",U="data-qtip-id",V=["ui-widget","ui-tooltip"],W="."+S,X="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),Y=S+"-fixed",Z=S+"-default",$=S+"-focus",_=S+"-hover",ab=S+"-disabled",bb="_replacedByqTip",cb="oldtitle",db={ie:function(){for(var a=4,c=b.createElement("div");(c.innerHTML="")&&c.getElementsByTagName("i")[0];a+=1);return a>4?a:0/0}(),iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||E};z=e.prototype,z._when=function(a){return d.when.apply(d,a)},z.render=function(a){if(this.rendered||this.destroyed)return this;var b,c=this,e=this.options,f=this.cache,g=this.elements,h=e.content.text,i=e.content.title,j=e.content.button,k=e.position,l=("."+this._id+" ",[]);return d.attr(this.target[0],"aria-describedby",this._id),f.posClass=this._createPosClass((this.position={my:k.my,at:k.at}).my),this.tooltip=g.tooltip=b=d("
",{id:this._id,"class":[S,Z,e.style.classes,f.posClass].join(" "),width:e.style.width||"",height:e.style.height||"",tracking:"mouse"===k.target&&k.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":E,"aria-describedby":this._id+"-content","aria-hidden":D}).toggleClass(ab,this.disabled).attr(U,this.id).data(S,this).appendTo(k.container).append(g.content=d("
",{"class":S+"-content",id:this._id+"-content","aria-atomic":D})),this.rendered=-1,this.positioning=D,i&&(this._createTitle(),d.isFunction(i)||l.push(this._updateTitle(i,E))),j&&this._createButton(),d.isFunction(h)||l.push(this._updateContent(h,E)),this.rendered=D,this._setWidget(),d.each(R,function(a){var b;"render"===this.initialize&&(b=this(c))&&(c.plugins[a]=b)}),this._unassignEvents(),this._assignEvents(),this._when(l).then(function(){c._trigger("render"),c.positioning=E,c.hiddenDuringWait||!e.show.ready&&!a||c.toggle(D,f.event,E),c.hiddenDuringWait=E}),y.api[this.id]=this,this},z.destroy=function(a){function b(){if(!this.destroyed){this.destroyed=D;var a,b=this.target,c=b.attr(cb);this.rendered&&this.tooltip.stop(1,0).find("*").remove().end().remove(),d.each(this.plugins,function(){this.destroy&&this.destroy()});for(a in this.timers)clearTimeout(this.timers[a]);b.removeData(S).removeAttr(U).removeAttr(T).removeAttr("aria-describedby"),this.options.suppress&&c&&b.attr("title",c).removeAttr(cb),this._unassignEvents(),this.options=this.elements=this.cache=this.timers=this.plugins=this.mouse=F,delete y.api[this.id]}}return this.destroyed?this.target:(a===D&&"hide"!==this.triggering||!this.rendered?b.call(this):(this.tooltip.one("tooltiphidden",d.proxy(b,this)),!this.triggering&&this.hide()),this.target)},B=z.checks={builtin:{"^id$":function(a,b,c,e){var f=c===D?y.nextid:c,g=S+"-"+f;f!==E&&f.length>0&&!d("#"+g).length?(this._id=g,this.rendered&&(this.tooltip[0].id=this._id,this.elements.content[0].id=this._id+"-content",this.elements.title[0].id=this._id+"-title")):a[b]=e},"^prerender":function(a,b,c){c&&!this.rendered&&this.render(this.options.show.ready)},"^content.text$":function(a,b,c){this._updateContent(c)},"^content.attr$":function(a,b,c,d){this.options.content.text===this.target.attr(d)&&this._updateContent(this.target.attr(c))},"^content.title$":function(a,b,c){return c?(c&&!this.elements.title&&this._createTitle(),void this._updateTitle(c)):this._removeTitle()},"^content.button$":function(a,b,c){this._updateButton(c)},"^content.title.(text|button)$":function(a,b,c){this.set("content."+b,c)},"^position.(my|at)$":function(a,b,c){"string"==typeof c&&(this.position[b]=a[b]=new A(c,"at"===b))},"^position.container$":function(a,b,c){this.rendered&&this.tooltip.appendTo(c)},"^show.ready$":function(a,b,c){c&&(!this.rendered&&this.render(D)||this.toggle(D))},"^style.classes$":function(a,b,c,d){this.rendered&&this.tooltip.removeClass(d).addClass(c)},"^style.(width|height)":function(a,b,c){this.rendered&&this.tooltip.css(b,c)},"^style.widget|content.title":function(){this.rendered&&this._setWidget()},"^style.def":function(a,b,c){this.rendered&&this.tooltip.toggleClass(Z,!!c)},"^events.(render|show|move|hide|focus|blur)$":function(a,b,c){this.rendered&&this.tooltip[(d.isFunction(c)?"":"un")+"bind"]("tooltip"+b,c)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){if(this.rendered){var a=this.options.position;this.tooltip.attr("tracking","mouse"===a.target&&a.adjust.mouse),this._unassignEvents(),this._assignEvents()}}}},z.get=function(a){if(this.destroyed)return this;var b=i(this.options,a.toLowerCase()),c=b[0][b[1]];return c.precedance?c.string():c};var eb=/^position\.(my|at|adjust|target|container|viewport)|style|content|show\.ready/i,fb=/^prerender|show\.ready/i;z.set=function(a,b){if(this.destroyed)return this;{var c,e=this.rendered,f=E,g=this.options;this.checks}return"string"==typeof a?(c=a,a={},a[c]=b):a=d.extend({},a),d.each(a,function(b,c){if(e&&fb.test(b))return void delete a[b];var h,j=i(g,b.toLowerCase());h=j[0][j[1]],j[0][j[1]]=c&&c.nodeType?d(c):c,f=eb.test(b)||f,a[b]=[j[0],j[1],c,h]}),h(g),this.positioning=D,d.each(a,d.proxy(j,this)),this.positioning=E,this.rendered&&this.tooltip[0].offsetWidth>0&&f&&this.reposition("mouse"===g.position.target?F:this.cache.event),this},z._update=function(a,b){var c=this,e=this.cache;return this.rendered&&a?(d.isFunction(a)&&(a=a.call(this.elements.target,e.event,this)||""),d.isFunction(a.then)?(e.waiting=D,a.then(function(a){return e.waiting=E,c._update(a,b)},F,function(a){return c._update(a,b)})):a===E||!a&&""!==a?E:(a.jquery&&a.length>0?b.empty().append(a.css({display:"block",visibility:"visible"})):b.html(a),this._waitForContent(b).then(function(a){c.rendered&&c.tooltip[0].offsetWidth>0&&c.reposition(e.event,!a.length)}))):E},z._waitForContent=function(a){var b=this.cache;return b.waiting=D,(d.fn.imagesLoaded?a.imagesLoaded():d.Deferred().resolve([])).done(function(){b.waiting=E}).promise()},z._updateContent=function(a,b){this._update(a,this.elements.content,b)},z._updateTitle=function(a,b){this._update(a,this.elements.title,b)===E&&this._removeTitle(E)},z._createTitle=function(){var a=this.elements,b=this._id+"-title";a.titlebar&&this._removeTitle(),a.titlebar=d("
",{"class":S+"-titlebar "+(this.options.style.widget?k("header"):"")}).append(a.title=d("
",{id:b,"class":S+"-title","aria-atomic":D})).insertBefore(a.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(a){d(this).toggleClass("ui-state-active ui-state-focus","down"===a.type.substr(-4))}).delegate(".qtip-close","mouseover mouseout",function(a){d(this).toggleClass("ui-state-hover","mouseover"===a.type)}),this.options.content.button&&this._createButton()},z._removeTitle=function(a){var b=this.elements;b.title&&(b.titlebar.remove(),b.titlebar=b.title=b.button=F,a!==E&&this.reposition())},z._createPosClass=function(a){return S+"-pos-"+(a||this.options.position.my).abbrev()},z.reposition=function(c,e){if(!this.rendered||this.positioning||this.destroyed)return this;this.positioning=D;var f,g,h,i,j=this.cache,k=this.tooltip,l=this.options.position,m=l.target,n=l.my,o=l.at,p=l.viewport,q=l.container,r=l.adjust,s=r.method.split(" "),t=k.outerWidth(E),u=k.outerHeight(E),v=0,w=0,x=k.css("position"),y={left:0,top:0},z=k[0].offsetWidth>0,A=c&&"scroll"===c.type,B=d(a),C=q[0].ownerDocument,F=this.mouse;if(d.isArray(m)&&2===m.length)o={x:L,y:K},y={left:m[0],top:m[1]};else if("mouse"===m)o={x:L,y:K},(!r.mouse||this.options.hide.distance)&&j.origin&&j.origin.pageX?c=j.origin:!c||c&&("resize"===c.type||"scroll"===c.type)?c=j.event:F&&F.pageX&&(c=F),"static"!==x&&(y=q.offset()),C.body.offsetWidth!==(a.innerWidth||C.documentElement.clientWidth)&&(g=d(b.body).offset()),y={left:c.pageX-y.left+(g&&g.left||0),top:c.pageY-y.top+(g&&g.top||0)},r.mouse&&A&&F&&(y.left-=(F.scrollX||0)-B.scrollLeft(),y.top-=(F.scrollY||0)-B.scrollTop());else{if("event"===m?c&&c.target&&"scroll"!==c.type&&"resize"!==c.type?j.target=d(c.target):c.target||(j.target=this.elements.target):"event"!==m&&(j.target=d(m.jquery?m:this.elements.target)),m=j.target,m=d(m).eq(0),0===m.length)return this;m[0]===b||m[0]===a?(v=db.iOS?a.innerWidth:m.width(),w=db.iOS?a.innerHeight:m.height(),m[0]===a&&(y={top:(p||m).scrollTop(),left:(p||m).scrollLeft()})):R.imagemap&&m.is("area")?f=R.imagemap(this,m,o,R.viewport?s:E):R.svg&&m&&m[0].ownerSVGElement?f=R.svg(this,m,o,R.viewport?s:E):(v=m.outerWidth(E),w=m.outerHeight(E),y=m.offset()),f&&(v=f.width,w=f.height,g=f.offset,y=f.position),y=this.reposition.offset(m,y,q),(db.iOS>3.1&&db.iOS<4.1||db.iOS>=4.3&&db.iOS<4.33||!db.iOS&&"fixed"===x)&&(y.left-=B.scrollLeft(),y.top-=B.scrollTop()),(!f||f&&f.adjustable!==E)&&(y.left+=o.x===N?v:o.x===O?v/2:0,y.top+=o.y===M?w:o.y===O?w/2:0)}return y.left+=r.x+(n.x===N?-t:n.x===O?-t/2:0),y.top+=r.y+(n.y===M?-u:n.y===O?-u/2:0),R.viewport?(h=y.adjusted=R.viewport(this,y,l,v,w,t,u),g&&h.left&&(y.left+=g.left),g&&h.top&&(y.top+=g.top),h.my&&(this.position.my=h.my)):y.adjusted={left:0,top:0},j.posClass!==(i=this._createPosClass(this.position.my))&&k.removeClass(j.posClass).addClass(j.posClass=i),this._trigger("move",[y,p.elem||p],c)?(delete y.adjusted,e===E||!z||isNaN(y.left)||isNaN(y.top)||"mouse"===m||!d.isFunction(l.effect)?k.css(y):d.isFunction(l.effect)&&(l.effect.call(k,this,d.extend({},y)),k.queue(function(a){d(this).css({opacity:"",height:""}),db.ie&&this.style.removeAttribute("filter"),a()})),this.positioning=E,this):this},z.reposition.offset=function(a,c,e){function f(a,b){c.left+=b*a.scrollLeft(),c.top+=b*a.scrollTop()}if(!e[0])return c;var g,h,i,j,k=d(a[0].ownerDocument),l=!!db.ie&&"CSS1Compat"!==b.compatMode,m=e[0];do"static"!==(h=d.css(m,"position"))&&("fixed"===h?(i=m.getBoundingClientRect(),f(k,-1)):(i=d(m).position(),i.left+=parseFloat(d.css(m,"borderLeftWidth"))||0,i.top+=parseFloat(d.css(m,"borderTopWidth"))||0),c.left-=i.left+(parseFloat(d.css(m,"marginLeft"))||0),c.top-=i.top+(parseFloat(d.css(m,"marginTop"))||0),g||"hidden"===(j=d.css(m,"overflow"))||"visible"===j||(g=d(m)));while(m=m.offsetParent);return g&&(g[0]!==k[0]||l)&&f(g,1),c};var gb=(A=z.reposition.Corner=function(a,b){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,O).toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase(),this.forceY=!!b;var c=a.charAt(0);this.precedance="t"===c||"b"===c?H:G}).prototype;gb.invert=function(a,b){this[a]=this[a]===L?N:this[a]===N?L:b||this[a]},gb.string=function(a){var b=this.x,c=this.y,d=b!==c?"center"===b||"center"!==c&&(this.precedance===H||this.forceY)?[c,b]:[b,c]:[b];return a!==!1?d.join(" "):d},gb.abbrev=function(){var a=this.string(!1);return a[0].charAt(0)+(a[1]&&a[1].charAt(0)||"")},gb.clone=function(){return new A(this.string(),this.forceY)},z.toggle=function(a,c){var e=this.cache,f=this.options,g=this.tooltip;if(c){if(/over|enter/.test(c.type)&&e.event&&/out|leave/.test(e.event.type)&&f.show.target.add(c.target).length===f.show.target.length&&g.has(c.relatedTarget).length)return this;e.event=d.event.fix(c)}if(this.waiting&&!a&&(this.hiddenDuringWait=D),!this.rendered)return a?this.render(1):this;if(this.destroyed||this.disabled)return this;var h,i,j,k=a?"show":"hide",l=this.options[k],m=(this.options[a?"hide":"show"],this.options.position),n=this.options.content,o=this.tooltip.css("width"),p=this.tooltip.is(":visible"),q=a||1===l.target.length,r=!c||l.target.length<2||e.target[0]===c.target;return(typeof a).search("boolean|number")&&(a=!p),h=!g.is(":animated")&&p===a&&r,i=h?F:!!this._trigger(k,[90]),this.destroyed?this:(i!==E&&a&&this.focus(c),!i||h?this:(d.attr(g[0],"aria-hidden",!a),a?(this.mouse&&(e.origin=d.event.fix(this.mouse)),d.isFunction(n.text)&&this._updateContent(n.text,E),d.isFunction(n.title)&&this._updateTitle(n.title,E),!C&&"mouse"===m.target&&m.adjust.mouse&&(d(b).bind("mousemove."+S,this._storeMouse),C=D),o||g.css("width",g.outerWidth(E)),this.reposition(c,arguments[2]),o||g.css("width",""),l.solo&&("string"==typeof l.solo?d(l.solo):d(W,l.solo)).not(g).not(l.target).qtip("hide",d.Event("tooltipsolo"))):(clearTimeout(this.timers.show),delete e.origin,C&&!d(W+'[tracking="true"]:visible',l.solo).not(g).length&&(d(b).unbind("mousemove."+S),C=E),this.blur(c)),j=d.proxy(function(){a?(db.ie&&g[0].style.removeAttribute("filter"),g.css("overflow",""),"string"==typeof l.autofocus&&d(this.options.show.autofocus,g).focus(),this.options.show.target.trigger("qtip-"+this.id+"-inactive")):g.css({display:"",visibility:"",opacity:"",left:"",top:""}),this._trigger(a?"visible":"hidden")},this),l.effect===E||q===E?(g[k](),j()):d.isFunction(l.effect)?(g.stop(1,1),l.effect.call(g,this),g.queue("fx",function(a){j(),a()})):g.fadeTo(90,a?1:0,j),a&&l.target.trigger("qtip-"+this.id+"-inactive"),this))},z.show=function(a){return this.toggle(D,a)},z.hide=function(a){return this.toggle(E,a)},z.focus=function(a){if(!this.rendered||this.destroyed)return this;var b=d(W),c=this.tooltip,e=parseInt(c[0].style.zIndex,10),f=y.zindex+b.length;return c.hasClass($)||this._trigger("focus",[f],a)&&(e!==f&&(b.each(function(){this.style.zIndex>e&&(this.style.zIndex=this.style.zIndex-1)}),b.filter("."+$).qtip("blur",a)),c.addClass($)[0].style.zIndex=f),this},z.blur=function(a){return!this.rendered||this.destroyed?this:(this.tooltip.removeClass($),this._trigger("blur",[this.tooltip.css("zIndex")],a),this)},z.disable=function(a){return this.destroyed?this:("toggle"===a?a=!(this.rendered?this.tooltip.hasClass(ab):this.disabled):"boolean"!=typeof a&&(a=D),this.rendered&&this.tooltip.toggleClass(ab,a).attr("aria-disabled",a),this.disabled=!!a,this)},z.enable=function(){return this.disable(E)},z._createButton=function(){var a=this,b=this.elements,c=b.tooltip,e=this.options.content.button,f="string"==typeof e,g=f?e:"Close tooltip";b.button&&b.button.remove(),b.button=e.jquery?e:d("",{"class":"qtip-close "+(this.options.style.widget?"":S+"-icon"),title:g,"aria-label":g}).prepend(d("",{"class":"ui-icon ui-icon-close",html:"×"})),b.button.appendTo(b.titlebar||c).attr("role","button").click(function(b){return c.hasClass(ab)||a.hide(b),E})},z._updateButton=function(a){if(!this.rendered)return E;var b=this.elements.button;a?this._createButton():b.remove()},z._setWidget=function(){var a=this.options.style.widget,b=this.elements,c=b.tooltip,d=c.hasClass(ab);c.removeClass(ab),ab=a?"ui-state-disabled":"qtip-disabled",c.toggleClass(ab,d),c.toggleClass("ui-helper-reset "+k(),a).toggleClass(Z,this.options.style.def&&!a),b.content&&b.content.toggleClass(k("content"),a),b.titlebar&&b.titlebar.toggleClass(k("header"),a),b.button&&b.button.toggleClass(S+"-icon",!a)},z._storeMouse=function(a){return(this.mouse=d.event.fix(a)).type="mousemove",this},z._bind=function(a,b,c,e,f){if(a&&c&&b.length){var g="."+this._id+(e?"-"+e:"");return d(a).bind((b.split?b:b.join(g+" "))+g,d.proxy(c,f||this)),this}},z._unbind=function(a,b){return a&&d(a).unbind("."+this._id+(b?"-"+b:"")),this},z._trigger=function(a,b,c){var e=d.Event("tooltip"+a);return e.originalEvent=c&&d.extend({},c)||this.cache.event||F,this.triggering=a,this.tooltip.trigger(e,[this].concat(b||[])),this.triggering=E,!e.isDefaultPrevented()},z._bindEvents=function(a,b,c,e,f,g){var h=c.filter(e).add(e.filter(c)),i=[];h.length&&(d.each(b,function(b,c){var e=d.inArray(c,a);e>-1&&i.push(a.splice(e,1)[0])}),i.length&&(this._bind(h,i,function(a){var b=this.rendered?this.tooltip[0].offsetWidth>0:!1;(b?g:f).call(this,a)}),c=c.not(h),e=e.not(h))),this._bind(c,a,f),this._bind(e,b,g)},z._assignInitialEvents=function(a){function b(a){return this.disabled||this.destroyed?E:(this.cache.event=a&&d.event.fix(a),this.cache.target=a&&d(a.target),clearTimeout(this.timers.show),void(this.timers.show=l.call(this,function(){this.render("object"==typeof a||c.show.ready)},c.prerender?0:c.show.delay)))}var c=this.options,e=c.show.target,f=c.hide.target,g=c.show.event?d.trim(""+c.show.event).split(" "):[],h=c.hide.event?d.trim(""+c.hide.event).split(" "):[];this._bind(this.elements.target,["remove","removeqtip"],function(){this.destroy(!0)},"destroy"),/mouse(over|enter)/i.test(c.show.event)&&!/mouse(out|leave)/i.test(c.hide.event)&&h.push("mouseleave"),this._bind(e,"mousemove",function(a){this._storeMouse(a),this.cache.onTarget=D}),this._bindEvents(g,h,e,f,b,function(){return this.timers?void clearTimeout(this.timers.show):E}),(c.show.ready||c.prerender)&&b.call(this,a)},z._assignEvents=function(){var c=this,e=this.options,f=e.position,g=this.tooltip,h=e.show.target,i=e.hide.target,j=f.container,k=f.viewport,l=d(b),q=(d(b.body),d(a)),r=e.show.event?d.trim(""+e.show.event).split(" "):[],s=e.hide.event?d.trim(""+e.hide.event).split(" "):[];d.each(e.events,function(a,b){c._bind(g,"toggle"===a?["tooltipshow","tooltiphide"]:["tooltip"+a],b,null,g)}),/mouse(out|leave)/i.test(e.hide.event)&&"window"===e.hide.leave&&this._bind(l,["mouseout","blur"],function(a){/select|option/.test(a.target.nodeName)||a.relatedTarget||this.hide(a)}),e.hide.fixed?i=i.add(g.addClass(Y)):/mouse(over|enter)/i.test(e.show.event)&&this._bind(i,"mouseleave",function(){clearTimeout(this.timers.show)}),(""+e.hide.event).indexOf("unfocus")>-1&&this._bind(j.closest("html"),["mousedown","touchstart"],function(a){var b=d(a.target),c=this.rendered&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0,e=b.parents(W).filter(this.tooltip[0]).length>0;b[0]===this.target[0]||b[0]===this.tooltip[0]||e||this.target.has(b[0]).length||!c||this.hide(a)}),"number"==typeof e.hide.inactive&&(this._bind(h,"qtip-"+this.id+"-inactive",o,"inactive"),this._bind(i.add(g),y.inactiveEvents,o)),this._bindEvents(r,s,h,i,m,n),this._bind(h.add(g),"mousemove",function(a){if("number"==typeof e.hide.distance){var b=this.cache.origin||{},c=this.options.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&this.hide(a)}this._storeMouse(a)}),"mouse"===f.target&&f.adjust.mouse&&(e.hide.event&&this._bind(h,["mouseenter","mouseleave"],function(a){return this.cache?void(this.cache.onTarget="mouseenter"===a.type):E}),this._bind(l,"mousemove",function(a){this.rendered&&this.cache.onTarget&&!this.tooltip.hasClass(ab)&&this.tooltip[0].offsetWidth>0&&this.reposition(a)})),(f.adjust.resize||k.length)&&this._bind(d.event.special.resize?k:q,"resize",p),f.adjust.scroll&&this._bind(q.add(f.container),"scroll",p)},z._unassignEvents=function(){var c=this.options,e=c.show.target,f=c.hide.target,g=d.grep([this.elements.target[0],this.rendered&&this.tooltip[0],c.position.container[0],c.position.viewport[0],c.position.container.closest("html")[0],a,b],function(a){return"object"==typeof a});e&&e.toArray&&(g=g.concat(e.toArray())),f&&f.toArray&&(g=g.concat(f.toArray())),this._unbind(g)._unbind(g,"destroy")._unbind(g,"inactive")},d(function(){q(W,["mouseenter","mouseleave"],function(a){var b="mouseenter"===a.type,c=d(a.currentTarget),e=d(a.relatedTarget||a.target),f=this.options;b?(this.focus(a),c.hasClass(Y)&&!c.hasClass(ab)&&clearTimeout(this.timers.hide)):"mouse"===f.position.target&&f.position.adjust.mouse&&f.hide.event&&f.show.target&&!e.closest(f.show.target[0]).length&&this.hide(a),c.toggleClass(_,b)}),q("["+U+"]",X,o)}),y=d.fn.qtip=function(a,b,e){var f=(""+a).toLowerCase(),g=F,i=d.makeArray(arguments).slice(1),j=i[i.length-1],k=this[0]?d.data(this[0],S):F;return!arguments.length&&k||"api"===f?k:"string"==typeof a?(this.each(function(){var a=d.data(this,S);if(!a)return D;if(j&&j.timeStamp&&(a.cache.event=j),!b||"option"!==f&&"options"!==f)a[f]&&a[f].apply(a,i);else{if(e===c&&!d.isPlainObject(b))return g=a.get(b),E;a.set(b,e)}}),g!==F?g:this):"object"!=typeof a&&arguments.length?void 0:(k=h(d.extend(D,{},a)),this.each(function(a){var b,c;return c=d.isArray(k.id)?k.id[a]:k.id,c=!c||c===E||c.length<1||y.api[c]?y.nextid++:c,b=r(d(this),c,k),b===E?D:(y.api[c]=b,d.each(R,function(){"initialize"===this.initialize&&this(b)}),void b._assignInitialEvents(j))}))},d.qtip=e,y.api={},d.each({attr:function(a,b){if(this.length){var c=this[0],e="title",f=d.data(c,"qtip");if(a===e&&f&&"object"==typeof f&&f.options.suppress)return arguments.length<2?d.attr(c,cb):(f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",b),this.attr(cb,b))}return d.fn["attr"+bb].apply(this,arguments)},clone:function(a){var b=(d([]),d.fn["clone"+bb].apply(this,arguments));return a||b.filter("["+cb+"]").attr("title",function(){return d.attr(this,cb)}).removeAttr(cb),b}},function(a,b){if(!b||d.fn[a+bb])return D;var c=d.fn[a+bb]=d.fn[a];d.fn[a]=function(){return b.apply(this,arguments)||c.apply(this,arguments)}}),d.ui||(d["cleanData"+bb]=d.cleanData,d.cleanData=function(a){for(var b,c=0;(b=d(a[c])).length;c++)if(b.attr(T))try{b.triggerHandler("removeqtip")}catch(e){}d["cleanData"+bb].apply(this,arguments)}),y.version="2.2.1",y.nextid=0,y.inactiveEvents=X,y.zindex=15e3,y.defaults={prerender:E,id:E,overwrite:D,suppress:D,content:{text:D,attr:"title",title:E,button:E},position:{my:"top left",at:"bottom right",target:E,container:E,viewport:E,adjust:{x:0,y:0,mouse:D,scroll:D,resize:D,method:"flipinvert flipinvert"},effect:function(a,b){d(this).animate(b,{duration:200,queue:E})}},show:{target:E,event:"mouseenter",effect:D,delay:90,solo:E,ready:E,autofocus:E},hide:{target:E,event:"mouseleave",effect:D,delay:0,fixed:E,inactive:E,leave:"window",distance:E},style:{classes:"",widget:E,width:E,height:E,def:D},events:{render:F,move:F,show:F,hide:F,toggle:F,visible:F,hidden:F,focus:F,blur:F}};var hb,ib="margin",jb="border",kb="color",lb="background-color",mb="transparent",nb=" !important",ob=!!b.createElement("canvas").getContext,pb=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,qb={},rb=["Webkit","O","Moz","ms"];if(ob)var sb=a.devicePixelRatio||1,tb=function(){var a=b.createElement("canvas").getContext("2d");return a.backingStorePixelRatio||a.webkitBackingStorePixelRatio||a.mozBackingStorePixelRatio||a.msBackingStorePixelRatio||a.oBackingStorePixelRatio||1}(),ub=sb/tb;else var vb=function(a,b,c){return"'};d.extend(v.prototype,{init:function(a){var b,c;c=this.element=a.elements.tip=d("
",{"class":S+"-tip"}).prependTo(a.tooltip),ob?(b=d("").appendTo(this.element)[0].getContext("2d"),b.lineJoin="miter",b.miterLimit=1e5,b.save()):(b=vb("shape",'coordorigin="0,0"',"position:absolute;"),this.element.html(b+b),a._bind(d("*",c).add(c),["click","mousedown"],function(a){a.stopPropagation()},this._ns)),a._bind(a.tooltip,"tooltipmove",this.reposition,this._ns,this),this.create()},_swapDimensions:function(){this.size[0]=this.options.height,this.size[1]=this.options.width},_resetDimensions:function(){this.size[0]=this.options.width,this.size[1]=this.options.height},_useTitle:function(a){var b=this.qtip.elements.titlebar;return b&&(a.y===K||a.y===O&&this.element.position().top+this.size[1]/2+this.options.offsetl&&!pb.test(e[1])&&(e[0]=e[1]),this.border=l=p.border!==D?p.border:l):this.border=l=0,k=this.size=this._calculateSize(b),n.css({width:k[0],height:k[1],lineHeight:k[1]+"px"}),j=b.precedance===H?[s(r.x===L?l:r.x===N?k[0]-q[0]-l:(k[0]-q[0])/2),s(r.y===K?k[1]-q[1]:0)]:[s(r.x===L?k[0]-q[0]:0),s(r.y===K?l:r.y===M?k[1]-q[1]-l:(k[1]-q[1])/2)],ob?(g=o[0].getContext("2d"),g.restore(),g.save(),g.clearRect(0,0,6e3,6e3),h=this._calculateTip(r,q,ub),i=this._calculateTip(r,this.size,ub),o.attr(I,k[0]*ub).attr(J,k[1]*ub),o.css(I,k[0]).css(J,k[1]),this._drawCoords(g,i),g.fillStyle=e[1],g.fill(),g.translate(j[0]*ub,j[1]*ub),this._drawCoords(g,h),g.fillStyle=e[0],g.fill()):(h=this._calculateTip(r),h="m"+h[0]+","+h[1]+" l"+h[2]+","+h[3]+" "+h[4]+","+h[5]+" xe",j[2]=l&&/^(r|b)/i.test(b.string())?8===db.ie?2:1:0,o.css({coordsize:k[0]+l+" "+(k[1]+l),antialias:""+(r.string().indexOf(O)>-1),left:j[0]-j[2]*Number(f===G),top:j[1]-j[2]*Number(f===H),width:k[0]+l,height:k[1]+l}).each(function(a){var b=d(this);b[b.prop?"prop":"attr"]({coordsize:k[0]+l+" "+(k[1]+l),path:h,fillcolor:e[0],filled:!!a,stroked:!a}).toggle(!(!l&&!a)),!a&&b.html(vb("stroke",'weight="'+2*l+'px" color="'+e[1]+'" miterlimit="1000" joinstyle="miter"'))})),a.opera&&setTimeout(function(){m.tip.css({display:"inline-block",visibility:"visible"})},1),c!==E&&this.calculate(b,k)},calculate:function(a,b){if(!this.enabled)return E;var c,e,f=this,g=this.qtip.elements,h=this.element,i=this.options.offset,j=(g.tooltip.hasClass("ui-widget"),{});return a=a||this.corner,c=a.precedance,b=b||this._calculateSize(a),e=[a.x,a.y],c===G&&e.reverse(),d.each(e,function(d,e){var h,k,l; +e===O?(h=c===H?L:K,j[h]="50%",j[ib+"-"+h]=-Math.round(b[c===H?0:1]/2)+i):(h=f._parseWidth(a,e,g.tooltip),k=f._parseWidth(a,e,g.content),l=f._parseRadius(a),j[e]=Math.max(-f.border,d?k:i+(l>h?l:-h)))}),j[a[c]]-=b[c===G?0:1],h.css({margin:"",top:"",bottom:"",left:"",right:""}).css(j),j},reposition:function(a,b,d){function e(a,b,c,d,e){a===Q&&j.precedance===b&&k[d]&&j[c]!==O?j.precedance=j.precedance===G?H:G:a!==Q&&k[d]&&(j[b]=j[b]===O?k[d]>0?d:e:j[b]===d?e:d)}function f(a,b,e){j[a]===O?p[ib+"-"+b]=o[a]=g[ib+"-"+b]-k[b]:(h=g[e]!==c?[k[b],-g[b]]:[-k[b],g[b]],(o[a]=Math.max(h[0],h[1]))>h[0]&&(d[b]-=k[b],o[b]=E),p[g[e]!==c?e:b]=o[a])}if(this.enabled){var g,h,i=b.cache,j=this.corner.clone(),k=d.adjusted,l=b.options.position.adjust.method.split(" "),m=l[0],n=l[1]||l[0],o={left:E,top:E,x:0,y:0},p={};this.corner.fixed!==D&&(e(m,G,H,L,N),e(n,H,G,K,M),(j.string()!==i.corner.string()||i.cornerTop!==k.top||i.cornerLeft!==k.left)&&this.update(j,E)),g=this.calculate(j),g.right!==c&&(g.left=-g.right),g.bottom!==c&&(g.top=-g.bottom),g.user=this.offset,(o.left=m===Q&&!!k.left)&&f(G,L,N),(o.top=n===Q&&!!k.top)&&f(H,K,M),this.element.css(p).toggle(!(o.x&&o.y||j.x===O&&o.y||j.y===O&&o.x)),d.left-=g.left.charAt?g.user:m!==Q||o.top||!o.left&&!o.top?g.left+this.border:0,d.top-=g.top.charAt?g.user:n!==Q||o.left||!o.left&&!o.top?g.top+this.border:0,i.cornerLeft=k.left,i.cornerTop=k.top,i.corner=j.clone()}},destroy:function(){this.qtip._unbind(this.qtip.tooltip,this._ns),this.qtip.elements.tip&&this.qtip.elements.tip.find("*").remove().end().remove()}}),hb=R.tip=function(a){return new v(a,a.options.style.tip)},hb.initialize="render",hb.sanitize=function(a){if(a.style&&"tip"in a.style){var b=a.style.tip;"object"!=typeof b&&(b=a.style.tip={corner:b}),/string|boolean/i.test(typeof b.corner)||(b.corner=D)}},B.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){this.create(),this.qtip.reposition()},"^style.tip.(height|width)$":function(a){this.size=[a.width,a.height],this.update(),this.qtip.reposition()},"^content.title|style.(classes|widget)$":function(){this.update()}},d.extend(D,y.defaults,{style:{tip:{corner:D,mimic:E,width:6,height:6,border:D,offset:0}}});var wb,xb,yb="qtip-modal",zb="."+yb;xb=function(){function a(a){if(d.expr[":"].focusable)return d.expr[":"].focusable;var b,c,e,f=!isNaN(d.attr(a,"tabindex")),g=a.nodeName&&a.nodeName.toLowerCase();return"area"===g?(b=a.parentNode,c=b.name,a.href&&c&&"map"===b.nodeName.toLowerCase()?(e=d("img[usemap=#"+c+"]")[0],!!e&&e.is(":visible")):!1):/input|select|textarea|button|object/.test(g)?!a.disabled:"a"===g?a.href||f:f}function c(a){k.length<1&&a.length?a.not("body").blur():k.first().focus()}function e(a){if(i.is(":visible")){var b,e=d(a.target),h=f.tooltip,j=e.closest(W);b=j.length<1?E:parseInt(j[0].style.zIndex,10)>parseInt(h[0].style.zIndex,10),b||e.closest(W)[0]===h[0]||c(e),g=a.target===k[k.length-1]}}var f,g,h,i,j=this,k={};d.extend(j,{init:function(){return i=j.elem=d("
",{id:"qtip-overlay",html:"
",mousedown:function(){return E}}).hide(),d(b.body).bind("focusin"+zb,e),d(b).bind("keydown"+zb,function(a){f&&f.options.show.modal.escape&&27===a.keyCode&&f.hide(a)}),i.bind("click"+zb,function(a){f&&f.options.show.modal.blur&&f.hide(a)}),j},update:function(b){f=b,k=b.options.show.modal.stealfocus!==E?b.tooltip.find("*").filter(function(){return a(this)}):[]},toggle:function(a,e,g){var k=(d(b.body),a.tooltip),l=a.options.show.modal,m=l.effect,n=e?"show":"hide",o=i.is(":visible"),p=d(zb).filter(":visible:not(:animated)").not(k);return j.update(a),e&&l.stealfocus!==E&&c(d(":focus")),i.toggleClass("blurs",l.blur),e&&i.appendTo(b.body),i.is(":animated")&&o===e&&h!==E||!e&&p.length?j:(i.stop(D,E),d.isFunction(m)?m.call(i,e):m===E?i[n]():i.fadeTo(parseInt(g,10)||90,e?1:0,function(){e||i.hide()}),e||i.queue(function(a){i.css({left:"",top:""}),d(zb).length||i.detach(),a()}),h=e,f.destroyed&&(f=F),j)}}),j.init()},xb=new xb,d.extend(w.prototype,{init:function(a){var b=a.tooltip;return this.options.on?(a.elements.overlay=xb.elem,b.addClass(yb).css("z-index",y.modal_zindex+d(zb).length),a._bind(b,["tooltipshow","tooltiphide"],function(a,c,e){var f=a.originalEvent;if(a.target===b[0])if(f&&"tooltiphide"===a.type&&/mouse(leave|enter)/.test(f.type)&&d(f.relatedTarget).closest(xb.elem[0]).length)try{a.preventDefault()}catch(g){}else(!f||f&&"tooltipsolo"!==f.type)&&this.toggle(a,"tooltipshow"===a.type,e)},this._ns,this),a._bind(b,"tooltipfocus",function(a,c){if(!a.isDefaultPrevented()&&a.target===b[0]){var e=d(zb),f=y.modal_zindex+e.length,g=parseInt(b[0].style.zIndex,10);xb.elem[0].style.zIndex=f-1,e.each(function(){this.style.zIndex>g&&(this.style.zIndex-=1)}),e.filter("."+$).qtip("blur",a.originalEvent),b.addClass($)[0].style.zIndex=f,xb.update(c);try{a.preventDefault()}catch(h){}}},this._ns,this),void a._bind(b,"tooltiphide",function(a){a.target===b[0]&&d(zb).filter(":visible").not(b).last().qtip("focus",a)},this._ns,this)):this},toggle:function(a,b,c){return a&&a.isDefaultPrevented()?this:void xb.toggle(this.qtip,!!b,c)},destroy:function(){this.qtip.tooltip.removeClass(yb),this.qtip._unbind(this.qtip.tooltip,this._ns),xb.toggle(this.qtip,E),delete this.qtip.elements.overlay}}),wb=R.modal=function(a){return new w(a,a.options.show.modal)},wb.sanitize=function(a){a.show&&("object"!=typeof a.show.modal?a.show.modal={on:!!a.show.modal}:"undefined"==typeof a.show.modal.on&&(a.show.modal.on=D))},y.modal_zindex=y.zindex-200,wb.initialize="render",B.modal={"^show.modal.(on|blur)$":function(){this.destroy(),this.init(),this.qtip.elems.overlay.toggle(this.qtip.tooltip[0].offsetWidth>0)}},d.extend(D,y.defaults,{show:{modal:{on:E,effect:D,blur:D,stealfocus:D,escape:D}}}),R.viewport=function(c,d,e,f,g,h,i){function j(a,b,c,e,f,g,h,i,j){var k=d[f],s=u[a],t=v[a],w=c===Q,x=s===f?j:s===g?-j:-j/2,y=t===f?i:t===g?-i:-i/2,z=q[f]+r[f]-(n?0:m[f]),A=z-k,B=k+j-(h===I?o:p)-z,C=x-(u.precedance===a||s===u[b]?y:0)-(t===O?i/2:0);return w?(C=(s===f?1:-1)*x,d[f]+=A>0?A:B>0?-B:0,d[f]=Math.max(-m[f]+r[f],k-C,Math.min(Math.max(-m[f]+r[f]+(h===I?o:p),k+C),d[f],"center"===s?k-x:1e9))):(e*=c===P?2:0,A>0&&(s!==f||B>0)?(d[f]-=C+e,l.invert(a,f)):B>0&&(s!==g||A>0)&&(d[f]-=(s===O?-C:C)+e,l.invert(a,g)),d[f]B&&(d[f]=k,l=u.clone())),d[f]-k}var k,l,m,n,o,p,q,r,s=e.target,t=c.elements.tooltip,u=e.my,v=e.at,w=e.adjust,x=w.method.split(" "),y=x[0],z=x[1]||x[0],A=e.viewport,B=e.container,C=(c.cache,{left:0,top:0});return A.jquery&&s[0]!==a&&s[0]!==b.body&&"none"!==w.method?(m=B.offset()||C,n="static"===B.css("position"),k="fixed"===t.css("position"),o=A[0]===a?A.width():A.outerWidth(E),p=A[0]===a?A.height():A.outerHeight(E),q={left:k?0:A.scrollLeft(),top:k?0:A.scrollTop()},r=A.offset()||C,("shift"!==y||"shift"!==z)&&(l=u.clone()),C={left:"none"!==y?j(G,H,y,w.x,L,N,I,f,h):0,top:"none"!==z?j(H,G,z,w.y,K,M,J,g,i):0,my:l}):C},R.polys={polygon:function(a,b){var c,d,e,f={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10},adjustable:E},g=0,h=[],i=1,j=1,k=0,l=0;for(g=a.length;g--;)c=[parseInt(a[--g],10),parseInt(a[g+1],10)],c[0]>f.position.right&&(f.position.right=c[0]),c[0]f.position.bottom&&(f.position.bottom=c[1]),c[1]0&&e>0&&i>0&&j>0;)for(d=Math.floor(d/2),e=Math.floor(e/2),b.x===L?i=d:b.x===N?i=f.width-d:i+=Math.floor(d/2),b.y===K?j=e:b.y===M?j=f.height-e:j+=Math.floor(e/2),g=h.length;g--&&!(h.length<2);)k=h[g][0]-f.position.left,l=h[g][1]-f.position.top,(b.x===L&&k>=i||b.x===N&&i>=k||b.x===O&&(i>k||k>f.width-i)||b.y===K&&l>=j||b.y===M&&j>=l||b.y===O&&(j>l||l>f.height-j))&&h.splice(g,1);f.position={left:h[0][0],top:h[0][1]}}return f},rect:function(a,b,c,d){return{width:Math.abs(c-a),height:Math.abs(d-b),position:{left:Math.min(a,c),top:Math.min(b,d)}}},_angles:{tc:1.5,tr:7/4,tl:5/4,bc:.5,br:.25,bl:.75,rc:2,lc:1,c:0},ellipse:function(a,b,c,d,e){var f=R.polys._angles[e.abbrev()],g=0===f?0:c*Math.cos(f*Math.PI),h=d*Math.sin(f*Math.PI);return{width:2*c-Math.abs(g),height:2*d-Math.abs(h),position:{left:a+g,top:b+h},adjustable:E}},circle:function(a,b,c,d){return R.polys.ellipse(a,b,c,c,d)}},R.svg=function(a,c,e){for(var f,g,h,i,j,k,l,m,n,o=(d(b),c[0]),p=d(o.ownerSVGElement),q=o.ownerDocument,r=(parseInt(c.css("stroke-width"),10)||0)/2;!o.getBBox;)o=o.parentNode;if(!o.getBBox||!o.parentNode)return E;switch(o.nodeName){case"ellipse":case"circle":m=R.polys.ellipse(o.cx.baseVal.value,o.cy.baseVal.value,(o.rx||o.r).baseVal.value+r,(o.ry||o.r).baseVal.value+r,e);break;case"line":case"polygon":case"polyline":for(l=o.points||[{x:o.x1.baseVal.value,y:o.y1.baseVal.value},{x:o.x2.baseVal.value,y:o.y2.baseVal.value}],m=[],k=-1,i=l.numberOfItems||l.length;++k';d.extend(x.prototype,{_scroll:function(){var b=this.qtip.elements.overlay;b&&(b[0].style.top=d(a).scrollTop()+"px")},init:function(c){var e=c.tooltip;d("select, object").length<1&&(this.bgiframe=c.elements.bgiframe=d(Bb).appendTo(e),c._bind(e,"tooltipmove",this.adjustBGIFrame,this._ns,this)),this.redrawContainer=d("
",{id:S+"-rcontainer"}).appendTo(b.body),c.elements.overlay&&c.elements.overlay.addClass("qtipmodal-ie6fix")&&(c._bind(a,["scroll","resize"],this._scroll,this._ns,this),c._bind(e,["tooltipshow"],this._scroll,this._ns,this)),this.redraw()},adjustBGIFrame:function(){var a,b,c=this.qtip.tooltip,d={height:c.outerHeight(E),width:c.outerWidth(E)},e=this.qtip.plugins.tip,f=this.qtip.elements.tip;b=parseInt(c.css("borderLeftWidth"),10)||0,b={left:-b,top:-b},e&&f&&(a="x"===e.corner.precedance?[I,L]:[J,K],b[a[1]]-=f[a[0]]()),this.bgiframe.css(b).css(d)},redraw:function(){if(this.qtip.rendered<1||this.drawing)return this;var a,b,c,d,e=this.qtip.tooltip,f=this.qtip.options.style,g=this.qtip.options.position.container;return this.qtip.drawing=1,f.height&&e.css(J,f.height),f.width?e.css(I,f.width):(e.css(I,"").appendTo(this.redrawContainer),b=e.width(),1>b%2&&(b+=1),c=e.css("maxWidth")||"",d=e.css("minWidth")||"",a=(c+d).indexOf("%")>-1?g.width()/100:0,c=(c.indexOf("%")>-1?a:1)*parseInt(c,10)||b,d=(d.indexOf("%")>-1?a:1)*parseInt(d,10)||0,b=c+d?Math.min(Math.max(b,d),c):b,e.css(I,Math.round(b)).appendTo(g)),this.drawing=0,this},destroy:function(){this.bgiframe&&this.bgiframe.remove(),this.qtip._unbind([a,this.qtip.tooltip],this._ns)}}),Ab=R.ie6=function(a){return 6===db.ie?new x(a):E},Ab.initialize="render",B.ie6={"^content|style$":function(){this.redraw()}}})}(window,document); +//# sourceMappingURL=jquery.qtip.min.js.map \ No newline at end of file diff --git a/gui/slick/js/lib/jquery.qtip-2012-04-26.min.js b/gui/slick/js/lib/jquery.qtip-2012-04-26.min.js deleted file mode 100644 index 0abe836c..00000000 --- a/gui/slick/js/lib/jquery.qtip-2012-04-26.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* -* qTip2 - Pretty powerful tooltips -* http://craigsworks.com/projects/qtip2/ -* -* Version: nightly -* Copyright 2009-2010 Craig Michael Thompson - http://craigsworks.com -* -* Dual licensed under MIT or GPLv2 licenses -* http://en.wikipedia.org/wiki/MIT_License -* http://en.wikipedia.org/wiki/GNU_General_Public_License -* -* Date: Thu Apr 26 12:17:04.0000000000 2012 -*//*jslint browser: true, onevar: true, undef: true, nomen: true, bitwise: true, regexp: true, newcap: true, immed: true, strict: true *//*global window: false, jQuery: false, console: false, define: false */(function(a){typeof define==="function"&&define.amd?define(["jquery"],a):a(jQuery)})(function(a){function C(d){var e=this,f=d.options.show.modal,h=d.elements,i=h.tooltip,j="#qtip-overlay",k=".qtipmodal",l=k+d.id,n="is-modal-qtip",p=a(document.body),q;d.checks.modal={"^show.modal.(on|blur)$":function(){e.init(),h.overlay.toggle(i.is(":visible"))}},a.extend(e,{init:function(){if(!f.on)return e;q=e.create(),i.attr(n,b).css("z-index",g.modal.zindex+a(m+"["+n+"]").length).unbind(k).unbind(l).bind("tooltipshow"+k+" tooltiphide"+k,function(b,c,d){var f=b.originalEvent;if(b.target===i[0])if(f&&b.type==="tooltiphide"&&/mouse(leave|enter)/.test(f.type)&&a(f.relatedTarget).closest(q[0]).length)try{b.preventDefault()}catch(g){}else(!f||f&&!f.solo)&&e[b.type.replace("tooltip","")](b,d)}).bind("tooltipfocus"+k,function(b){if(!b.isDefaultPrevented()&&b.target===i[0]){var c=a(m).filter("["+n+"]"),d=g.modal.zindex+c.length,e=parseInt(i[0].style.zIndex,10);q[0].style.zIndex=d-1,c.each(function(){this.style.zIndex>e&&(this.style.zIndex-=1)}),c.end().filter("."+o).qtip("blur",b.originalEvent),i.addClass(o)[0].style.zIndex=d;try{b.preventDefault()}catch(f){}}}).bind("tooltiphide"+k,function(b){b.target===i[0]&&a("["+n+"]").filter(":visible").not(i).last().qtip("focus",b)}),f.escape&&a(window).unbind(l).bind("keydown"+l,function(a){a.keyCode===27&&i.hasClass(o)&&d.hide(a)}),f.blur&&h.overlay.unbind(l).bind("click"+l,function(a){i.hasClass(o)&&d.hide(a)});return e},create:function(){function d(){q.css({height:a(window).height(),width:a(window).width()})}var b=a(j);if(b.length)return h.overlay=b.insertAfter(a(m).last());q=h.overlay=a("
",{id:j.substr(1),html:"
",mousedown:function(){return c}}).insertAfter(a(m).last()),a(window).unbind(k).bind("resize"+k,d),d();return q},toggle:function(d,g,h){if(d&&d.isDefaultPrevented())return e;var j=f.effect,k=g?"show":"hide",o=q.is(":visible"),r=a("["+n+"]").filter(":visible").not(i),s;q||(q=e.create());if(q.is(":animated")&&o===g||!g&&r.length)return e;g?(q.css({left:0,top:0}),q.toggleClass("blurs",f.blur),p.bind("focusin"+l,function(b){var d=a(b.target),e=d.closest(".qtip"),f=e.length<1?c:parseInt(e[0].style.zIndex,10)>parseInt(i[0].style.zIndex,10);!f&&a(b.target).closest(m)[0]!==i[0]&&i.find("input:visible").filter(":first").focus()})):p.undelegate("*","focusin"+l),q.stop(b,c),a.isFunction(j)?j.call(q,g):j===c?q[k]():q.fadeTo(parseInt(h,10)||90,g?1:0,function(){g||a(this).hide()}),g||q.queue(function(a){q.css({left:"",top:""}),a()});return e},show:function(a,c){return e.toggle(a,b,c)},hide:function(a,b){return e.toggle(a,c,b)},destroy:function(){var b=q;b&&(b=a("["+n+"]").not(i).length<1,b?(h.overlay.remove(),a(window).unbind(k)):h.overlay.unbind(k+d.id),p.undelegate("*","focusin"+l));return i.removeAttr(n).unbind(k)}}),e.init()}function B(f,h){function y(a){var b=a.precedance==="y",c=n[b?"width":"height"],d=n[b?"height":"width"],e=a.string().indexOf("center")>-1,f=c*(e?.5:1),g=Math.pow,h=Math.round,i,j,k,l=Math.sqrt(g(f,2)+g(d,2)),m=[p/f*l,p/d*l];m[2]=Math.sqrt(g(m[0],2)-g(p,2)),m[3]=Math.sqrt(g(m[1],2)-g(p,2)),i=l+m[2]+m[3]+(e?0:m[0]),j=i/l,k=[h(j*d),h(j*c)];return{height:k[b?0:1],width:k[b?1:0]}}function x(b){var c=k.titlebar&&b.y==="top",d=c?k.titlebar:k.content,e=a.browser.mozilla,f=e?"-moz-":a.browser.webkit?"-webkit-":"",g=b.y+(e?"":"-")+b.x,h=f+(e?"border-radius-"+g:"border-"+g+"-radius");return parseInt(d.css(h),10)||parseInt(l.css(h),10)||0}function w(a,b,c){b=b?b:a[a.precedance];var d=l.hasClass(q),e=k.titlebar&&a.y==="top",f=e?k.titlebar:k.content,g="border-"+b+"-width",h;l.addClass(q),h=parseInt(f.css(g),10),h=(c?h||parseInt(l.css(g),10):h)||0,l.toggleClass(q,d);return h}function v(a,d,g,h){if(k.tip){var l=i.corner.clone(),n=g.adjusted,o=f.options.position.adjust.method.split(" "),p=o[0],q=o[1]||o[0],r={left:c,top:c,x:0,y:0},s,t={},u;i.corner.fixed!==b&&(p==="shift"&&l.precedance==="x"&&n.left&&l.y!=="center"?l.precedance=l.precedance==="x"?"y":"x":p!=="shift"&&n.left&&(l.x=l.x==="center"?n.left>0?"left":"right":l.x==="left"?"right":"left"),q==="shift"&&l.precedance==="y"&&n.top&&l.x!=="center"?l.precedance=l.precedance==="y"?"x":"y":q!=="shift"&&n.top&&(l.y=l.y==="center"?n.top>0?"top":"bottom":l.y==="top"?"bottom":"top"),l.string()!==m.corner.string()&&(m.top!==n.top||m.left!==n.left)&&i.update(l,c)),s=i.position(l,n),s.right!==e&&(s.left=-s.right),s.bottom!==e&&(s.top=-s.bottom),s.user=Math.max(0,j.offset);if(r.left=p==="shift"&&!!n.left)l.x==="center"?t["margin-left"]=r.x=s["margin-left"]-n.left:(u=s.right!==e?[n.left,-s.left]:[-n.left,s.left],(r.x=Math.max(u[0],u[1]))>u[0]&&(g.left-=n.left,r.left=c),t[s.right!==e?"right":"left"]=r.x);if(r.top=q==="shift"&&!!n.top)l.y==="center"?t["margin-top"]=r.y=s["margin-top"]-n.top:(u=s.bottom!==e?[n.top,-s.top]:[-n.top,s.top],(r.y=Math.max(u[0],u[1]))>u[0]&&(g.top-=n.top,r.top=c),t[s.bottom!==e?"bottom":"top"]=r.y);k.tip.css(t).toggle(!(r.x&&r.y||l.x==="center"&&r.y||l.y==="center"&&r.x)),g.left-=s.left.charAt?s.user:p!=="shift"||r.top||!r.left&&!r.top?s.left:0,g.top-=s.top.charAt?s.user:q!=="shift"||r.left||!r.left&&!r.top?s.top:0,m.left=n.left,m.top=n.top,m.corner=l.clone()}}function u(){n.width=j.width,n.height=j.height}function t(){var a=n.width;n.width=n.height,n.height=a}var i=this,j=f.options.style.tip,k=f.elements,l=k.tooltip,m={top:0,left:0},n={width:j.width,height:j.height},o={},p=j.border||0,r=".qtip-tip",s=!!(a("")[0]||{}).getContext;i.mimic=i.corner=d,i.border=p,i.offset=j.offset,i.size=n,f.checks.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){i.init()||i.destroy(),f.reposition()},"^style.tip.(height|width)$":function(){n={width:j.width,height:j.height},i.create(),i.update(),f.reposition()},"^content.title.text|style.(classes|widget)$":function(){k.tip&&k.tip.length&&i.update()}},a.extend(i,{init:function(){var b=i.detectCorner()&&(s||a.browser.msie);b&&(i.create(),i.update(),l.unbind(r).bind("tooltipmove"+r,v));return b},detectCorner:function(){var a=j.corner,d=f.options.position,e=d.at,h=d.my.string?d.my.string():d.my;if(a===c||h===c&&e===c)return c;a===b?i.corner=new g.Corner(h):a.string||(i.corner=new g.Corner(a),i.corner.fixed=b),m.corner=new g.Corner(i.corner.string());return i.corner.string()!=="centercenter"},detectColours:function(b){var c,d,e,g=k.tip.css("cssText",""),h=b||i.corner,m=h[h.precedance],p="border-"+m+"-color",r="border"+m.charAt(0)+m.substr(1)+"Color",s=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,t="background-color",u="transparent",v=" !important",w=a(document.body).css("color"),x=f.elements.content.css("color"),y=k.titlebar&&(h.y==="top"||h.y==="center"&&g.position().top+n.height/2+j.offset",{"class":"ui-tooltip-tip"}).css({width:b,height:c}).prependTo(l),s?a("").appendTo(k.tip)[0].getContext("2d").save():(d='',k.tip.html(d+d),a("*",k.tip).bind("click mousedown",function(a){a.stopPropagation()}))},update:function(e,f){var h=k.tip,l=h.children(),q=n.width,r=n.height,v="px solid ",x="px dashed transparent",z=j.mimic,B=Math.round,C,D,E,F,G;e||(e=m.corner||i.corner),z===c?z=e:(z=new g.Corner(z),z.precedance=e.precedance,z.x==="inherit"?z.x=e.x:z.y==="inherit"?z.y=e.y:z.x===z.y&&(z[e.precedance]=e[e.precedance])),C=z.precedance,e.precedance==="x"?t():u(),k.tip.css({width:q=n.width,height:r=n.height}),i.detectColours(e),o.border!=="transparent"&&o.border!=="#123456"?(p=w(e,d,b),j.border===0&&p>0&&(o.fill=o.border),i.border=p=j.border!==b?j.border:p):i.border=p=0,E=A(z,q,r),i.size=G=y(e),h.css(G),e.precedance==="y"?F=[B(z.x==="left"?p:z.x==="right"?G.width-q-p:(G.width-q)/2),B(z.y==="top"?G.height-r:0)]:F=[B(z.x==="left"?G.width-q:0),B(z.y==="top"?p:z.y==="bottom"?G.height-r-p:(G.height-r)/2)],s?(l.attr(G),D=l[0].getContext("2d"),D.restore(),D.save(),D.clearRect(0,0,3e3,3e3),D.translate(F[0],F[1]),D.beginPath(),D.moveTo(E[0][0],E[0][1]),D.lineTo(E[1][0],E[1][1]),D.lineTo(E[2][0],E[2][1]),D.closePath(),D.fillStyle=o.fill,D.strokeStyle=o.border,D.lineWidth=p*2,D.lineJoin="miter",D.miterLimit=100,p&&D.stroke(),D.fill()):(E="m"+E[0][0]+","+E[0][1]+" l"+E[1][0]+","+E[1][1]+" "+E[2][0]+","+E[2][1]+" xe",F[2]=p&&/^(r|b)/i.test(e.string())?parseFloat(a.browser.version,10)===8?2:1:0,l.css({antialias:""+(z.string().indexOf("center")>-1),left:F[0]-F[2]*Number(C==="x"),top:F[1]-F[2]*Number(C==="y"),width:q+p,height:r+p}).each(function(b){var c=a(this);c[c.prop?"prop":"attr"]({coordsize:q+p+" "+(r+p),path:E,fillcolor:o.fill,filled:!!b,stroked:!b}).css({display:p||b?"block":"none"}),!b&&c.html()===""&&c.html('')})),f!==c&&i.position(e)},position:function(d){var e=k.tip,f={},g=Math.max(0,j.offset),h,l,m;if(j.corner===c||!e)return c;d=d||i.corner,h=d.precedance,l=y(d),m=[d.x,d.y],h==="x"&&m.reverse(),a.each(m,function(a,c){var e,i;c==="center"?(e=h==="y"?"left":"top",f[e]="50%",f["margin-"+e]=-Math.round(l[h==="y"?"width":"height"]/2)+g):(e=w(d,c,b),i=x(d),f[c]=a?p?w(d,c):0:g+(i>e?i:0))}),f[d[h]]-=l[h==="x"?"width":"height"],e.css({top:"",bottom:"",left:"",right:"",margin:""}).css(f);return f},destroy:function(){k.tip&&k.tip.remove(),k.tip=!1,l.unbind(r)}}),i.init()}function A(a,b,c){var d=Math.ceil(b/2),e=Math.ceil(c/2),f={bottomright:[[0,0],[b,c],[b,0]],bottomleft:[[0,0],[b,0],[0,c]],topright:[[0,c],[b,0],[b,c]],topleft:[[0,0],[0,c],[b,c]],topcenter:[[0,c],[d,0],[b,c]],bottomcenter:[[0,0],[b,0],[d,c]],rightcenter:[[0,0],[b,e],[0,c]],leftcenter:[[b,0],[b,c],[0,e]]};f.lefttop=f.bottomright,f.righttop=f.bottomleft,f.leftbottom=f.topright,f.rightbottom=f.topleft;return f[a.string()]}function z(d){var e=this,g=d.elements.tooltip,h=d.options.content.ajax,i=f.defaults.content.ajax,j=".qtip-ajax",k=/)<[^<]*)*<\/script>/gi,l=b,m=c,n;d.checks.ajax={"^content.ajax":function(a,b,c){b==="ajax"&&(h=c),b==="once"?e.init():h&&h.url?e.load():g.unbind(j)}},a.extend(e,{init:function(){h&&h.url&&g.unbind(j)[h.once?"one":"bind"]("tooltipshow"+j,e.load);return e},load:function(f){function t(a,b,c){!d.destroyed&&a.status!==0&&d.set("content.text",b+": "+c)}function s(b,c,e){var f;d.destroyed||(o&&(b=a("
").append(b.replace(k,"")).find(o)),(f=i.success||h.success)&&a.isFunction(f)?f.call(h.context||d,b,c,e):d.set("content.text",b))}function r(){var e;d.destroyed||(l=c,p&&(m=b,d.show(f.originalEvent)),(e=i.complete||h.complete)&&a.isFunction(e)&&e.apply(h.context||d,arguments))}if(m)m=c;else{var g=h.url.indexOf(" "),j=h.url,o,p=!h.loading&&l;if(p)try{f.preventDefault()}catch(q){}else if(f&&f.isDefaultPrevented())return e;n&&n.abort&&n.abort(),g>-1&&(o=j.substr(g),j=j.substr(0,g)),n=a.ajax(a.extend({error:i.error||t,context:d},h,{url:j,success:s,complete:r}))}},destroy:function(){n&&n.abort&&n.abort(),d.destroyed=b}}),e.init()}function y(e,h){var i,j,k,l,m,n=a(this),o=a(document.body),p=this===document?o:n,q=n.metadata?n.metadata(h.metadata):d,r=h.metadata.type==="html5"&&q?q[h.metadata.name]:d,s=n.data(h.metadata.name||"qtipopts");try{s=typeof s==="string"?(new Function("return "+s))():s}catch(u){v("Unable to parse HTML5 attribute data: "+s)}l=a.extend(b,{},f.defaults,h,typeof s==="object"?w(s):d,w(r||q)),j=l.position,l.id=e;if("boolean"===typeof l.content.text){k=n.attr(l.content.attr);if(l.content.attr!==c&&k)l.content.text=k;else{v("Unable to locate content for tooltip! Aborting render of tooltip on element: ",n);return c}}j.container.length||(j.container=o),j.target===c&&(j.target=p),l.show.target===c&&(l.show.target=p),l.show.solo===b&&(l.show.solo=j.container.closest("body")),l.hide.target===c&&(l.hide.target=p),l.position.viewport===b&&(l.position.viewport=j.container),j.container=j.container.eq(0),j.at=new g.Corner(j.at),j.my=new g.Corner(j.my);if(a.data(this,"qtip"))if(l.overwrite)n.qtip("destroy");else if(l.overwrite===c)return c;l.suppress&&(m=a.attr(this,"title"))&&a(this).removeAttr("title").attr(t,m),i=new x(n,l,e,!!k),a.data(this,"qtip",i),n.bind("remove.qtip-"+e+" removeqtip.qtip-"+e,function(){i.destroy()});return i}function x(r,s,v,x){function Q(){var b=[s.show.target[0],s.hide.target[0],y.rendered&&F.tooltip[0],s.position.container[0],s.position.viewport[0],window,document];y.rendered?a([]).pushStack(a.grep(b,function(a){return typeof a==="object"})).unbind(E):s.show.target.unbind(E+"-create")}function P(){function o(a){y.rendered&&D[0].offsetWidth>0&&y.reposition(a)}function n(a){if(D.hasClass(l))return c;clearTimeout(y.timers.inactive),y.timers.inactive=setTimeout(function(){y.hide(a)},s.hide.inactive)}function k(b){if(D.hasClass(l)||B||C)return c;var f=a(b.relatedTarget||b.target),g=f.closest(m)[0]===D[0],h=f[0]===e.show[0];clearTimeout(y.timers.show),clearTimeout(y.timers.hide);if(d.target==="mouse"&&g||s.hide.fixed&&(/mouse(out|leave|move)/.test(b.type)&&(g||h)))try{b.preventDefault(),b.stopImmediatePropagation()}catch(i){}else s.hide.delay>0?y.timers.hide=setTimeout(function(){y.hide(b)},s.hide.delay):y.hide(b)}function j(a){if(D.hasClass(l))return c;clearTimeout(y.timers.show),clearTimeout(y.timers.hide);var d=function(){y.toggle(b,a)};s.show.delay>0?y.timers.show=setTimeout(d,s.show.delay):d()}var d=s.position,e={show:s.show.target,hide:s.hide.target,viewport:a(d.viewport),document:a(document),body:a(document.body),window:a(window)},g={show:a.trim(""+s.show.event).split(" "),hide:a.trim(""+s.hide.event).split(" ")},i=a.browser.msie&&parseInt(a.browser.version,10)===6;D.bind("mouseenter"+E+" mouseleave"+E,function(a){var b=a.type==="mouseenter";b&&y.focus(a),D.toggleClass(p,b)}),s.hide.fixed&&(e.hide=e.hide.add(D),D.bind("mouseover"+E,function(){D.hasClass(l)||clearTimeout(y.timers.hide)})),/mouse(out|leave)/i.test(s.hide.event)?s.hide.leave==="window"&&e.window.bind("mouseout"+E+" blur"+E,function(a){/select|option/.test(a.target)&&!a.relatedTarget&&y.hide(a)}):/mouse(over|enter)/i.test(s.show.event)&&e.hide.bind("mouseleave"+E,function(a){clearTimeout(y.timers.show)}),(""+s.hide.event).indexOf("unfocus")>-1&&d.container.closest("html").bind("mousedown"+E,function(b){var c=a(b.target),d=y.rendered&&!D.hasClass(l)&&D[0].offsetWidth>0,e=c.parents(m).filter(D[0]).length>0;c[0]!==r[0]&&c[0]!==D[0]&&!e&&!r.has(c[0]).length&&!c.attr("disabled")&&y.hide(b)}),"number"===typeof s.hide.inactive&&(e.show.bind("qtip-"+v+"-inactive",n),a.each(f.inactiveEvents,function(a,b){e.hide.add(F.tooltip).bind(b+E+"-inactive",n)})),a.each(g.hide,function(b,c){var d=a.inArray(c,g.show),f=a(e.hide);d>-1&&f.add(e.show).length===f.length||c==="unfocus"?(e.show.bind(c+E,function(a){D[0].offsetWidth>0?k(a):j(a)}),delete g.show[d]):e.hide.bind(c+E,k)}),a.each(g.show,function(a,b){e.show.bind(b+E,j)}),"number"===typeof s.hide.distance&&e.show.add(D).bind("mousemove"+E,function(a){var b=G.origin||{},c=s.hide.distance,d=Math.abs;(d(a.pageX-b.pageX)>=c||d(a.pageY-b.pageY)>=c)&&y.hide(a)}),d.target==="mouse"&&(e.show.bind("mousemove"+E,function(a){h={pageX:a.pageX,pageY:a.pageY,type:"mousemove"}}),d.adjust.mouse&&(s.hide.event&&(D.bind("mouseleave"+E,function(a){(a.relatedTarget||a.target)!==e.show[0]&&y.hide(a)}),F.target.bind("mouseenter"+E+" mouseleave"+E,function(a){G.onTarget=a.type==="mouseenter"})),e.document.bind("mousemove"+E,function(a){y.rendered&&G.onTarget&&!D.hasClass(l)&&D[0].offsetWidth>0&&y.reposition(a||h)}))),(d.adjust.resize||e.viewport.length)&&(a.event.special.resize?e.viewport:e.window).bind("resize"+E,o),(e.viewport.length||i&&D.css("position")==="fixed")&&e.viewport.bind("scroll"+E,o)}function O(b,d){function g(b){function i(e){e&&(delete h[e.src],clearTimeout(y.timers.img[e.src]),a(e).unbind(E)),a.isEmptyObject(h)&&(y.redraw(),d!==c&&y.reposition(G.event),b())}var g,h={};if((g=f.find("img[src]:not([height]):not([width])")).length===0)return i();g.each(function(b,c){if(h[c.src]===e){var d=0,f=3;(function g(){if(c.height||c.width||d>f)return i(c);d+=1,y.timers.img[c.src]=setTimeout(g,700)})(),a(c).bind("error"+E+" load"+E,function(){i(this)}),h[c.src]=c}})}var f=F.content;if(!y.rendered||!b)return c;a.isFunction(b)&&(b=b.call(r,G.event,y)||""),b.jquery&&b.length>0?f.empty().append(b.css({display:"block"})):f.html(b),y.rendered<0?D.queue("fx",g):(C=0,g(a.noop));return y}function N(b,d){var e=F.title;if(!y.rendered||!b)return c;a.isFunction(b)&&(b=b.call(r,G.event,y));if(b===c||!b&&b!=="")return J(c);b.jquery&&b.length>0?e.empty().append(b.css({display:"block"})):e.html(b),y.redraw(),d!==c&&y.rendered&&D[0].offsetWidth>0&&y.reposition(G.event)}function M(a){var b=F.button,d=F.title;if(!y.rendered)return c;a?(d||L(),K()):b.remove()}function L(){var c=A+"-title";F.titlebar&&J(),F.titlebar=a("
",{"class":j+"-titlebar "+(s.style.widget?"ui-widget-header":"")}).append(F.title=a("
",{id:c,"class":j+"-title","aria-atomic":b})).insertBefore(F.content).delegate(".ui-tooltip-close","mousedown keydown mouseup keyup mouseout",function(b){a(this).toggleClass("ui-state-active ui-state-focus",b.type.substr(-4)==="down")}).delegate(".ui-tooltip-close","mouseover mouseout",function(b){a(this).toggleClass("ui-state-hover",b.type==="mouseover")}),s.content.title.button?K():y.rendered&&y.redraw()}function K(){var b=s.content.title.button,d=typeof b==="string",e=d?b:"Close tooltip";F.button&&F.button.remove(),b.jquery?F.button=b:F.button=a("",{"class":"ui-state-default ui-tooltip-close "+(s.style.widget?"":j+"-icon"),title:e,"aria-label":e}).prepend(a("",{"class":"ui-icon ui-icon-close",html:"×"})),F.button.appendTo(F.titlebar).attr("role","button").click(function(a){D.hasClass(l)||y.hide(a);return c}),y.redraw()}function J(a){F.title&&(F.titlebar.remove(),F.titlebar=F.title=F.button=d,a!==c&&y.reposition())}function I(){var a=s.style.widget;D.toggleClass(k,a).toggleClass(n,s.style.def&&!a),F.content.toggleClass(k+"-content",a),F.titlebar&&F.titlebar.toggleClass(k+"-header",a),F.button&&F.button.toggleClass(j+"-icon",!a)}function H(a){var b=0,c,d=s,e=a.split(".");while(d=d[e[b++]])b0&&!a("#"+i).length&&(D[0].id=i,F.content[0].id=i+"-content",F.title[0].id=i+"-title")},"^content.text$":function(a,b,c){O(c)},"^content.title.text$":function(a,b,c){if(!c)return J();!F.title&&c&&L(),N(c)},"^content.title.button$":function(a,b,c){M(c)},"^position.(my|at)$":function(a,b,c){"string"===typeof c&&(a[b]=new g.Corner(c))},"^position.container$":function(a,b,c){y.rendered&&D.appendTo(c)},"^show.ready$":function(){y.rendered?y.toggle(b):y.render(1)},"^style.classes$":function(a,b,c){D.attr("class",j+" qtip ui-helper-reset "+c)},"^style.widget|content.title":I,"^events.(render|show|move|hide|focus|blur)$":function(b,c,d){D[(a.isFunction(d)?"":"un")+"bind"]("tooltip"+c,d)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var a=s.position;D.attr("tracking",a.target==="mouse"&&a.adjust.mouse),Q(),P()}},a.extend(y,{render:function(d){if(y.rendered)return y;var e=s.content.text,f=s.content.title.text,h=s.position,i=a.Event("tooltiprender");a.attr(r[0],"aria-describedby",A),D=F.tooltip=a("
",{id:A,"class":j+" qtip ui-helper-reset "+n+" "+s.style.classes+" "+j+"-pos-"+s.position.my.abbrev(),width:s.style.width||"",height:s.style.height||"",tracking:h.target==="mouse"&&h.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":c,"aria-describedby":A+"-content","aria-hidden":b}).toggleClass(l,G.disabled).data("qtip",y).appendTo(s.position.container).append(F.content=a("
",{"class":j+"-content",id:A+"-content","aria-atomic":b})),y.rendered=-1,B=C=1,f&&(L(),a.isFunction(f)||N(f,c)),a.isFunction(e)||O(e,c),y.rendered=b,I(),a.each(s.events,function(b,c){a.isFunction(c)&&D.bind(b==="toggle"?"tooltipshow tooltiphide":"tooltip"+b,c)}),a.each(g,function(){this.initialize==="render"&&this(y)}),P(),D.queue("fx",function(a){i.originalEvent=G.event,D.trigger(i,[y]),B=C=0,y.redraw(),(s.show.ready||d)&&y.toggle(b,G.event,c),a()});return y},get:function(a){var b,c;switch(a.toLowerCase()){case"dimensions":b={height:D.outerHeight(),width:D.outerWidth()};break;case"offset":b=g.offset(D,s.position.container);break;default:c=H(a.toLowerCase()),b=c[0][c[1]],b=b.precedance?b.string():b}return b},set:function(e,f){function m(a,b){var c,d,e;for(c in k)for(d in k[c])if(e=(new RegExp(d,"i")).exec(a))b.push(e),k[c][d].apply(y,b)}var g=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,h=/^content\.(title|attr)|style/i,i=c,j=c,k=y.checks,l;"string"===typeof e?(l=e,e={},e[l]=f):e=a.extend(b,{},e),a.each(e,function(b,c){var d=H(b.toLowerCase()),f;f=d[0][d[1]],d[0][d[1]]="object"===typeof c&&c.nodeType?a(c):c,e[b]=[d[0],d[1],c,f],i=g.test(b)||i,j=h.test(b)||j}),w(s),B=C=1,a.each(e,m),B=C=0,y.rendered&&D[0].offsetWidth>0&&(i&&y.reposition(s.position.target==="mouse"?d:G.event),j&&y.redraw());return y},toggle:function(e,f){function t(){e?(a.browser.msie&&D[0].style.removeAttribute("filter"),D.css("overflow",""),"string"===typeof i.autofocus&&a(i.autofocus,D).focus(),i.target.trigger("qtip-"+v+"-inactive")):D.css({display:"",visibility:"",opacity:"",left:"",top:""}),r=a.Event("tooltip"+(e?"visible":"hidden")),r.originalEvent=f?G.event:d,D.trigger(r,[y])}if(!y.rendered)return e?y.render(1):y;var g=e?"show":"hide",i=s[g],j=s[e?"hide":"show"],k=s.position,l=s.content,n=D[0].offsetWidth>0,o=e||i.target.length===1,p=!f||i.target.length<2||G.target[0]===f.target,q,r;(typeof e).search("boolean|number")&&(e=!n);if(!D.is(":animated")&&n===e&&p)return y;if(f){if(/over|enter/.test(f.type)&&/out|leave/.test(G.event.type)&&s.show.target.add(f.target).length===s.show.target.length&&D.has(f.relatedTarget).length)return y;G.event=a.extend({},f)}r=a.Event("tooltip"+g),r.originalEvent=f?G.event:d,D.trigger(r,[y,90]);if(r.isDefaultPrevented())return y;a.attr(D[0],"aria-hidden",!e),e?(G.origin=a.extend({},h),y.focus(f),a.isFunction(l.text)&&O(l.text,c),a.isFunction(l.title.text)&&N(l.title.text,c),!u&&k.target==="mouse"&&k.adjust.mouse&&(a(document).bind("mousemove.qtip",function(a){h={pageX:a.pageX,pageY:a.pageY,type:"mousemove"}}),u=b),y.reposition(f,arguments[2]),(r.solo=!!i.solo)&&a(m,i.solo).not(D).qtip("hide",r)):(clearTimeout(y.timers.show),delete G.origin,u&&!a(m+'[tracking="true"]:visible',i.solo).not(D).length&&(a(document).unbind("mousemove.qtip"),u=c),y.blur(f)),i.effect===c||o===c?(D[g](),t.call(D)):a.isFunction(i.effect)?(D.stop(1,1),i.effect.call(D,y),D.queue("fx",function(a){t(),a()})):D.fadeTo(90,e?1:0,t),e&&i.target.trigger("qtip-"+v+"-inactive");return y},show:function(a){return y.toggle(b,a)},hide:function(a){return y.toggle(c,a)},focus:function(b){if(!y.rendered)return y;var c=a(m),d=parseInt(D[0].style.zIndex,10),e=f.zindex+c.length,g=a.extend({},b),h,i;D.hasClass(o)||(i=a.Event("tooltipfocus"),i.originalEvent=g,D.trigger(i,[y,e]),i.isDefaultPrevented()||(d!==e&&(c.each(function(){this.style.zIndex>d&&(this.style.zIndex=this.style.zIndex-1)}),c.filter("."+o).qtip("blur",g)),D.addClass(o)[0].style.zIndex=e));return y},blur:function(b){var c=a.extend({},b),d;D.removeClass(o),d=a.Event("tooltipblur"),d.originalEvent=c,D.trigger(d,[y]);return y},reposition:function(b,d){if(!y.rendered||B)return y;B=1;var e=s.position.target,f=s.position,i=f.my,k=f.at,l=f.adjust,m=l.method.split(" "),n=D.outerWidth(),o=D.outerHeight(),p=0,q=0,r=a.Event("tooltipmove"),t=D.css("position")==="fixed",u=f.viewport,v={left:0,top:0},w=f.container,x=c,A=y.plugins.tip,C=D[0].offsetWidth>0,E={horizontal:m[0],vertical:m[1]=m[1]||m[0],enabled:u.jquery&&e[0]!==window&&e[0]!==z&&l.method!=="none",left:function(a){var b=E.horizontal==="shift",c=l.x*(E.horizontal.substr(-6)==="invert"?2:0),d=-w.offset.left+u.offset.left+u.scrollLeft,e=i.x==="left"?n:i.x==="right"?-n:-n/2,f=k.x==="left"?p:k.x==="right"?-p:-p/2,g=A&&A.size?A.size.width||0:0,h=A&&A.corner&&A.corner.precedance==="x"&&!b?g:0,j=d-a+h,m=a+n-u.width-d+h,o=e-(i.precedance==="x"||i.x===i.y?f:0)-(k.x==="center"?p/2:0),q=i.x==="center";b?(h=A&&A.corner&&A.corner.precedance==="y"?g:0,o=(i.x==="left"?1:-1)*e-h,v.left+=j>0?j:m>0?-m:0,v.left=Math.max(-w.offset.left+u.offset.left+(h&&A.corner.x==="center"?A.offset:0),a-o,Math.min(Math.max(-w.offset.left+u.offset.left+u.width,a+o),v.left))):(j>0&&(i.x!=="left"||m>0)?v.left-=o+c:m>0&&(i.x!=="right"||j>0)&&(v.left-=(q?-o:o)+c),v.leftm&&(v.left=a));return v.left-a},top:function(a){var b=E.vertical==="shift",c=l.y*(E.vertical.substr(-6)==="invert"?2:0),d=-w.offset.top+u.offset.top+u.scrollTop,e=i.y==="top"?o:i.y==="bottom"?-o:-o/2,f=k.y==="top"?q:k.y==="bottom"?-q:-q/2,g=A&&A.size?A.size.height||0:0,h=A&&A.corner&&A.corner.precedance==="y"&&!b?g:0,j=d-a+h,m=a+o-u.height-d+h,n=e-(i.precedance==="y"||i.x===i.y?f:0)-(k.y==="center"?q/2:0),p=i.y==="center";b?(h=A&&A.corner&&A.corner.precedance==="x"?g:0,n=(i.y==="top"?1:-1)*e-h,v.top+=j>0?j:m>0?-m:0,v.top=Math.max(-w.offset.top+u.offset.top+(h&&A.corner.x==="center"?A.offset:0),a-n,Math.min(Math.max(-w.offset.top+u.offset.top+u.height,a+n),v.top))):(j>0&&(i.y!=="top"||m>0)?v.top-=n+c:m>0&&(i.y!=="bottom"||j>0)&&(v.top-=(p?-n:n)+c),v.top<0&&-v.top>m&&(v.top=a));return v.top-a}},H;if(a.isArray(e)&&e.length===2)k={x:"left",y:"top"},v={left:e[0],top:e[1]};else if(e==="mouse"&&(b&&b.pageX||G.event.pageX))k={x:"left",y:"top"},b=(b&&(b.type==="resize"||b.type==="scroll")?G.event:b&&b.pageX&&b.type==="mousemove"?b:h&&h.pageX&&(l.mouse||!b||!b.pageX)?{pageX:h.pageX,pageY:h.pageY}:!l.mouse&&G.origin&&G.origin.pageX&&s.show.distance?G.origin:b)||b||G.event||h||{},v={top:b.pageY,left:b.pageX};else{e==="event"?b&&b.target&&b.type!=="scroll"&&b.type!=="resize"?e=G.target=a(b.target):e=G.target:e=G.target=a(e.jquery?e:F.target),e=a(e).eq(0);if(e.length===0)return y;e[0]===document||e[0]===window?(p=g.iOS?window.innerWidth:e.width(),q=g.iOS?window.innerHeight:e.height(),e[0]===window&&(v={top:(u||e).scrollTop(),left:(u||e).scrollLeft()})):e.is("area")&&g.imagemap?v=g.imagemap(e,k,E.enabled?m:c):e[0].namespaceURI==="http://www.w3.org/2000/svg"&&g.svg?v=g.svg(e,k):(p=e.outerWidth(),q=e.outerHeight(),v=g.offset(e,w)),v.offset&&(p=v.width,q=v.height,x=v.flipoffset,v=v.offset);if(g.iOS<4.1&&g.iOS>3.1||g.iOS==4.3||!g.iOS&&t)H=a(window),v.left-=H.scrollLeft(),v.top-=H.scrollTop();v.left+=k.x==="right"?p:k.x==="center"?p/2:0,v.top+=k.y==="bottom"?q:k.y==="center"?q/2:0}v.left+=l.x+(i.x==="right"?-n:i.x==="center"?-n/2:0),v.top+=l.y+(i.y==="bottom"?-o:i.y==="center"?-o/2:0),E.enabled?(u={elem:u,height:u[(u[0]===window?"h":"outerH")+"eight"](),width:u[(u[0]===window?"w":"outerW")+"idth"](),scrollLeft:t?0:u.scrollLeft(),scrollTop:t?0:u.scrollTop(),offset:u.offset()||{left:0,top:0}},w={elem:w,scrollLeft:w.scrollLeft(),scrollTop:w.scrollTop(),offset:w.offset()||{left:0,top:0}},v.adjusted={left:E.horizontal!=="none"?E.left(v.left):0,top:E.vertical!=="none"?E.top(v.top):0},v.adjusted.left+v.adjusted.top&&D.attr("class",D[0].className.replace(/ui-tooltip-pos-\w+/i,j+"-pos-"+i.abbrev())),x&&v.adjusted.left&&(v.left+=x.left),x&&v.adjusted.top&&(v.top+=x.top)):v.adjusted={left:0,top:0},r.originalEvent=a.extend({},b),D.trigger(r,[y,v,u.elem||u]);if(r.isDefaultPrevented())return y;delete v.adjusted,d===c||!C||isNaN(v.left)||isNaN(v.top)||e==="mouse"||!a.isFunction(f.effect)?D.css(v):a.isFunction(f.effect)&&(f.effect.call(D,y,a.extend({},v)),D.queue(function(b){a(this).css({opacity:"",height:""}),a.browser.msie&&this.style.removeAttribute("filter"),b()})),B=0;return y},redraw:function(){if(y.rendered<1||C)return y;var a=s.position.container,b,c,d,e;C=1,s.style.height&&D.css("height",s.style.height),s.style.width?D.css("width",s.style.width):(D.css("width","").addClass(q),c=D.width()+1,d=D.css("max-width")||"",e=D.css("min-width")||"",b=(d+e).indexOf("%")>-1?a.width()/100:0,d=(d.indexOf("%")>-1?b:1)*parseInt(d,10)||c,e=(e.indexOf("%")>-1?b:1)*parseInt(e,10)||0,c=d+e?Math.min(Math.max(c,e),d):c,D.css("width",Math.round(c)).removeClass(q)),C=0;return y},disable:function(b){"boolean"!==typeof b&&(b=!D.hasClass(l)&&!G.disabled),y.rendered?(D.toggleClass(l,b),a.attr(D[0],"aria-disabled",b)):G.disabled=!!b;return y},enable:function(){return y.disable(c)},destroy:function(){var c=r[0],d=a.attr(c,t),e=r.data("qtip");y.destroyed=b,y.rendered&&(D.stop(1,0).remove(),a.each(y.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(y.timers.show),clearTimeout(y.timers.hide),Q();if(!e||y===e)a.removeData(c,"qtip"),s.suppress&&d&&(a.attr(c,"title",d),r.removeAttr(t)),r.removeAttr("aria-describedby");r.unbind(".qtip-"+v),delete i[y.id];return r}})}function w(b){var e;if(!b||"object"!==typeof b)return c;if(b.metadata===d||"object"!==typeof b.metadata)b.metadata={type:b.metadata};if("content"in b){if(b.content===d||"object"!==typeof b.content||b.content.jquery)b.content={text:b.content};e=b.content.text||c,!a.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"===typeof e&&!e.jquery)&&(b.content.text=c);if("title"in b.content){if(b.content.title===d||"object"!==typeof b.content.title)b.content.title={text:b.content.title};e=b.content.title.text||c,!a.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"===typeof e&&!e.jquery)&&(b.content.title.text=c)}}if("position"in b)if(b.position===d||"object"!==typeof b.position)b.position={my:b.position,at:b.position};if("show"in b)if(b.show===d||"object"!==typeof b.show)b.show.jquery?b.show={target:b.show}:b.show={event:b.show};if("hide"in b)if(b.hide===d||"object"!==typeof b.hide)b.hide.jquery?b.hide={target:b.hide}:b.hide={event:b.hide};if("style"in b)if(b.style===d||"object"!==typeof b.style)b.style={classes:b.style};a.each(g,function(){this.sanitize&&this.sanitize(b)});return b}function v(){v.history=v.history||[],v.history.push(arguments);if("object"===typeof console){var a=console[console.warn?"warn":"log"],b=Array.prototype.slice.call(arguments),c;typeof arguments[0]==="string"&&(b[0]="qTip2: "+b[0]),c=a.apply?a.apply(console,b):a(b)}}"use strict";var b=!0,c=!1,d=null,e,f,g,h,i={},j="ui-tooltip",k="ui-widget",l="ui-state-disabled",m="div.qtip."+j,n=j+"-default",o=j+"-focus",p=j+"-hover",q=j+"-fluid",r="-31000px",s="_replacedByqTip",t="oldtitle",u;f=a.fn.qtip=function(g,h,i){var j=(""+g).toLowerCase(),k=d,l=a.makeArray(arguments).slice(1),m=l[l.length-1],n=this[0]?a.data(this[0],"qtip"):d;if(!arguments.length&&n||j==="api")return n;if("string"===typeof g){this.each(function(){var d=a.data(this,"qtip");if(!d)return b;m&&m.timeStamp&&(d.cache.event=m);if(j!=="option"&&j!=="options"||!h)d[j]&&d[j].apply(d[j],l);else if(a.isPlainObject(h)||i!==e)d.set(h,i);else{k=d.get(h);return c}});return k!==d?k:this}if("object"===typeof g||!arguments.length){n=w(a.extend(b,{},g));return f.bind.call(this,n,m)}},f.bind=function(d,j){return this.each(function(k){function r(b){function d(){p.render(typeof b==="object"||l.show.ready),m.show.add(m.hide).unbind(o)}if(p.cache.disabled)return c;p.cache.event=a.extend({},b),p.cache.target=b?a(b.target):[e],l.show.delay>0?(clearTimeout(p.timers.show),p.timers.show=setTimeout(d,l.show.delay),n.show!==n.hide&&m.hide.bind(n.hide,function(){clearTimeout(p.timers.show)})):d()}var l,m,n,o,p,q;q=a.isArray(d.id)?d.id[k]:d.id,q=!q||q===c||q.length<1||i[q]?f.nextid++:i[q]=q,o=".qtip-"+q+"-create",p=y.call(this,q,d);if(p===c)return b;l=p.options,a.each(g,function(){this.initialize==="initialize"&&this(p)}),m={show:l.show.target,hide:l.hide.target},n={show:a.trim(""+l.show.event).replace(/ /g,o+" ")+o,hide:a.trim(""+l.hide.event).replace(/ /g,o+" ")+o},/mouse(over|enter)/i.test(n.show)&&!/mouse(out|leave)/i.test(n.hide)&&(n.hide+=" mouseleave"+o),m.show.bind("mousemove"+o,function(a){h={pageX:a.pageX,pageY:a.pageY,type:"mousemove"},p.cache.onTarget=b}),m.show.bind(n.show,r),(l.show.ready||l.prerender)&&r(j)})},g=f.plugins={Corner:function(a){a=(""+a).replace(/([A-Z])/," $1").replace(/middle/gi,"center").toLowerCase(),this.x=(a.match(/left|right/i)||a.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(a.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var b=a.charAt(0);this.precedance=b==="t"||b==="b"?"y":"x",this.string=function(){return this.precedance==="y"?this.y+this.x:this.x+this.y},this.abbrev=function(){var a=this.x.substr(0,1),b=this.y.substr(0,1);return a===b?a:a==="c"||a!=="c"&&b!=="c"?b+a:a+b},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone}}},offset:function(b,c){function j(a,b){d.left+=b*a.scrollLeft(),d.top+=b*a.scrollTop()}var d=b.offset(),e=b.closest("body")[0],f=c,g,h,i;if(f){do f.css("position")!=="static"&&(h=f.position(),d.left-=h.left+(parseInt(f.css("borderLeftWidth"),10)||0)+(parseInt(f.css("marginLeft"),10)||0),d.top-=h.top+(parseInt(f.css("borderTopWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0),!g&&(i=f.css("overflow"))!=="hidden"&&i!=="visible"&&(g=f));while((f=a(f[0].offsetParent)).length);g&&g[0]!==e&&j(g,1)}return d},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,3})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_","."))||c,fn:{attr:function(b,c){if(this.length){var d=this[0],e="title",f=a.data(d,"qtip");if(b===e&&f&&"object"===typeof f&&f.options.suppress){if(arguments.length<2)return a.attr(d,t);f&&f.options.content.attr===e&&f.cache.attr&&f.set("content.text",c);return this.attr(t,c)}}return a.fn["attr"+s].apply(this,arguments)},clone:function(b){var c=a([]),d="title",e=a.fn["clone"+s].apply(this,arguments);b||e.filter("["+t+"]").attr("title",function(){return a.attr(this,t)}).removeAttr(t);return e}}},a.each(g.fn,function(c,d){if(!d||a.fn[c+s])return b;var e=a.fn[c+s]=a.fn[c];a.fn[c]=function(){return d.apply(this,arguments)||e.apply(this,arguments)}}),a.ui||(a["cleanData"+s]=a.cleanData,a.cleanData=function(b){for(var c=0,d;(d=b[c])!==e;c++)try{a(d).triggerHandler("removeqtip")}catch(f){}a["cleanData"+s](b)}),f.version="nightly",f.nextid=0,f.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),f.zindex=15e3,f.defaults={prerender:c,id:c,overwrite:b,suppress:b,content:{text:b,attr:"title",title:{text:c,button:c}},position:{my:"top left",at:"bottom right",target:c,container:c,viewport:c,adjust:{x:0,y:0,mouse:b,resize:b,method:"flip flip"},effect:function(b,d,e){a(this).animate(d,{duration:200,queue:c})}},show:{target:c,event:"mouseenter",effect:b,delay:90,solo:c,ready:c,autofocus:c},hide:{target:c,event:"mouseleave",effect:b,delay:0,fixed:c,inactive:c,leave:"window",distance:c},style:{classes:"",widget:c,width:c,height:c,def:b},events:{render:d,move:d,show:d,hide:d,toggle:d,visible:d,hidden:d,focus:d,blur:d}},g.ajax=function(a){var b=a.plugins.ajax;return"object"===typeof b?b:a.plugins.ajax=new z(a)},g.ajax.initialize="render",g.ajax.sanitize=function(a){var b=a.content,c;b&&"ajax"in b&&(c=b.ajax,typeof c!=="object"&&(c=a.content.ajax={url:c}),"boolean"!==typeof c.once&&c.once&&(c.once=!!c.once))},a.extend(b,f.defaults,{content:{ajax:{loading:b,once:b}}}),g.tip=function(a){var b=a.plugins.tip;return"object"===typeof b?b:a.plugins.tip=new B(a)},g.tip.initialize="render",g.tip.sanitize=function(a){var c=a.style,d;c&&"tip"in c&&(d=a.style.tip,typeof d!=="object"&&(a.style.tip={corner:d}),/string|boolean/i.test(typeof d.corner)||(d.corner=b),typeof d.width!=="number"&&delete d.width,typeof d.height!=="number"&&delete d.height,typeof d.border!=="number"&&d.border!==b&&delete d.border,typeof d.offset!=="number"&&delete d.offset)},a.extend(b,f.defaults,{style:{tip:{corner:b,mimic:c,width:6,height:6,border:b,offset:0}}}),g.modal=function(a){var b=a.plugins.modal;return"object"===typeof b?b:a.plugins.modal=new C(a)},g.modal.initialize="render",g.modal.sanitize=function(a){a.show&&(typeof a.show.modal!=="object"?a.show.modal={on:!!a.show.modal}:typeof a.show.modal.on==="undefined"&&(a.show.modal.on=b))},g.modal.zindex=f.zindex+1e3,a.extend(b,f.defaults,{show:{modal:{on:c,effect:b,blur:b,escape:b}}})}) \ No newline at end of file From f0399dc1f709d047c3b69f700a22bfb2cfb9053e Mon Sep 17 00:00:00 2001 From: David Soms Date: Wed, 14 Jan 2015 22:59:49 +0100 Subject: [PATCH 038/156] Removed console logging in ajaxEpSearch.js --- gui/slick/js/ajaxEpSearch.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/gui/slick/js/ajaxEpSearch.js b/gui/slick/js/ajaxEpSearch.js index d4502673..5cb697d6 100644 --- a/gui/slick/js/ajaxEpSearch.js +++ b/gui/slick/js/ajaxEpSearch.js @@ -33,7 +33,6 @@ function check_manual_searches() { function updateImages(data) { $.each(data.episodes, function (name, ep) { - console.debug(ep.searchstatus); // Get td element for current ep var loadingImage = 'loading16.gif'; var queuedImage = 'queued.png'; @@ -123,7 +122,6 @@ function disableLink(el) { // Check if we have disabled the click if ( $(this).attr('enableClick') == '0' ) { - console.debug("Already queued, not downloading!"); return false; } @@ -180,4 +178,3 @@ function disableLink(el) { }); } })(); - From 7796f06b944512d811a2e0929cdf5930e379b2b8 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Wed, 14 Jan 2015 21:32:09 -0500 Subject: [PATCH 039/156] Fix Black and White lists in edit show. --- gui/slick/interfaces/default/editShow.tmpl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gui/slick/interfaces/default/editShow.tmpl b/gui/slick/interfaces/default/editShow.tmpl index ef959c6b..21eda7d3 100644 --- a/gui/slick/interfaces/default/editShow.tmpl +++ b/gui/slick/interfaces/default/editShow.tmpl @@ -265,22 +265,22 @@ Separate words with a comma, e.g. "word1,word2,word3"
}); \$('#addToWhite').click(function() { - var group = \$('#addToPoolText').attr("value") + var group = \$('#addToPoolText').val() if(group == "") return - \$('#addToPoolText').attr("value", "") + \$('#addToPoolText').val("") var option = \$("
+ #if len($sickbeard.DOWNLOAD_URL) > 0 + #end if #if $sickbeard.USE_SUBTITLES and $show.subtitles: #end if @@ -473,8 +475,8 @@ #if int($epResult['airdate']) == 1 then 'never' else $sbdatetime.sbdatetime.sbfdate($sbdatetime.sbdatetime.convert_to_setting($network_timezones.parse_date_time($epResult['airdate'],$show.airs,$show.network)))# - + #elif len($sickbeard.DOWNLOAD_URL) > 0 + + #end if #if $sickbeard.USE_SUBTITLES and $show.subtitles: + @@ -173,6 +175,7 @@ + diff --git a/gui/slick/interfaces/default/manage_massEdit.tmpl b/gui/slick/interfaces/default/manage_massEdit.tmpl index 9a680060..ff01c02d 100644 --- a/gui/slick/interfaces/default/manage_massEdit.tmpl +++ b/gui/slick/interfaces/default/manage_massEdit.tmpl @@ -1,5 +1,6 @@ #import sickbeard #from sickbeard import common +#from sickbeard.common import * #from sickbeard import exceptions #set global $title="Mass Edit" #set global $header="Mass Edit" @@ -111,6 +112,18 @@
+
+ Default Episode Status: +
+ +

+
+
Scene Numbering
diff --git a/gui/slick/js/massEdit.js b/gui/slick/js/massEdit.js index 9108c201..523149c6 100644 --- a/gui/slick/js/massEdit.js +++ b/gui/slick/js/massEdit.js @@ -29,4 +29,4 @@ $(document).ready(function(){ $('#display_new_root_dir_'+cur_id).html('DELETED'); }); -}); \ No newline at end of file +}); diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index b6f023f2..637962ee 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -1375,13 +1375,13 @@ class Home(WebRoot): showObj.sports = sports showObj.subtitles = subtitles showObj.air_by_date = air_by_date + showObj.default_ep_status = int(defaultEpStatus) if not directCall: showObj.lang = indexer_lang showObj.dvdorder = dvdorder showObj.rls_ignore_words = rls_ignore_words.strip() showObj.rls_require_words = rls_require_words.strip() - showObj.default_ep_status = int(defaultEpStatus) # if we change location clear the db of episodes, change it, write to db, and rescan if os.path.normpath(showObj._location) != os.path.normpath(location): @@ -2841,6 +2841,9 @@ class Manage(Home, WebRoot): paused_all_same = True last_paused = None + default_ep_status_all_same = True + last_default_ep_status = None + anime_all_same = True last_anime = None @@ -2882,6 +2885,12 @@ class Manage(Home, WebRoot): else: last_paused = curShow.paused + if default_ep_status_all_same: + if last_default_ep_status not in (None, curShow.default_ep_status): + default_ep_status_all_same = False + else: + last_default_ep_status = curShow.default_ep_status + if anime_all_same: # if we had a value already and this value is different then they're not all the same if last_anime not in (None, curShow.is_anime): @@ -2927,6 +2936,7 @@ class Manage(Home, WebRoot): t.showList = toEdit t.archive_firstmatch_value = last_archive_firstmatch if archive_firstmatch_all_same else None + t.default_ep_status_value = last_default_ep_status if default_ep_status_all_same else None t.paused_value = last_paused if paused_all_same else None t.anime_value = last_anime if anime_all_same else None t.flatten_folders_value = last_flatten_folders if flatten_folders_all_same else None @@ -2940,9 +2950,8 @@ class Manage(Home, WebRoot): return t.respond() - def massEditSubmit(self, archive_firstmatch=None, paused=None, anime=None, sports=None, scene=None, - flatten_folders=None, - quality_preset=False, + def massEditSubmit(self, archive_firstmatch=None, paused=None, default_ep_status=None, + anime=None, sports=None, scene=None, flatten_folders=None, quality_preset=False, subtitles=None, air_by_date=None, anyQualities=[], bestQualities=[], toEdit=None, *args, **kwargs): @@ -2983,6 +2992,11 @@ class Manage(Home, WebRoot): new_paused = True if paused == 'enable' else False new_paused = 'on' if new_paused else 'off' + if default_ep_status == 'keep': + new_default_ep_status = showObj.default_ep_status + else: + new_default_ep_status = default_ep_status + if anime == 'keep': new_anime = showObj.anime else: @@ -3027,6 +3041,7 @@ class Manage(Home, WebRoot): curErrors += self.editShow(curShow, new_show_dir, anyQualities, bestQualities, exceptions_list, + defaultEpStatus=new_default_ep_status, archive_firstmatch=new_archive_firstmatch, flatten_folders=new_flatten_folders, paused=new_paused, sports=new_sports, @@ -4425,7 +4440,7 @@ class ConfigNotifications(Config): sickbeard.GROWL_NOTIFY_ONSUBTITLEDOWNLOAD = config.checkbox_to_value(growl_notify_onsubtitledownload) sickbeard.GROWL_HOST = config.clean_host(growl_host, default_port=23053) sickbeard.GROWL_PASSWORD = growl_password - + sickbeard.USE_FREEMOBILE = config.checkbox_to_value(use_freemobile) sickbeard.FREEMOBILE_NOTIFY_ONSNATCH = config.checkbox_to_value(freemobile_notify_onsnatch) sickbeard.FREEMOBILE_NOTIFY_ONDOWNLOAD = config.checkbox_to_value(freemobile_notify_ondownload) From 639072ff3ad94613b6d8de1901fafeb2f3d748b7 Mon Sep 17 00:00:00 2001 From: larsjohnsen Date: Mon, 19 Jan 2015 07:23:25 +0100 Subject: [PATCH 051/156] Update manage.tmpl Hotfix --- gui/slick/interfaces/default/manage.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/slick/interfaces/default/manage.tmpl b/gui/slick/interfaces/default/manage.tmpl index 4b18f9d1..d32b4f94 100644 --- a/gui/slick/interfaces/default/manage.tmpl +++ b/gui/slick/interfaces/default/manage.tmpl @@ -174,8 +174,8 @@
- + From 760402452b10f8d35681725b2389d42e2def454d Mon Sep 17 00:00:00 2001 From: SickrageDK Date: Mon, 19 Jan 2015 09:28:21 +0100 Subject: [PATCH 052/156] Added HoundDawgs provider --- gui/slick/images/providers/hounddawgs.png | Bin 0 -> 615 bytes sickbeard/__init__.py | 2 +- sickbeard/providers/__init__.py | 1 + sickbeard/providers/hounddawgs.py | 304 ++++++++++++++++++++++ 4 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 gui/slick/images/providers/hounddawgs.png create mode 100644 sickbeard/providers/hounddawgs.py diff --git a/gui/slick/images/providers/hounddawgs.png b/gui/slick/images/providers/hounddawgs.png new file mode 100644 index 0000000000000000000000000000000000000000..a771abd54c5eb24f48478bf9a1b787595a16b650 GIT binary patch literal 615 zcmV-t0+{`YP)p$WjA^1P!Ac!Co1wBYTiBd2M z3JO_CTzuJe-@f!9E(MPsI;VkQX1+6@88I9Vd5g(6Wdk;VF^0#-$C?nL4E*Z@yeJhy zAcVm8{l1hEyWj7Jo12@zPESuiT9$?Dy7<12@B37%RXoqbvMlcI?ug@<@$qq@C}Mee z`Ooz9^jEvn>3rMX-u}3|yZcIBrBWe^BBYeB)U2+qepp*u`z~GAb+Rl2U~FuRk&zJq zf*`;Y1#uj+u&_X@)xx&za)isvOO#TMbQ}lY_W_unpJ!rX0)WqRbG)0HqS5Q604fquV_Ev3Y=ECA~DI+kUTrYWChXE{4Nqc%Fq;o%`yS62ujSXo)2 z-EQN09$IUp)*53B0QdLzG#U*WjRvmklIJ<^n@s?eQta>VljnKaEDS^JG))-{1^^^U z!p_bPH#avFMM07zL{U`Ys|EpETU&%-h%p8!CH7!2Kq&=4uh%P!<#|q)WgHwF@N<2g zxZ7oKZ;x)bi&BcEr6r1@z*q5w zGp5(;$(KWN90w^S#u&8Lp`wE&lsA{srve@{(GmOrih)002ovPDHLkV1iYQ B8yo-t literal 0 HcmV?d00001 diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 531ac5bb..7d26bb8d 100755 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -33,7 +33,7 @@ from github import Github from sickbeard import providers, metadata, config, webserveInit from sickbeard.providers.generic import GenericProvider from providers import ezrss, btn, newznab, womble, thepiratebay, torrentleech, kat, iptorrents, \ - omgwtfnzbs, scc, hdtorrents, torrentday, hdbits, nextgen, speedcd, nyaatorrents, fanzub, torrentbytes, animezb, \ + omgwtfnzbs, scc, hdtorrents, torrentday, hdbits, hounddawgs, nextgen, speedcd, nyaatorrents, fanzub, torrentbytes, animezb, \ freshontv, bitsoup, t411, tokyotoshokan from sickbeard.config import CheckSection, check_setting_int, check_setting_str, check_setting_float, ConfigMigrator, \ naming_ep_type diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py index b4f9df82..8c6ffc66 100755 --- a/sickbeard/providers/__init__.py +++ b/sickbeard/providers/__init__.py @@ -26,6 +26,7 @@ __all__ = ['ezrss', 'hdtorrents', 'torrentday', 'hdbits', + 'hounddawgs', 'iptorrents', 'omgwtfnzbs', 'nextgen', diff --git a/sickbeard/providers/hounddawgs.py b/sickbeard/providers/hounddawgs.py new file mode 100644 index 00000000..978236a9 --- /dev/null +++ b/sickbeard/providers/hounddawgs.py @@ -0,0 +1,304 @@ +# Author: Idan Gutman +# URL: http://code.google.com/p/sickbeard/ +# +# This file is part of SickRage. +# +# SickRage is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# SickRage is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with SickRage. If not, see . + +import re +import traceback +import datetime +import urlparse +import sickbeard +import generic +from sickbeard.common import Quality, cpu_presets +from sickbeard import logger +from sickbeard import tvcache +from sickbeard import db +from sickbeard import classes +from sickbeard import helpers +from sickbeard import show_name_helpers +from sickbeard.common import Overview +from sickbeard.exceptions import ex +from sickbeard import clients +from lib import requests +from lib.requests import exceptions +from sickbeard.bs4_parser import BS4Parser +from lib.unidecode import unidecode +from sickbeard.helpers import sanitizeSceneName + + +class HoundDawgsProvider(generic.TorrentProvider): + + def __init__(self): + + generic.TorrentProvider.__init__(self, "HoundDawgs") + + self.supportsBacklog = True + + self.enabled = False + self.username = None + self.password = None + self.ratio = None + self.minseed = None + self.minleech = None + + self.cache = HoundDawgsCache(self) + + self.urls = {'base_url': 'http://192.99.10.104/', + 'search': 'http://192.99.10.104/torrents.php?type=&userid=&searchstr=%s&searchimdb=&searchtags=&order_by=s3&order_way=desc&%s', + 'login': 'http://192.99.10.104/login.php', + } + + self.url = self.urls['base_url'] + + self.categories = "&filter_cat[85]=1&filter_cat[58]=1&filter_cat[57]=1&filter_cat[74]=1&filter_cat[92]=1&filter_cat[93]=1" + + def isEnabled(self): + return self.enabled + + def imageName(self): + return 'hounddawgs.png' + + def getQuality(self, item, anime=False): + + quality = Quality.sceneQuality(item[0], anime) + return quality + + def _doLogin(self): + + login_params = {'username': self.username, + 'password': self.password, + 'keeplogged': 'on', + 'login': 'Login', + } + + self.session = requests.Session() + + try: + response = self.session.post(self.urls['login'], data=login_params, timeout=30, verify=False) + except (requests.exceptions.ConnectionError, requests.exceptions.HTTPError), e: + logger.log(u'Unable to connect to ' + self.name + ' provider: ' + ex(e), logger.ERROR) + return False + + if re.search('Dit brugernavn eller kodeord er forkert.', response.text) \ + or re.search('Login :: HoundDawgs', response.text) \ + or response.status_code == 401: + logger.log(u'Invalid username or password for ' + self.name + ' Check your settings', logger.ERROR) + return False + + return True + + def _get_season_search_strings(self, ep_obj): + + search_string = {'Season': []} + for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): + if ep_obj.show.air_by_date or ep_obj.show.sports: + ep_string = show_name + ' ' + str(ep_obj.airdate).split('-')[0] + elif ep_obj.show.anime: + ep_string = show_name + ' ' + "%d" % ep_obj.scene_absolute_number + else: + ep_string = show_name + ' S%02d' % int(ep_obj.scene_season) #1) showName SXX + + search_string['Season'].append(ep_string) + + return [search_string] + + def _get_episode_search_strings(self, ep_obj, add_string=''): + + search_string = {'Episode': []} + + if not ep_obj: + return [] + + if self.show.air_by_date: + for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): + ep_string = sanitizeSceneName(show_name) + ' ' + \ + str(ep_obj.airdate).replace('-', '|') + search_string['Episode'].append(ep_string) + elif self.show.sports: + for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): + ep_string = sanitizeSceneName(show_name) + ' ' + \ + str(ep_obj.airdate).replace('-', '|') + '|' + \ + ep_obj.airdate.strftime('%b') + search_string['Episode'].append(ep_string) + elif self.show.anime: + for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): + ep_string = sanitizeSceneName(show_name) + ' ' + \ + "%i" % int(ep_obj.scene_absolute_number) + search_string['Episode'].append(ep_string) + else: + for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): + ep_string = show_name_helpers.sanitizeSceneName(show_name) + ' ' + \ + sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season, + 'episodenumber': ep_obj.scene_episode} + + search_string['Episode'].append(re.sub('\s+', ' ', ep_string)) + + return [search_string] + + def _doSearch(self, search_params, search_mode='eponly', epcount=0, age=0): + + results = [] + items = {'Season': [], 'Episode': [], 'RSS': []} + + if not self._doLogin(): + return [] + + for mode in search_params.keys(): + for search_string in search_params[mode]: + + if isinstance(search_string, unicode): + search_string = unidecode(search_string) + + #if mode == 'RSS': + #searchURL = self.urls['index'] % self.categories + #else: + searchURL = self.urls['search'] % (search_string, self.categories) + + logger.log(u"Search string: " + searchURL, logger.DEBUG) + + data = self.getURL(searchURL) + strTableStart = "
Name AirdateDownloadSubtitles #if len($sickbeard.DOWNLOAD_URL) > 0 and len($epResult['location']) > 0 + #set $filename = $epResult['location'] #for $rootDir in $sickbeard.ROOT_DIRS.split('|') #if $rootDir.startswith('/') @@ -483,14 +485,10 @@ #end for #set $filename = $sickbeard.DOWNLOAD_URL + $urllib.quote($filename.encode('utf8'))
Download
- #else - #if $epLoc and $show._location and $epLoc.lower().startswith($show._location.lower()): - $epLoc[len($show._location)+1:] - #elif $epLoc and (not $epLoc.lower().startswith($show._location.lower()) or not $show._location): - $epLoc - #end if - #end if
From e11d9bbbb2a25f7bfd0b3264f51e76fdb347b03f Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Thu, 15 Jan 2015 13:34:45 -0500 Subject: [PATCH 042/156] Fix jQuery live not working with 1.9+: Subtiles, newshow and recommandedshows --- gui/slick/js/configSubtitles.js | 6 +++--- gui/slick/js/newShow.js | 2 +- gui/slick/js/recommendedShows.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/gui/slick/js/configSubtitles.js b/gui/slick/js/configSubtitles.js index 034f204a..91ec8747 100644 --- a/gui/slick/js/configSubtitles.js +++ b/gui/slick/js/configSubtitles.js @@ -47,10 +47,10 @@ $(document).ready(function(){ $('#editAService').change(function(){ $(this).showHideServices(); }); - - $('.service_enabler').live('click', function(){ + + $('.service_enabler').on('click', function(){ $(this).refreshServiceList(); - }); + }); // initialization stuff diff --git a/gui/slick/js/newShow.js b/gui/slick/js/newShow.js index 6018f360..3daea1f7 100644 --- a/gui/slick/js/newShow.js +++ b/gui/slick/js/newShow.js @@ -216,7 +216,7 @@ $(document).ready(function () { } $('#rootDirText').change(updateSampleText); - $('#whichSeries').live('change', updateSampleText); + $('#searchResults').on('change', '#whichSeries', updateSampleText); $('#nameToSearch').keyup(function (event) { if (event.keyCode == 13) { diff --git a/gui/slick/js/recommendedShows.js b/gui/slick/js/recommendedShows.js index f2b9bd1f..caec10d9 100644 --- a/gui/slick/js/recommendedShows.js +++ b/gui/slick/js/recommendedShows.js @@ -139,6 +139,6 @@ $(document).ready(function () { } $('#rootDirText').change(updateSampleText); - $('#whichSeries').live('change', updateSampleText); + $('#searchResults').on('change', '#whichSeries', updateSampleText); }); From a8787bc0d35990d47eee99e21c20689b6676b0b6 Mon Sep 17 00:00:00 2001 From: elijordan Date: Sat, 17 Jan 2015 12:17:06 +1100 Subject: [PATCH 043/156] use os.system for file copies on posix systems --- sickbeard/helpers.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 801990d6..0f15c627 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -342,7 +342,11 @@ def listMediaFiles(path): def copyFile(srcFile, destFile): - ek.ek(shutil.copyfile, srcFile, destFile) + if isPosix(): + os.system('cp "%s" "%s"' % (srcFile, destFile)) + else: + ek.ek(shutil.copyfile, srcFile, destFile) + try: ek.ek(shutil.copymode, srcFile, destFile) except OSError: @@ -366,6 +370,12 @@ def link(src, dst): else: os.link(src, dst) +def isPosix(): + if os.name.startswith('posix'): + return True + else: + return False + def hardlinkFile(srcFile, destFile): try: From ec468793a153a15a392f842cf567ea015f76fc9c Mon Sep 17 00:00:00 2001 From: Ben Fox-Moore Date: Sat, 17 Jan 2015 18:22:18 +0100 Subject: [PATCH 044/156] Ignore unrar executable on Windows. --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 402d5c94..d4c1ea9a 100644 --- a/.gitignore +++ b/.gitignore @@ -50,3 +50,7 @@ Thumbs.db *~ /.idea/ *.torrent + +# Unrar Executable # +###################### +lib/unrar2/UnRAR.exe From 53c205422c8f02bfb6d8f0bd3870292f76d8c5d6 Mon Sep 17 00:00:00 2001 From: swamp12 Date: Sun, 18 Jan 2015 01:01:21 +0100 Subject: [PATCH 045/156] SiCKRAGETV/sickrage-issues#360: remove globals in post processing code for thread safety. Second upload. Missed updating a function call to use the "result" object. --- sickbeard/processTV.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/processTV.py b/sickbeard/processTV.py index e099a3f8..01580c18 100644 --- a/sickbeard/processTV.py +++ b/sickbeard/processTV.py @@ -203,7 +203,7 @@ def processDir(dirName, nzbName=None, process_method=None, force=False, is_prior #Don't Link media when the media is extracted from a rar in the same path if process_method in ('hardlink', 'symlink') and videoInRar: - process_media(processPath, videoInRar, nzbName, 'move', force, is_priority) + process_media(processPath, videoInRar, nzbName, 'move', force, is_priority, result) process_media(processPath, set(videoFiles) - set(videoInRar), nzbName, process_method, force, is_priority, result) delete_files(processPath, rarContent, result) From e123a195a90dae23d2dc910ecfae3992399fe71b Mon Sep 17 00:00:00 2001 From: markheloking Date: Sun, 18 Jan 2015 14:27:52 +0100 Subject: [PATCH 046/156] Update TODO.txt Isn't this file obsolete since we have the issuetracker? --- TODO.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TODO.txt b/TODO.txt index ba720e0e..b18ae219 100644 --- a/TODO.txt +++ b/TODO.txt @@ -12,7 +12,7 @@ -Change the hardcoded global ignore words to optional 2014-10-08 --Add login page for http auth as opposed to browser dialog box +VAdd login page for http auth as opposed to browser dialog box 2014-10-13 -Fix broken backlog From 28f75bf91dd21aaef62b1dd517ee4d1668d85dd1 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Sun, 18 Jan 2015 14:15:45 -0500 Subject: [PATCH 047/156] Fix default episode status in display and edit show. See SiCKRAGETV/sickrage-issues/issues/111 for more info --- sickbeard/webserve.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index ccc27dc5..b6f023f2 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -1381,7 +1381,7 @@ class Home(WebRoot): showObj.dvdorder = dvdorder showObj.rls_ignore_words = rls_ignore_words.strip() showObj.rls_require_words = rls_require_words.strip() - showObj.default_ep_status = defaultEpStatus + showObj.default_ep_status = int(defaultEpStatus) # if we change location clear the db of episodes, change it, write to db, and rescan if os.path.normpath(showObj._location) != os.path.normpath(location): From dc17344e48a8eb1d9661bccaa9d0ff0e1fad6514 Mon Sep 17 00:00:00 2001 From: Lars Johnsen Date: Mon, 19 Jan 2015 03:07:30 +0100 Subject: [PATCH 048/156] Removed provider TvTorrents --- gui/slick/images/providers/tvtorrents.png | Bin 703 -> 0 bytes .../interfaces/default/config_providers.tmpl | 33 ------ sickbeard/__init__.py | 2 +- sickbeard/providers/__init__.py | 1 - sickbeard/providers/tvtorrents.py | 103 ------------------ 5 files changed, 1 insertion(+), 138 deletions(-) delete mode 100644 gui/slick/images/providers/tvtorrents.png delete mode 100644 sickbeard/providers/tvtorrents.py diff --git a/gui/slick/images/providers/tvtorrents.png b/gui/slick/images/providers/tvtorrents.png deleted file mode 100644 index bca30aa998eb723f2e7cba3707b27892f1b7923c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmzVP)x3ujSlD{E^JQz6%H;gPHs*{6HO#0Cd9>26B2?TXqBQ=0w#R7w4w+tz5SrQ zxA(TMFEj$i#LdJryvdt$&U2pUoCp4OtgL3l-}2V|pTsv+#1d)LY>r~FgoP@DBh%#a zdEs`slwWm^pN$B=uaVxX=M`&oCMo6@S1}BOx%p*+t%vA55y0tiV6)j6k0x13ZtM=3 znOhTiIY2GcW-EhZv!e5OGtLGV8|fl}qaOPD$M`%I!|QG0_RSvdJs6@|u0v5QSnL`% zu7~Jf@xI9s3o~flkj*7hohdhU_E|+3AekE;WrCpbNb#DblsE<8cw$& z0R(1Mkja#!W-HODA{(h3mqKlnb(Q#6mF2}89#7MLfC_3x!|StBHftc8^1ls$D)=y& zr2FC-S*P>x$uNaN1C|5jJqdc*M9pbv z3N~{4B^XlkR-q&*S}`jigrJZw$|KulR`4#oMQSroBpN4~kV{f@4p?di-F4T}@|t)% zk>IemmD%|(^mL!bZny8`N}A5c=`8C%VqCl2g~KT&$js+7So{zF l_dSn@v2axI-^EV>1_1j4GnJgD;}rk^002ovPDHLkV1oD5K)L_` diff --git a/gui/slick/interfaces/default/config_providers.tmpl b/gui/slick/interfaces/default/config_providers.tmpl index 666f2ce8..35d38946 100644 --- a/gui/slick/interfaces/default/config_providers.tmpl +++ b/gui/slick/interfaces/default/config_providers.tmpl @@ -530,39 +530,6 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#; #end if - #if $hasattr($curTorrentProvider, 'options'): -
- -
- Advanced options -
- -
-
- -
-
- -
-
-
- #end if - #end for diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 1676a853..531ac5bb 100755 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -32,7 +32,7 @@ from github import Github from sickbeard import providers, metadata, config, webserveInit from sickbeard.providers.generic import GenericProvider -from providers import ezrss, tvtorrents, btn, newznab, womble, thepiratebay, torrentleech, kat, iptorrents, \ +from providers import ezrss, btn, newznab, womble, thepiratebay, torrentleech, kat, iptorrents, \ omgwtfnzbs, scc, hdtorrents, torrentday, hdbits, nextgen, speedcd, nyaatorrents, fanzub, torrentbytes, animezb, \ freshontv, bitsoup, t411, tokyotoshokan from sickbeard.config import CheckSection, check_setting_int, check_setting_str, check_setting_float, ConfigMigrator, \ diff --git a/sickbeard/providers/__init__.py b/sickbeard/providers/__init__.py index 50af6be7..b4f9df82 100755 --- a/sickbeard/providers/__init__.py +++ b/sickbeard/providers/__init__.py @@ -17,7 +17,6 @@ # along with SickRage. If not, see . __all__ = ['ezrss', - 'tvtorrents', 'womble', 'btn', 'thepiratebay', diff --git a/sickbeard/providers/tvtorrents.py b/sickbeard/providers/tvtorrents.py deleted file mode 100644 index 7a4b66b4..00000000 --- a/sickbeard/providers/tvtorrents.py +++ /dev/null @@ -1,103 +0,0 @@ -# Author: Nic Wolfe -# URL: http://code.google.com/p/sickbeard/ -# -# This file is part of SickRage. -# -# SickRage is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# SickRage is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with SickRage. If not, see . - -try: - import xml.etree.cElementTree as etree -except ImportError: - import elementtree.ElementTree as etree - -import sickbeard -import generic - -from sickbeard.exceptions import ex, AuthException -from sickbeard import helpers -from sickbeard import logger -from sickbeard import tvcache - - -class TvTorrentsProvider(generic.TorrentProvider): - def __init__(self): - - generic.TorrentProvider.__init__(self, "TvTorrents") - - self.supportsBacklog = False - - self.enabled = False - self.hash = None - self.digest = None - self.ratio = None - self.options = None - - self.cache = TvTorrentsCache(self) - - self.urls = {'base_url': 'https://www.tvtorrents.com/'} - self.url = self.urls['base_url'] - - def isEnabled(self): - return self.enabled - - def imageName(self): - return 'tvtorrents.png' - - def _checkAuth(self): - if not self.digest or not self.hash: - raise AuthException("Your authentication credentials for " + self.name + " are missing, check your config.") - - return True - - def _checkAuthFromData(self, data): - if not (data['entries'] and data['feed']): - return self._checkAuth() - - try: - title = data['feed']['title'] - except: - return False - - if title and ("User can't be found" in title or "Invalid Hash" in title): - logger.log(u"Incorrect authentication credentials for " + self.name + " : " + str(title), - logger.DEBUG) - raise AuthException( - u"Your authentication credentials for " + self.name + " are incorrect, check your config") - - return True - - def seedRatio(self): - return self.ratio - - -class TvTorrentsCache(tvcache.TVCache): - def __init__(self, provider): - tvcache.TVCache.__init__(self, provider) - - # only poll TvTorrents every 15 minutes max - self.minTime = 15 - - def _getRSSData(self): - # These will be ignored on the serverside. - ignore_regex = "all.month|month.of|season[\s\d]*complete" - - rss_url = self.provider.url + 'RssServlet?digest=' + provider.digest + '&hash=' + provider.hash + '&fname=true&exclude=(' + ignore_regex + ')' - logger.log(self.provider.name + u" cache update URL: " + rss_url, logger.DEBUG) - - return self.getRSSFeed(rss_url) - - def _checkAuth(self, data): - return self.provider._checkAuthFromData(data) - -provider = TvTorrentsProvider() From 0f9e729b7cc01d6e9d3808c5cd15fe56bf17a5e2 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Sun, 18 Jan 2015 23:10:17 -0500 Subject: [PATCH 049/156] Fix Safari next show button not working. See SiCKRAGETV/sickrage-issues#436 for more info --- gui/slick/js/displayShow.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/slick/js/displayShow.js b/gui/slick/js/displayShow.js index b78264a7..428ad16d 100644 --- a/gui/slick/js/displayShow.js +++ b/gui/slick/js/displayShow.js @@ -14,12 +14,12 @@ $(document).ready(function () { }); $("#prevShow").click(function () { - $('#pickShow option:selected').prev('option').attr('selected', 'selected'); + $('#pickShow option:selected').prev('option').prop('selected', 'selected'); $("#pickShow").change(); }); $("#nextShow").click(function () { - $('#pickShow option:selected').next('option').attr('selected', 'selected'); + $('#pickShow option:selected').next('option').prop('selected', 'selected'); $("#pickShow").change(); }); From 2fc53582831492d6a8f64a5cc1c00d31c4920720 Mon Sep 17 00:00:00 2001 From: Lars Johnsen Date: Mon, 19 Jan 2015 07:07:21 +0100 Subject: [PATCH 050/156] Mass update: Add option for default episode status --- gui/slick/interfaces/default/manage.tmpl | 11 +++++--- .../interfaces/default/manage_massEdit.tmpl | 13 ++++++++++ gui/slick/js/massEdit.js | 2 +- sickbeard/webserve.py | 25 +++++++++++++++---- 4 files changed, 41 insertions(+), 10 deletions(-) diff --git a/gui/slick/interfaces/default/manage.tmpl b/gui/slick/interfaces/default/manage.tmpl index 3a240f21..4b18f9d1 100644 --- a/gui/slick/interfaces/default/manage.tmpl +++ b/gui/slick/interfaces/default/manage.tmpl @@ -58,14 +58,15 @@ 5: { sorter: 'anime'}, 6: { sorter: 'flatfold'}, 7: { sorter: 'paused'}, - 8: { sorter: 'status'}, - 9: { sorter: false}, + 8: { sorter: 'default_ep_status'}, + 9: { sorter: 'status'}, 10: { sorter: false}, 11: { sorter: false}, 12: { sorter: false}, - 13: { sorter: false}, + 13: { sorter: false}, 14: { sorter: false}, - 15: { sorter: false} + 15: { sorter: false}, + 16: { sorter: false} } }); }); @@ -90,6 +91,7 @@
Anime Flat Folders PausedDefault Ep
Status
Status Update
Rescan
\"Y\"" \"Y\"" $curShow.status$statusStrings[$curShow.default_ep_status] $curUpdate $curRefresh $curRename\"Y\"" \"Y\"" \"Y\""$curShow.status $statusStrings[$curShow.default_ep_status]$curShow.status $curUpdate $curRefresh $curRename
= ' + str(search_date.toordinal()) + + ' AND (e.status IN (' + ','.join([str(x) for x in Quality.DOWNLOADED]) + ')' + + ' OR (e.status IN (' + ','.join([str(x) for x in Quality.SNATCHED]) + ')))' + ) + + if not sqlResults: + return [] + + for sqlshow in sqlResults: + self.show = helpers.findCertainShow(sickbeard.showList, int(sqlshow["showid"])) + if self.show: + curEp = self.show.getEpisode(int(sqlshow["season"]), int(sqlshow["episode"])) + + searchString = self._get_episode_search_strings(curEp, add_string='PROPER|REPACK') + + for item in self._doSearch(searchString[0]): + title, url = self._get_title_and_url(item) + results.append(classes.Proper(title, url, datetime.datetime.today(), self.show)) + + return results + + def seedRatio(self): + return self.ratio + + +class HoundDawgsCache(tvcache.TVCache): + def __init__(self, provider): + + tvcache.TVCache.__init__(self, provider) + + # only poll HoundDawgs every 20 minutes max + self.minTime = 20 + + def _getRSSData(self): + search_params = {'RSS': ['']} + return {'entries': self.provider._doSearch(search_params)} + + +provider = HoundDawgsProvider() From aa3f517d9ad3bf00fa89515f5a409b72e909c73f Mon Sep 17 00:00:00 2001 From: Fernando Date: Mon, 19 Jan 2015 09:01:30 -0200 Subject: [PATCH 053/156] Check if list_remote_branches is empty before for-loop It's causing 'NoneType' object is not iterable when GIT timeout while connection to HTTPS Discussion here: https://github.com/SiCKRAGETV/sickrage-issues/issues/307 https://github.com/SiCKRAGETV/sickrage-issues/issues/388 https://github.com/SiCKRAGETV/sickrage-issues/issues/416 --- gui/slick/interfaces/default/config_general.tmpl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gui/slick/interfaces/default/config_general.tmpl b/gui/slick/interfaces/default/config_general.tmpl index dca5fd3d..285fa00a 100644 --- a/gui/slick/interfaces/default/config_general.tmpl +++ b/gui/slick/interfaces/default/config_general.tmpl @@ -550,9 +550,11 @@ Branch version:

select branch to use (restart required)

From 8ad52924a62e0fbf5fbeb04325487a642ff54cfc Mon Sep 17 00:00:00 2001 From: Fernando Date: Mon, 19 Jan 2015 15:03:52 -0200 Subject: [PATCH 054/156] Re-download episode when manualsearch if quality is Unknown https://github.com/SiCKRAGETV/sickrage-issues/issues/428 --- sickbeard/tv.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 8c3f6695..1f3ef06d 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -1240,6 +1240,10 @@ class TVShow(object): logger.log(u"Episode already exists but the found episode has better quality, getting found episode", logger.DEBUG) return True + elif curStatus == Quality.UNKNOWN and manualSearch: + logger.log(u"Episode already exists but quality is Unknown, getting found episode", + logger.DEBUG) + return True else: logger.log(u"Episode already exists and the found episode has same/lower quality, ignoring found episode", logger.DEBUG) From 0ae2b034847277f2b180584589882c5ab9499327 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Mon, 19 Jan 2015 21:29:19 -0500 Subject: [PATCH 055/156] Fix resultType error: remove resultType as object is sickbeard.classes.Proper and not sickbeard.classes.*SearchResult Fix 'NoneType' object has no attribute 'rls_ignore_words': See SiCKRAGETV/sickrage-issues#328 for more info --- sickbeard/properFinder.py | 2 +- sickbeard/search.py | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/sickbeard/properFinder.py b/sickbeard/properFinder.py index 26aff18f..21507c3c 100644 --- a/sickbeard/properFinder.py +++ b/sickbeard/properFinder.py @@ -146,7 +146,7 @@ class ProperFinder(): curProper.content = None # filter release - bestResult = pickBestResult(curProper) + bestResult = pickBestResult(curProper, parse_result.show) if not bestResult: logger.log(u"Proper " + curProper.name + " were rejected by our release filters.", logger.DEBUG) continue diff --git a/sickbeard/search.py b/sickbeard/search.py index ce5cac2e..63a96615 100644 --- a/sickbeard/search.py +++ b/sickbeard/search.py @@ -187,7 +187,7 @@ def filter_release_name(name, filter_words): return False -def pickBestResult(results, show=None, quality_list=None): +def pickBestResult(results, show, quality_list=None): results = results if isinstance(results, list) else [results] logger.log(u"Picking the best result out of " + str([x.name for x in results]), logger.DEBUG) @@ -200,12 +200,10 @@ def pickBestResult(results, show=None, quality_list=None): if show and cur_result.show is not show: continue - # filter out possible bad torrents from providers such as ezrss - if cur_result.resultType == "torrent" and sickbeard.TORRENT_METHOD != "blackhole": - if not cur_result.url.startswith('magnet'): - cur_result.content = cur_result.provider.getURL(cur_result.url) - if not cur_result.content: - continue + if not cur_result.url.startswith('magnet'): + cur_result.content = cur_result.provider.getURL(cur_result.url) + if not cur_result.content: + continue # build the black And white list if cur_result.show.is_anime: From bb598735367ef11d582039fd7373691b09304f01 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Mon, 19 Jan 2015 23:15:54 -0500 Subject: [PATCH 056/156] Reenabled resultType. Check the instance to see if contain: resultType --- sickbeard/search.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/sickbeard/search.py b/sickbeard/search.py index 63a96615..46803d3c 100644 --- a/sickbeard/search.py +++ b/sickbeard/search.py @@ -200,10 +200,18 @@ def pickBestResult(results, show, quality_list=None): if show and cur_result.show is not show: continue - if not cur_result.url.startswith('magnet'): - cur_result.content = cur_result.provider.getURL(cur_result.url) - if not cur_result.content: - continue + # filter out possible bad torrents from providers such as ezrss + if isinstance(cur_result, sickbeard.classes.SearchResult): + if cur_result.resultType == "torrent" and sickbeard.TORRENT_METHOD != "blackhole": + if not cur_result.url.startswith('magnet'): + cur_result.content = cur_result.provider.getURL(cur_result.url) + if not cur_result.content: + continue + else: + if not cur_result.url.startswith('magnet'): + cur_result.content = cur_result.provider.getURL(cur_result.url) + if not cur_result.content: + continue # build the black And white list if cur_result.show.is_anime: From 5b534e543063864dd1da6e03cde0c0a1e76347a5 Mon Sep 17 00:00:00 2001 From: coolius Date: Tue, 20 Jan 2015 11:46:40 +0000 Subject: [PATCH 057/156] Updated torrentday URL Updated torrentday URL to preferred, block-avoiding torrentday.eu --- sickbeard/providers/torrentday.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py index 9b6738d3..66574a3b 100644 --- a/sickbeard/providers/torrentday.py +++ b/sickbeard/providers/torrentday.py @@ -54,10 +54,10 @@ class TorrentDayProvider(generic.TorrentProvider): self.cache = TorrentDayCache(self) - self.urls = {'base_url': 'http://www.td.af', - 'login': 'http://www.td.af/torrents/', - 'search': 'http://www.td.af/V3/API/API.php', - 'download': 'http://www.td.af/download.php/%s/%s' + self.urls = {'base_url': 'https://www.torrentday.eu', + 'login': 'https://www.torrentday.eu/torrents/', + 'search': 'https://www.torrentday.eu/V3/API/API.php', + 'download': 'https://www.torrentday.eu/download.php/%s/%s' } self.url = self.urls['base_url'] From bef446186ee234303f9c3bbe449abe7696c7659b Mon Sep 17 00:00:00 2001 From: coolius Date: Tue, 20 Jan 2015 11:47:36 +0000 Subject: [PATCH 058/156] Updated iptorrents URL Updated iptorrents URL to preferred, block-advoiding iptorrents.eu --- sickbeard/providers/iptorrents.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sickbeard/providers/iptorrents.py b/sickbeard/providers/iptorrents.py index 5ee800ca..bc45600b 100644 --- a/sickbeard/providers/iptorrents.py +++ b/sickbeard/providers/iptorrents.py @@ -54,9 +54,9 @@ class IPTorrentsProvider(generic.TorrentProvider): self.cache = IPTorrentsCache(self) - self.urls = {'base_url': 'https://www.iptorrents.com', - 'login': 'https://www.iptorrents.com/torrents/', - 'search': 'https://www.iptorrents.com/torrents/?%s%s&q=%s&qf=ti', + self.urls = {'base_url': 'https://www.iptorrents.eu', + 'login': 'https://www.iptorrents.eu/torrents/', + 'search': 'https://www.iptorrents.eu/torrents/?%s%s&q=%s&qf=ti', } self.url = self.urls['base_url'] From 503282694c956ec959bfb8eb97af97dfd2343059 Mon Sep 17 00:00:00 2001 From: coolius Date: Tue, 20 Jan 2015 11:56:26 +0000 Subject: [PATCH 059/156] Update torrentday.py --- sickbeard/providers/torrentday.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py index 66574a3b..e74d77ba 100644 --- a/sickbeard/providers/torrentday.py +++ b/sickbeard/providers/torrentday.py @@ -54,10 +54,10 @@ class TorrentDayProvider(generic.TorrentProvider): self.cache = TorrentDayCache(self) - self.urls = {'base_url': 'https://www.torrentday.eu', - 'login': 'https://www.torrentday.eu/torrents/', - 'search': 'https://www.torrentday.eu/V3/API/API.php', - 'download': 'https://www.torrentday.eu/download.php/%s/%s' + self.urls = {'base_url': 'https://torrentday.eu', + 'login': 'https://torrentday.eu/torrents/', + 'search': 'https://torrentday.eu/V3/API/API.php', + 'download': 'https://torrentday.eu/download.php/%s/%s' } self.url = self.urls['base_url'] From 25905a3aec4cfb3a164be34ed074f7b9cabc6ead Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Tue, 20 Jan 2015 11:20:53 -0500 Subject: [PATCH 060/156] Fix wrong country flag shown in displayShow. Use flags from http://www.famfamfam.com/lab/icons/flags/, see http://www.flag-sprites.com/en_US/ for more info. --- gui/slick/css/country-flags.css | 257 ++++++++++++++++++ gui/slick/images/blank.png | Bin 0 -> 109 bytes gui/slick/images/country-flags.png | Bin 0 -> 78853 bytes gui/slick/interfaces/default/displayShow.tmpl | 2 +- gui/slick/interfaces/default/inc_top.tmpl | 1 + 5 files changed, 259 insertions(+), 1 deletion(-) create mode 100644 gui/slick/css/country-flags.css create mode 100644 gui/slick/images/blank.png create mode 100644 gui/slick/images/country-flags.png diff --git a/gui/slick/css/country-flags.css b/gui/slick/css/country-flags.css new file mode 100644 index 00000000..8c116dca --- /dev/null +++ b/gui/slick/css/country-flags.css @@ -0,0 +1,257 @@ +.country-flag { + width: 16px; + height: 11px; + background:url(images/country-flags.png) no-repeat +} + +.country-flag.flag-ad {background-position: -16px 0} +.country-flag.flag-ae {background-position: -32px 0} +.country-flag.flag-af {background-position: -48px 0} +.country-flag.flag-ag {background-position: -64px 0} +.country-flag.flag-ai {background-position: -80px 0} +.country-flag.flag-al {background-position: -96px 0} +.country-flag.flag-am {background-position: -112px 0} +.country-flag.flag-an {background-position: -128px 0} +.country-flag.flag-ao {background-position: -144px 0} +.country-flag.flag-ar {background-position: -160px 0} +.country-flag.flag-as {background-position: -176px 0} +.country-flag.flag-at {background-position: -192px 0} +.country-flag.flag-au {background-position: -208px 0} +.country-flag.flag-aw {background-position: -224px 0} +.country-flag.flag-az {background-position: -240px 0} +.country-flag.flag-ba {background-position: 0 -11px} +.country-flag.flag-bb {background-position: -16px -11px} +.country-flag.flag-bd {background-position: -32px -11px} +.country-flag.flag-be {background-position: -48px -11px} +.country-flag.flag-bf {background-position: -64px -11px} +.country-flag.flag-bg {background-position: -80px -11px} +.country-flag.flag-bh {background-position: -96px -11px} +.country-flag.flag-bi {background-position: -112px -11px} +.country-flag.flag-bj {background-position: -128px -11px} +.country-flag.flag-bm {background-position: -144px -11px} +.country-flag.flag-bn {background-position: -160px -11px} +.country-flag.flag-bo {background-position: -176px -11px} +.country-flag.flag-br {background-position: -192px -11px} +.country-flag.flag-bs {background-position: -208px -11px} +.country-flag.flag-bt {background-position: -224px -11px} +.country-flag.flag-bv {background-position: -240px -11px} +.country-flag.flag-bw {background-position: 0 -22px} +.country-flag.flag-by {background-position: -16px -22px} +.country-flag.flag-bz {background-position: -32px -22px} +.country-flag.flag-ca {background-position: -48px -22px} +.country-flag.flag-catalonia {background-position: -64px -22px} +.country-flag.flag-cd {background-position: -80px -22px} +.country-flag.flag-cf {background-position: -96px -22px} +.country-flag.flag-cg {background-position: -112px -22px} +.country-flag.flag-ch {background-position: -128px -22px} +.country-flag.flag-ci {background-position: -144px -22px} +.country-flag.flag-ck {background-position: -160px -22px} +.country-flag.flag-cl {background-position: -176px -22px} +.country-flag.flag-cm {background-position: -192px -22px} +.country-flag.flag-cn {background-position: -208px -22px} +.country-flag.flag-co {background-position: -224px -22px} +.country-flag.flag-cr {background-position: -240px -22px} +.country-flag.flag-cu {background-position: 0 -33px} +.country-flag.flag-cv {background-position: -16px -33px} +.country-flag.flag-cw {background-position: -32px -33px} +.country-flag.flag-cy {background-position: -48px -33px} +.country-flag.flag-cz {background-position: -64px -33px} +.country-flag.flag-de {background-position: -80px -33px} +.country-flag.flag-dj {background-position: -96px -33px} +.country-flag.flag-dk {background-position: -112px -33px} +.country-flag.flag-dm {background-position: -128px -33px} +.country-flag.flag-do {background-position: -144px -33px} +.country-flag.flag-dz {background-position: -160px -33px} +.country-flag.flag-ec {background-position: -176px -33px} +.country-flag.flag-ee {background-position: -192px -33px} +.country-flag.flag-eg {background-position: -208px -33px} +.country-flag.flag-eh {background-position: -224px -33px} +.country-flag.flag-england {background-position: -240px -33px} +.country-flag.flag-er {background-position: 0 -44px} +.country-flag.flag-es {background-position: -16px -44px} +.country-flag.flag-et {background-position: -32px -44px} +.country-flag.flag-eu {background-position: -48px -44px} +.country-flag.flag-fi {background-position: -64px -44px} +.country-flag.flag-fj {background-position: -80px -44px} +.country-flag.flag-fk {background-position: -96px -44px} +.country-flag.flag-fm {background-position: -112px -44px} +.country-flag.flag-fo {background-position: -128px -44px} +.country-flag.flag-fr {background-position: -144px -44px} +.country-flag.flag-ga {background-position: -160px -44px} +.country-flag.flag-gb {background-position: -176px -44px} +.country-flag.flag-gd {background-position: -192px -44px} +.country-flag.flag-ge {background-position: -208px -44px} +.country-flag.flag-gf {background-position: -224px -44px} +.country-flag.flag-gg {background-position: -240px -44px} +.country-flag.flag-gh {background-position: 0 -55px} +.country-flag.flag-gi {background-position: -16px -55px} +.country-flag.flag-gl {background-position: -32px -55px} +.country-flag.flag-gm {background-position: -48px -55px} +.country-flag.flag-gn {background-position: -64px -55px} +.country-flag.flag-gp {background-position: -80px -55px} +.country-flag.flag-gq {background-position: -96px -55px} +.country-flag.flag-gr {background-position: -112px -55px} +.country-flag.flag-gs {background-position: -128px -55px} +.country-flag.flag-gt {background-position: -144px -55px} +.country-flag.flag-gu {background-position: -160px -55px} +.country-flag.flag-gw {background-position: -176px -55px} +.country-flag.flag-gy {background-position: -192px -55px} +.country-flag.flag-hk {background-position: -208px -55px} +.country-flag.flag-hm {background-position: -224px -55px} +.country-flag.flag-hn {background-position: -240px -55px} +.country-flag.flag-hr {background-position: 0 -66px} +.country-flag.flag-ht {background-position: -16px -66px} +.country-flag.flag-hu {background-position: -32px -66px} +.country-flag.flag-ic {background-position: -48px -66px} +.country-flag.flag-id {background-position: -64px -66px} +.country-flag.flag-ie {background-position: -80px -66px} +.country-flag.flag-il {background-position: -96px -66px} +.country-flag.flag-im {background-position: -112px -66px} +.country-flag.flag-in {background-position: -128px -66px} +.country-flag.flag-io {background-position: -144px -66px} +.country-flag.flag-iq {background-position: -160px -66px} +.country-flag.flag-ir {background-position: -176px -66px} +.country-flag.flag-is {background-position: -192px -66px} +.country-flag.flag-it {background-position: -208px -66px} +.country-flag.flag-je {background-position: -224px -66px} +.country-flag.flag-jm {background-position: -240px -66px} +.country-flag.flag-jo {background-position: 0 -77px} +.country-flag.flag-jp {background-position: -16px -77px} +.country-flag.flag-ke {background-position: -32px -77px} +.country-flag.flag-kg {background-position: -48px -77px} +.country-flag.flag-kh {background-position: -64px -77px} +.country-flag.flag-ki {background-position: -80px -77px} +.country-flag.flag-km {background-position: -96px -77px} +.country-flag.flag-kn {background-position: -112px -77px} +.country-flag.flag-kp {background-position: -128px -77px} +.country-flag.flag-kr {background-position: -144px -77px} +.country-flag.flag-kurdistan {background-position: -160px -77px} +.country-flag.flag-kw {background-position: -176px -77px} +.country-flag.flag-ky {background-position: -192px -77px} +.country-flag.flag-kz {background-position: -208px -77px} +.country-flag.flag-la {background-position: -224px -77px} +.country-flag.flag-lb {background-position: -240px -77px} +.country-flag.flag-lc {background-position: 0 -88px} +.country-flag.flag-li {background-position: -16px -88px} +.country-flag.flag-lk {background-position: -32px -88px} +.country-flag.flag-lr {background-position: -48px -88px} +.country-flag.flag-ls {background-position: -64px -88px} +.country-flag.flag-lt {background-position: -80px -88px} +.country-flag.flag-lu {background-position: -96px -88px} +.country-flag.flag-lv {background-position: -112px -88px} +.country-flag.flag-ly {background-position: -128px -88px} +.country-flag.flag-ma {background-position: -144px -88px} +.country-flag.flag-mc {background-position: -160px -88px} +.country-flag.flag-md {background-position: -176px -88px} +.country-flag.flag-me {background-position: -192px -88px} +.country-flag.flag-mg {background-position: -208px -88px} +.country-flag.flag-mh {background-position: -224px -88px} +.country-flag.flag-mk {background-position: -240px -88px} +.country-flag.flag-ml {background-position: 0 -99px} +.country-flag.flag-mm {background-position: -16px -99px} +.country-flag.flag-mn {background-position: -32px -99px} +.country-flag.flag-mo {background-position: -48px -99px} +.country-flag.flag-mp {background-position: -64px -99px} +.country-flag.flag-mq {background-position: -80px -99px} +.country-flag.flag-mr {background-position: -96px -99px} +.country-flag.flag-ms {background-position: -112px -99px} +.country-flag.flag-mt {background-position: -128px -99px} +.country-flag.flag-mu {background-position: -144px -99px} +.country-flag.flag-mv {background-position: -160px -99px} +.country-flag.flag-mw {background-position: -176px -99px} +.country-flag.flag-mx {background-position: -192px -99px} +.country-flag.flag-my {background-position: -208px -99px} +.country-flag.flag-mz {background-position: -224px -99px} +.country-flag.flag-na {background-position: -240px -99px} +.country-flag.flag-nc {background-position: 0 -110px} +.country-flag.flag-ne {background-position: -16px -110px} +.country-flag.flag-nf {background-position: -32px -110px} +.country-flag.flag-ng {background-position: -48px -110px} +.country-flag.flag-ni {background-position: -64px -110px} +.country-flag.flag-nl {background-position: -80px -110px} +.country-flag.flag-no {background-position: -96px -110px} +.country-flag.flag-np {background-position: -112px -110px} +.country-flag.flag-nr {background-position: -128px -110px} +.country-flag.flag-nu {background-position: -144px -110px} +.country-flag.flag-nz {background-position: -160px -110px} +.country-flag.flag-om {background-position: -176px -110px} +.country-flag.flag-pa {background-position: -192px -110px} +.country-flag.flag-pe {background-position: -208px -110px} +.country-flag.flag-pf {background-position: -224px -110px} +.country-flag.flag-pg {background-position: -240px -110px} +.country-flag.flag-ph {background-position: 0 -121px} +.country-flag.flag-pk {background-position: -16px -121px} +.country-flag.flag-pl {background-position: -32px -121px} +.country-flag.flag-pm {background-position: -48px -121px} +.country-flag.flag-pn {background-position: -64px -121px} +.country-flag.flag-pr {background-position: -80px -121px} +.country-flag.flag-ps {background-position: -96px -121px} +.country-flag.flag-pt {background-position: -112px -121px} +.country-flag.flag-pw {background-position: -128px -121px} +.country-flag.flag-py {background-position: -144px -121px} +.country-flag.flag-qa {background-position: -160px -121px} +.country-flag.flag-re {background-position: -176px -121px} +.country-flag.flag-ro {background-position: -192px -121px} +.country-flag.flag-rs {background-position: -208px -121px} +.country-flag.flag-ru {background-position: -224px -121px} +.country-flag.flag-rw {background-position: -240px -121px} +.country-flag.flag-sa {background-position: 0 -132px} +.country-flag.flag-sb {background-position: -16px -132px} +.country-flag.flag-sc {background-position: -32px -132px} +.country-flag.flag-scotland {background-position: -48px -132px} +.country-flag.flag-sd {background-position: -64px -132px} +.country-flag.flag-se {background-position: -80px -132px} +.country-flag.flag-sg {background-position: -96px -132px} +.country-flag.flag-sh {background-position: -112px -132px} +.country-flag.flag-si {background-position: -128px -132px} +.country-flag.flag-sk {background-position: -144px -132px} +.country-flag.flag-sl {background-position: -160px -132px} +.country-flag.flag-sm {background-position: -176px -132px} +.country-flag.flag-sn {background-position: -192px -132px} +.country-flag.flag-so {background-position: -208px -132px} +.country-flag.flag-somaliland {background-position: -224px -132px} +.country-flag.flag-sr {background-position: -240px -132px} +.country-flag.flag-ss {background-position: 0 -143px} +.country-flag.flag-st {background-position: -16px -143px} +.country-flag.flag-sv {background-position: -32px -143px} +.country-flag.flag-sx {background-position: -48px -143px} +.country-flag.flag-sy {background-position: -64px -143px} +.country-flag.flag-sz {background-position: -80px -143px} +.country-flag.flag-tc {background-position: -96px -143px} +.country-flag.flag-td {background-position: -112px -143px} +.country-flag.flag-tf {background-position: -128px -143px} +.country-flag.flag-tg {background-position: -144px -143px} +.country-flag.flag-th {background-position: -160px -143px} +.country-flag.flag-tj {background-position: -176px -143px} +.country-flag.flag-tk {background-position: -192px -143px} +.country-flag.flag-tl {background-position: -208px -143px} +.country-flag.flag-tm {background-position: -224px -143px} +.country-flag.flag-tn {background-position: -240px -143px} +.country-flag.flag-to {background-position: 0 -154px} +.country-flag.flag-tr {background-position: -16px -154px} +.country-flag.flag-tt {background-position: -32px -154px} +.country-flag.flag-tv {background-position: -48px -154px} +.country-flag.flag-tw {background-position: -64px -154px} +.country-flag.flag-tz {background-position: -80px -154px} +.country-flag.flag-ua {background-position: -96px -154px} +.country-flag.flag-ug {background-position: -112px -154px} +.country-flag.flag-um {background-position: -128px -154px} +.country-flag.flag-us {background-position: -144px -154px} +.country-flag.flag-uy {background-position: -160px -154px} +.country-flag.flag-uz {background-position: -176px -154px} +.country-flag.flag-va {background-position: -192px -154px} +.country-flag.flag-vc {background-position: -208px -154px} +.country-flag.flag-ve {background-position: -224px -154px} +.country-flag.flag-vg {background-position: -240px -154px} +.country-flag.flag-vi {background-position: 0 -165px} +.country-flag.flag-vn {background-position: -16px -165px} +.country-flag.flag-vu {background-position: -32px -165px} +.country-flag.flag-wales {background-position: -48px -165px} +.country-flag.flag-wf {background-position: -64px -165px} +.country-flag.flag-ws {background-position: -80px -165px} +.country-flag.flag-ye {background-position: -96px -165px} +.country-flag.flag-yt {background-position: -112px -165px} +.country-flag.flag-za {background-position: -128px -165px} +.country-flag.flag-zanzibar {background-position: -144px -165px} +.country-flag.flag-zm {background-position: -160px -165px} +.country-flag.flag-zw {background-position: -176px -165px} diff --git a/gui/slick/images/blank.png b/gui/slick/images/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..87828be3fb8674d52c24219a782819b9386ff5fc GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx1|;Q0k8}blwj^(N7l!{JxM1({$v_d#0*}aI v1_o|n5N2eUHAey{$m{9i7{YNqIROZOTvi6gxX)TvKo*0itDnm{r-UW|c}*7g literal 0 HcmV?d00001 diff --git a/gui/slick/images/country-flags.png b/gui/slick/images/country-flags.png new file mode 100644 index 0000000000000000000000000000000000000000..da2bff7834d1a3bf61f646814337148886241662 GIT binary patch literal 78853 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 literal 0 HcmV?d00001 diff --git a/gui/slick/interfaces/default/displayShow.tmpl b/gui/slick/interfaces/default/displayShow.tmpl index c85e9f49..885607d8 100644 --- a/gui/slick/interfaces/default/displayShow.tmpl +++ b/gui/slick/interfaces/default/displayShow.tmpl @@ -166,7 +166,7 @@ #else #if 'country_codes' in $show.imdb_info: #for $country in $show.imdb_info['country_codes'].split('|') - + #end for #end if #if 'year' in $show.imdb_info: diff --git a/gui/slick/interfaces/default/inc_top.tmpl b/gui/slick/interfaces/default/inc_top.tmpl index d8c37ecf..e8beb9b1 100644 --- a/gui/slick/interfaces/default/inc_top.tmpl +++ b/gui/slick/interfaces/default/inc_top.tmpl @@ -41,6 +41,7 @@ + From 9dc7bd1938f8e1be6777ff7d5a6492c9fd8be2f6 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Tue, 20 Jan 2015 11:26:56 -0500 Subject: [PATCH 061/156] Forgot $sbRoot. --- gui/slick/interfaces/default/displayShow.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/slick/interfaces/default/displayShow.tmpl b/gui/slick/interfaces/default/displayShow.tmpl index 885607d8..413c3afb 100644 --- a/gui/slick/interfaces/default/displayShow.tmpl +++ b/gui/slick/interfaces/default/displayShow.tmpl @@ -166,7 +166,7 @@ #else #if 'country_codes' in $show.imdb_info: #for $country in $show.imdb_info['country_codes'].split('|') - + #end for #end if #if 'year' in $show.imdb_info: From 728b7bb1075fd8fd1d3603460aa46ef8aa16c70e Mon Sep 17 00:00:00 2001 From: Fernando Date: Tue, 20 Jan 2015 18:42:18 -0200 Subject: [PATCH 062/156] Fix versionchecker In CheckVersion.init (sickbeard/versionChecker.py, line 41), the install_type attribute is only assigned if sickbeard.gh has been set, and it won't be if SR couldn't connect to Github. The restart code (SickBeard.py, line 482) tries to access install_type to determine which update command to run, which raises an AttributeError and prevents SR from restarting. SiCKRAGETV/sickrage-issues#307 (comment) --- sickbeard/versionChecker.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sickbeard/versionChecker.py b/sickbeard/versionChecker.py index f6fa146d..a1061049 100644 --- a/sickbeard/versionChecker.py +++ b/sickbeard/versionChecker.py @@ -40,6 +40,7 @@ class CheckVersion(): def __init__(self): self.updater = None + self.install_type = None if sickbeard.gh: self.install_type = self.find_install_type() From 18569665de7804140a11976f0ba7e10d37f34181 Mon Sep 17 00:00:00 2001 From: Fernando Date: Tue, 20 Jan 2015 20:06:57 -0200 Subject: [PATCH 063/156] Fix issue when location is empty Comments here https://github.com/SiCKRAGETV/SickRage/pull/1186 --- gui/slick/interfaces/default/displayShow.tmpl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gui/slick/interfaces/default/displayShow.tmpl b/gui/slick/interfaces/default/displayShow.tmpl index c85e9f49..c4c46c25 100644 --- a/gui/slick/interfaces/default/displayShow.tmpl +++ b/gui/slick/interfaces/default/displayShow.tmpl @@ -377,7 +377,7 @@ #end if
- #if len($sickbeard.DOWNLOAD_URL) > 0 + #if $sickbeard.DOWNLOAD_URL #end if #if $sickbeard.USE_SUBTITLES and $show.subtitles: @@ -475,7 +475,7 @@ #if int($epResult['airdate']) == 1 then 'never' else $sbdatetime.sbdatetime.sbfdate($sbdatetime.sbdatetime.convert_to_setting($network_timezones.parse_date_time($epResult['airdate'],$show.airs,$show.network)))# - #if len($sickbeard.DOWNLOAD_URL) > 0 and len($epResult['location']) > 0 + #if $sickbeard.DOWNLOAD_URL and $epResult['location'] - #elif len($sickbeard.DOWNLOAD_URL) > 0 + #elif $sickbeard.DOWNLOAD_URL #end if From 808074a5d1dc85693bd99e5c38682b9b937e3e5d Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Tue, 20 Jan 2015 22:57:02 -0500 Subject: [PATCH 064/156] Fix wrong icon used in Growl notification. --- sickbeard/notifiers/growl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/notifiers/growl.py b/sickbeard/notifiers/growl.py index 368b5129..91998fe3 100644 --- a/sickbeard/notifiers/growl.py +++ b/sickbeard/notifiers/growl.py @@ -68,7 +68,7 @@ class GrowlNotifier: notice.add_header('Notification-Priority', options['priority']) if options['icon']: notice.add_header('Notification-Icon', - 'https://raw.github.com/SiCKRAGETV/SickRage/master/gui/slick/images/sickrage.png') + 'https://raw.github.com/SiCKRAGETV/SickRage/master/gui/slick/images/sickrage-shark-mascot.png') if message: notice.add_header('Notification-Text', message) From 942cca1ced4a49e05853aefd403e140bbee03c43 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Tue, 20 Jan 2015 23:12:26 -0500 Subject: [PATCH 065/156] Fix jump to select season dropdown list not working. --- gui/slick/js/displayShow.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gui/slick/js/displayShow.js b/gui/slick/js/displayShow.js index b78264a7..2873bb07 100644 --- a/gui/slick/js/displayShow.js +++ b/gui/slick/js/displayShow.js @@ -5,9 +5,9 @@ $(document).ready(function () { $('#sbRoot').ajaxEpSubtitlesSearch(); $('#seasonJump').change(function () { - var id = $(this).val(); + var id = $('#seasonJump option:selected').val(); if (id && id != 'jump') { - $('html,body').animate({scrollTop: $(id).offset().top}, 'slow'); + $('html,body').animate({scrollTop: $('[name ="' + id.substring(1) + '"]').offset().top - 50}, 'slow'); location.hash = id; } $(this).val('jump'); From 64626bc7aaf3e51926559b453fe0dce2685be8d2 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Wed, 21 Jan 2015 03:32:22 -0500 Subject: [PATCH 066/156] Updated Kodi icons --- gui/slick/images/menu/menu-icons-black.png | Bin 3779 -> 3620 bytes gui/slick/images/menu/menu-icons-white.png | Bin 3564 -> 3465 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/gui/slick/images/menu/menu-icons-black.png b/gui/slick/images/menu/menu-icons-black.png index 0e3cca997c45715a6f6ab33b4fb80a87549922ea..8e990967c7bfa8e0d2c7cb59d86e8f7582919123 100644 GIT binary patch delta 3549 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 X4ed*S57Rn{00000NkvXXu0mjfqUq~> literal 3779 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 tMB*0F3qUjzqd?p&=7F4 diff --git a/gui/slick/images/menu/menu-icons-white.png b/gui/slick/images/menu/menu-icons-white.png index f301d60255331d7c22808af5d395b7f7c9e3048b..ea2d2c43682b8a4b549d629d75df049ed018fc5e 100644 GIT binary patch delta 3393 zcmV-H4Zia18;Ki`BLV{Wkvba!D3Os@AAbQ15|fJy90LM;KxTdhXgqT*)0qV zOgts26(GF~&iMtEMVaXtB?^X?mX->RDfvmM3c;1dC8@c^3Z8k%`9%f!MTsS;DStq< zP&+_?*CoG1!96iEPr=AQl|*+F1fXz)un^&c5JQ0E(xNg53#>?hL4m=5!GR%wA(5e; zVFANYhBu7jj4q6&j4K%LF^Mq+F->5)z%0xh$-I#H4T~j92g@y1J=Rv%du*0$)7ZYT zhqLeIP~zy~_`;dUd4bE3YYVp~_kRK&DW0jkLcEjsg!!iN%kVE2&=J@n=qh+cC{^f( zaIc7p$X?NK(Jx|?#ErzSNK{D5Ngk8RmzI`3AyX!+E_+L^Pu@lTkHS{PLM1(=x5{f( z3RF#0f2ti+@6rg>RMPyQbwGQPPO7ezo}k_<{UZho3~P;IjBQQiO_@z!ntxp|-)XVL za)MQzb*@dEZJ?d2y|sg}qmGlBvyzK~tGt_nyRwJ6r>>WYw~ddxZ?Ip2e||uH;KZP% z!Mj2(hQ17Eija%6ii(J?h?yC?C+aj zY$|+LtX+~-x~l9=g??p8)qk!U##*nssr3&V^_ps$&$i076}BJklb7q4iEY5nK; z|33f?01q^@-A=dw0007FOGiWi|A&vvzmXvqe*gz`Nliru-vJc}8zq@K#3BFy3KmI3 zK~!ko?V5XV71bTbzncU?AdpZVM!*6-2s2fTqa7c$H6VhH+G)kAr8+6awgQg$LPdu$ zmSOBmt4-C`+ERoLse@uwMtqf&@>0M=p^}>rLU=@wYODl;xw-r4A9wHG$DZB0NvLh7 zf1aJWbI!TnJ?D2G-{0?derF{^;!)85S;FE=l=}YrJ$Cb<@p+f?KSL=;FrC?4LSKEJ zj?au1Fp-L0&nNI`GXGya;Ne`&{oK#h3=bHMF`0=YNld_|iy?_}2Ic_%X;r||G|)hS z@BcLksgm+JnHmE+pNIL>`F}T)17;}Ve~~c~dKdW4lSDDoxQ~1JCWErH6B^kasnTZY z{N5oQd_RT(aQ1N^(0`6Rj17%Ekwt8vkw!MKh!eZB4NM~=hbmSwo<-QeY{u~l^F64; zJjq>#XCAM!#Ycux>H(pf!nRgEj9QPf1(>J z)Q{Wv2%8u&VjNN&Ak;^c^2B4HafpS%_hGyDWLxume zZvrmwjy5*S2rc1Iq6 zV#Ex+_vJC7?Brf1F_C*{pp%ElGqf5SY4j0BND@N>ND;$MyqSeQfk+4cHc@Bv0Xvx@ zYSW~wrO4lzSQgGo1=%VJS>Xtl)q&zNI#?5mJm=6vlS7?2g_>yMoZeU;e~HJj>E!3! z%p9I1hRr+=rkzO=W9ZKyPH~?Si3g}Nk|zRGQ$PXLK*U6#6#7(BLk*Py^m&TIsg4i} zu>EW{K$6sK4W!SqQ1q#wleNh)Fr2?|jBAWqIwaCZolRp-cKQS;_OQrYNn$Ng$Nm)2 zUou-D>YO=hbZJx<rrhZopGgcf%47F%ehk$U#< zf_Ko}us*pwh|N80#Kz`D9tLJ*>UG+=NTQibxRG}ES#G8erECKhOO#P2u^8CqAD9TG zI^N*jwDL9J>y!X&bxUss&?h-V0rVk{2(64xs~g20>d5g&CVDj^e+`P*VjA1H!;8!$ zh5t?oizJT${7~X=j*=h7U`7IkUPqG(r;+W#VpejDZ*gu`QpAYGoz9*j$(1hIoV~EM~rpAZT|Fe^a}nKiAOwjFHtC^*OS9y1ASI=nPF;f=6!ZEJ8kptB|jo@NP4c!F=xN8$>q(`^+Ez)}h*V=n-E zDWia;K!Zohf0_hor1)>V#^^r5jc#ce`*=I>?6WCtEqiBuN`dP<@83j>3p47bU~`Ly zJ_e+N7(oM2MG>_`xrzdRN!>#}f%HjDe)Q?f#~fv@qgu|UfZk6x#e@8SotMVIpU|G3<5EiHm-EyPMbN%ep-kSp_REke?R+3Ob0gdeO~5yzDor7x=-jJ?!1+9 zs>E1!I1T?c-P}_^9;0YY(}S&yBCj{jo5Tr;dm`W;Ov@4(-Rzb&W{JF|KjzRu+!0#E z5VvLkTiHi`25ta{csCy6aL+zQWXdi&fkVL4&iz}UopkcOwLX2w2WFAO$>dPX7zS~= zfAdbUXG~j-r}(#%UEbMU`eZ%(T+Lyh;K2&x-OCI^7_)=3(omCVVS*$vl~y9o(?AOo zdvWh$@j3wiAx|KE z++4sZiF}4|7kTu>A_^2UkgowJ(a(cj;I3ggw=bN`cA6df>|s@=x7w}9+dy^@W0hk|HnWl#4ViKMjKK9^rT~vIe~>dd zjb`@v^xs7-wR8otNy}ppnXvrFLtFzl7=1fxonzpg*fq7h6%|zs+jW zdiN+^s|Ib?O?pi;v`8CeTW1^l|JWKV(WYYaOeLiR{Z-OMmSvXQAkhr{UZ~V+^cj7N zHO49J(pYnQ>Fby*86+*Vf7ghY%Wiw%t` z&kyNXpdmWo6fV~*R?MgWJe6shF4d`O*G{d|v#PVYdUS32StMqdF4^MVf7l5R|H-Hu z%$&d(zWtuZYt*?(i}IMm^WPzvjXC-MQz#Q*M7Udi*}X`nT){ zx?`uhv+nd`GyvbuwzDXqj0-uB)6E}XeV)3vqU8P*7-ZbZ>KLZ*U+< zLqi~Na&Km7Y-Iodc-muNV4mRU;^fLCz`#&YR8r&~lnSp_Ufq@}0 zxwybFAi#%#fq@|}KQEO56)-X|e7nZL$iTqBa9P*U#mSX{G=IRFTu@ZPz`$^Tfq}s& zCAB!2fq~%*0|P^Pc}YPD0|R3W0|SFdQg%TJ0|R3L0|SFdc1Vyj0|R3V0|OIJNoqw2 z0|NttbACZ(QD%BZiGrb}rKN&nN`6wRLU3hqNosDff@fZGeo;YwQDRAI3IhWJ)D8v) z1_oZ2{1OHC#DB~@1tSAh1}cMy$S4H}3lTmDF$731Eh>WtB?E&1g93vAg9AeVLn1>x z!vcn*3~w048C@7l8CNjgV-jNuVw%8ofmxV2l6fKX8x~8J4whT2daSLi_t-4irm=lv z4`<)ap~TU}@r5&y^8%M6*A{L~?gczjJX3jvcqj1*^M6g_m*HP5pd+wD&{gn?P^!=m z;a(9Hk-ehfqF=-&i5rPuk*JWAlRPGsFD)&7LZ(bsUG|n-pS+9wABC-og-Uu#Zwxwoom5>bJwd%!`bP{F7}gra7~7i2n=+feG`nEF(_)F` z1gkphTz{K5+dw;4dus<{M;#|MXC)T}S9v!DcV!QCPhBq)ZyO(X-(bH4|NMaZz==Ui zgLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{eu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6 z*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4iHGkDKpKXwk&h`y_F%WPOouUyKlYahHaZn zHgDN#vTgegtDXCIyY4x=FKqvVgE@zO9%(-&etgAA>r>~>B%l3te$qwlOGmFHUj27{ z&VNmtTX*l&-&4MS;$hxnu_ybVWxf!3dGK}qTlsevJ~VwY{ru|dg74u!1%93S)B4Zx z|9=1t01q_!mhoKx001CkNK#Dz0D2_=0Dyx40Qvs_0D$QL0Cg|`0P0`>06Lfe02gnP zU&TfM018e?L_t(|+U%Npa8<<}$Gxeueb^ExKP}xdXxjt00zICV4%~L;3Y4@bD>4RR-G&}s?OrA4!wJwshSL^kK2L?})n9`6m zT*Zp2zYbe*r~6#}J?rzfuJ`zord^UQRg=f}LXC>6L44>#WxLQ_G*462S&~$(DO&4U zqp&g(Qp%JWsBiJbKZTEUUI%G5#4SF?KQ9;Iut z`e}ihw92PnP3761g#X{99~u~W7IWD|Ipu6(E@ye5VlFY&jZ7h*l?-DpQQ%%Oc$Zl& zR09i`Y49^x%XW`CWKs%1DVa%Y3566|Aydsoh{Z%%%J<3OPAWOh_dNRupnt-Sl^OGE zukXr(d`XlD5h5I7DxEuwH2ILRJyC}j5lR@@A!Hs6z%C{N@EK8>ISRmZW4&@&M-}y~ zBeyLzvG6Ux^+}r;?@k4I#<3nuKFn{lee^8Lh)?e-Wa ztjUHQidvK2jqc2gw6Kp~Fq&(4lroxmhEzkY!I92+)anKzL|-3LM2OnI^rw$MQiwD7 z8h9Kbj$8j3Mwq>v{I;o z3a;po^${--rJ1L>kEtvmLX;UUOe3Qa=g^H_oM-z1h{q{5k|zulkVYB>K-fs2wp!*< zNFjMX^m&B_dd0t~+M~)5LU?2}P1+ZtQ@g_Bd zsb(Kr*-jPZlv2Z+oYn#B(}{URd6dmWiSicD0{6Jq^+rY^s`vp@Xte!O5Bg-X8(4_Q zA`7t)*zLK63+6xIV@Lc}d%(@a*kQ*$@}W;#5Bbq2l`wS-aet%@riNlte2}qH%}Dpm z2{D1)JZwNFl7hh2$A3;;0@NWyI&c?4Y^A}qAhf#2xPmMuTd~|2ec%8Kc#>JnU-YJzBv8tU zY%A4-jE%=={z4Z-Ix9KO4;hh^6cHlUrt{>HBY2gyz<(P+1^=C=N3fW%jq7@qF z%CnEU>I2P}Bn{GZ-LH_E6q3}(_dcgBU$-mJL)xRWwO50*UK=ERscu@YyH((uXPP!@ zqps0JRqA$E4=mE18lq(yEJ+%yWg4P8wWvel?NV*m?=(~W)J4~-P-p5PPkG)cJ%@aS z*MB9RV;C=lhYbBOKvI1|TD{PKK*&~CrxDtyd-OMD=>e_ql=xd)5lYe;=ZO2Y>2Xa~ zjmD^(*6UeqRaZ&Vm7$OHy#AViJ!*&YwM8#j;a)K|z{7^)bjPfZxR}y}^i=KuS`5xCiX&VPQKs8~))PFIp17{yG5!lR6d572e31Q$y59y$F^Oni^ zh@q5N`Til{?3G3;gQ;_@gLMohwL_aX(ck(4@J}WrQAW4fvCT=8H>WpC2dx{S)tq6c zbY}5_o!&LKXwB#v0AW@OvE>CYkHRm+z8+ew`w>yu$=t@&JUVIM-Qv@RN)*nb_y zQ~b`h&D->L(4k&LS)&lS^ zR`DLk09fxjzB;9Y)pVweKQf>UJiCoPb6h`J;-hT@QQpk1h2``JbejaQFkupRXN`6H zaxQzQvglL8YPxm6`t+oP2&*kyvW=BQD2wU(9>R4W#sV+WlS{dPDr!8+KYu|HMV#>I z%izMb)6WHta;{HL?y+OL0^QH~BO-i7gr$t2H@*2TONg+}A*9Fr>1+y!Y%8-9qXNvP zQ)hi%wo?wV*9t|!LmM4ni3Rblyj7ZSE%GJTPqtXH-^t$lbj%kS$Rosfd&_bgA5l&@ z6_hZhgZDmz$U%$;qGTbmIe*)QIi8^I<6IqIa_wbbLFMv_-#9e;J}^rPk;h zKOMBf{WVA_3aL>gf!}WVz2)n#H`J^#YB7GTQiV3!c^0Wmdvv$n*Cfr=W<_*b$U**(;#&bm%FYpA4s zTA}wmdP-6|knMZ(7JnN*Y>B}C&0C97jmYELsgaUS*I`Z7OOnRvZAm*dQx*Eum20Z9 zG(p$td^KvHHt01K>qJaCXy3KzH{mB4FWJ0aL||7OWUY0(ltu-&Soc6% z8E;9{7kX^rvbc&Xxj6p)NQiHrs-K)o)g1ju-BqnQdiUGz_@8pOYMB+fNu?^4)KxiJ lr5iO$-Sm_ygJ$&a0RZJ8NCoifi^%{0002ovPDHLkV1isLw@m;5 From faa3cc8fdf6385e848fff1819dc61cc87bdbc55d Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Wed, 21 Jan 2015 15:29:16 -0500 Subject: [PATCH 067/156] Fix 'Sort with "The", "A", "An"' on dropdown in displayShow not working. --- sickbeard/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 8bf157ab..8cd6df50 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -1335,4 +1335,4 @@ if __name__ == '__main__': doctest.testmod() def remove_article(text=''): - return re.sub(r'(?i)/^(?:(?:A(?!\s+to)n?)|The)\s(\w)', r'\1', text) + return re.sub(r'(?i)^(?:(?:A(?!\s+to)n?)|The)\s(\w)', r'\1', text) From d2f49a0759ec97369fca9c5cad467a9b00f8dcab Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Wed, 21 Jan 2015 21:15:23 -0500 Subject: [PATCH 068/156] Update unrar2 from 0.99.3 to 0.99.6 --- lib/unrar2/.hgignore | 6 +- lib/unrar2/.hgtags | 3 + lib/unrar2/MANIFEST.in | 4 +- lib/unrar2/PKG-INFO | 27 - lib/unrar2/UnRAR2.html | 388 ++++----- lib/unrar2/UnRARDLL/unrar.h | 280 +++---- lib/unrar2/UnRARDLL/unrardll.txt | 1212 ++++++++++++++-------------- lib/unrar2/UnRARDLL/whatsnew.txt | 160 ++-- lib/unrar2/UnRARDLL/x64/readme.txt | 2 +- lib/unrar2/[test].rar | Bin 0 -> 84 bytes lib/unrar2/[test].txt | 2 + lib/unrar2/__init__.py | 357 ++++---- lib/unrar2/license.txt | 42 +- lib/unrar2/setup.py | 108 +-- lib/unrar2/test_UnRAR2.py | 325 ++++---- lib/unrar2/test_volumes.part1.rar | Bin 0 -> 17408 bytes lib/unrar2/test_volumes.part2.rar | Bin 0 -> 7471 bytes lib/unrar2/test_volumes_old.r00 | Bin 0 -> 7471 bytes lib/unrar2/test_volumes_old.rar | Bin 0 -> 17408 bytes lib/unrar2/unix.py | 45 +- lib/unrar2/windows.py | 35 +- sickbeard/providers/torrentday.py | 54 +- 22 files changed, 1571 insertions(+), 1479 deletions(-) delete mode 100644 lib/unrar2/PKG-INFO create mode 100644 lib/unrar2/[test].rar create mode 100644 lib/unrar2/[test].txt create mode 100644 lib/unrar2/test_volumes.part1.rar create mode 100644 lib/unrar2/test_volumes.part2.rar create mode 100644 lib/unrar2/test_volumes_old.r00 create mode 100644 lib/unrar2/test_volumes_old.rar diff --git a/lib/unrar2/.hgignore b/lib/unrar2/.hgignore index 28998a5c..7b51655b 100644 --- a/lib/unrar2/.hgignore +++ b/lib/unrar2/.hgignore @@ -1,4 +1,4 @@ -syntax: glob - -*.pyc +syntax: glob + +*.pyc build/* \ No newline at end of file diff --git a/lib/unrar2/.hgtags b/lib/unrar2/.hgtags index 9f0fd548..e94a771c 100644 --- a/lib/unrar2/.hgtags +++ b/lib/unrar2/.hgtags @@ -2,3 +2,6 @@ f2570b5f7205f1433661a9508f464f691cf63389 0.97 d3595b2c9a1aec510f8ae1dcfef1eb8562a77fc0 0.99.1 d23822f936c663784c5edda09cd5a6effe1e882d 0.99.2 855a137f51581bd6d7a79264856020aa52fd0b66 0.99.3 +160655e623388d65c35ac4c8e271b58566e8a489 0.99.4 +8225eb999c02735d0aead538870c91270d41df0c 0.99.5 +734f8f605597616bc102b60ca1e959d3a0ace5b6 0.99.6 diff --git a/lib/unrar2/MANIFEST.in b/lib/unrar2/MANIFEST.in index e7ce0a66..cf17db9d 100644 --- a/lib/unrar2/MANIFEST.in +++ b/lib/unrar2/MANIFEST.in @@ -1,2 +1,2 @@ -recursive-include UnRARDLL *.* -include test.rar UnRAR2.html license.txt +recursive-include UnRARDLL *.* +include test.rar UnRAR2.html license.txt diff --git a/lib/unrar2/PKG-INFO b/lib/unrar2/PKG-INFO deleted file mode 100644 index 4d0117f1..00000000 --- a/lib/unrar2/PKG-INFO +++ /dev/null @@ -1,27 +0,0 @@ -Metadata-Version: 1.1 -Name: pyUnRAR2 -Version: 0.99.3 -Summary: Improved Python wrapper around the free UnRAR.dll -Home-page: http://code.google.com/py-unrar2 -Author: Konstantin Yegupov -Author-email: yk4ever@gmail.com -License: MIT -Description: pyUnRAR2 is a ctypes based wrapper around the free UnRAR.dll. - - It is an modified version of Jimmy Retzlaff's pyUnRAR - more simple, - stable and foolproof. - Notice that it has INCOMPATIBLE interface. - - It enables reading and unpacking of archives created with the - RAR/WinRAR archivers. There is a low-level interface which is very - similar to the C interface provided by UnRAR. There is also a - higher level interface which makes some common operations easier. -Platform: Windows -Classifier: Development Status :: 4 - Beta -Classifier: Environment :: Win32 (MS Windows) -Classifier: License :: OSI Approved :: MIT License -Classifier: Natural Language :: English -Classifier: Operating System :: Microsoft :: Windows -Classifier: Programming Language :: Python -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Classifier: Topic :: System :: Archiving :: Compression diff --git a/lib/unrar2/UnRAR2.html b/lib/unrar2/UnRAR2.html index fa4d2057..ea5b0bac 100644 --- a/lib/unrar2/UnRAR2.html +++ b/lib/unrar2/UnRAR2.html @@ -1,194 +1,196 @@ - - -Python: package UnRAR2 - - -
Name AirdateDownload #set $filename = $epResult['location'] #for $rootDir in $sickbeard.ROOT_DIRS.split('|') @@ -486,7 +486,7 @@ #set $filename = $sickbeard.DOWNLOAD_URL + $urllib.quote($filename.encode('utf8'))
Download
- -
 
- 
UnRAR2 (version 0.99.2)
index
/home/rainman/dev/py-unrar2/UnRAR2/__init__.py
-

pyUnRAR2 is a ctypes based wrapper around the free UnRAR.dll. 

-It is an modified version of Jimmy Retzlaff's pyUnRAR - more simple,
-stable and foolproof.
-Notice that it has INCOMPATIBLE interface.

-It enables reading and unpacking of archives created with the
-RAR/WinRAR archivers. There is a low-level interface which is very
-similar to the C interface provided by UnRAR. There is also a
-higher level interface which makes some common operations easier.

-

- - - - - -
 
-Package Contents
       
UnRAR2 (package)
-rar_exceptions
-
setup
-test_UnRAR2
-
unix
-windows
-

- - - - - -
 
-Classes
       
-
UnRAR2.unix.RarFileImplementation(__builtin__.object) -
-
-
RarFile -
-
-
__builtin__.object -
-
-
RarInfo -
-
-
-

- - - - - -
 
-class RarFile(UnRAR2.unix.RarFileImplementation)
    
Method resolution order:
-
RarFile
-
UnRAR2.unix.RarFileImplementation
-
__builtin__.object
-
-
-Methods defined here:
-
__del__(self)
- -
__init__(self, archiveName, password=None)
Instantiate the archive.

-archiveName is the name of the RAR file.
-password is used to decrypt the files in the archive.

-Properties:
-    comment - comment associated with the archive

->>> print RarFile('test.rar').comment
-This is a test.
- -
extract(self, condition='*', path='.', withSubpath=True, overwrite=True)
Extract specific files from archive to disk.

-If "condition" is a list of numbers, then extract files which have those positions in infolist.
-If "condition" is a string, then it is treated as a wildcard for names of files to extract.
-If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object
-    and returns either boolean True (extract) or boolean False (skip).
-DEPRECATED: If "condition" callback returns string (only supported for Windows) - 
-    that string will be used as a new name to save the file under.
-If "condition" is omitted, all files are extracted.

-"path" is a directory to extract to
-"withSubpath" flag denotes whether files are extracted with their full path in the archive.
-"overwrite" flag denotes whether extracted files will overwrite old ones. Defaults to true.

-Returns list of RarInfos for extracted files.
- -
infoiter(self)
Iterate over all the files in the archive, generating RarInfos.

->>> import os
->>> for fileInArchive in RarFile('test.rar').infoiter():
-...     print os.path.split(fileInArchive.filename)[-1],
-...     print fileInArchive.isdir,
-...     print fileInArchive.size,
-...     print fileInArchive.comment,
-...     print tuple(fileInArchive.datetime)[0:5],
-...     print time.strftime('%a, %d %b %Y %H:%M', fileInArchive.datetime)
-test True 0 None (2003, 6, 30, 1, 59) Mon, 30 Jun 2003 01:59
-test.txt False 20 None (2003, 6, 30, 2, 1) Mon, 30 Jun 2003 02:01
-this.py False 1030 None (2002, 2, 8, 16, 47) Fri, 08 Feb 2002 16:47
- -
infolist(self)
Return a list of RarInfos, descripting the contents of the archive.
- -
read_files(self, condition='*')
Read specific files from archive into memory.
-If "condition" is a list of numbers, then return files which have those positions in infolist.
-If "condition" is a string, then it is treated as a wildcard for names of files to extract.
-If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object 
-    and returns boolean True (extract) or False (skip).
-If "condition" is omitted, all files are returned.

-Returns list of tuples (RarInfo info, str contents)
- -
-Methods inherited from UnRAR2.unix.RarFileImplementation:
-
call(self, cmd, options=[], files=[])
- -
destruct(self)
- -
escaped_password(self)
- -
init(self, password=None)
- -
-Data descriptors inherited from UnRAR2.unix.RarFileImplementation:
-
__dict__
-
dictionary for instance variables (if defined)
-
-
__weakref__
-
list of weak references to the object (if defined)
-
-

- - - - - - - -
 
-class RarInfo(__builtin__.object)
   Represents a file header in an archive. Don't instantiate directly.
-Use only to obtain information about file.
-YOU CANNOT EXTRACT FILE CONTENTS USING THIS OBJECT.
-USE METHODS OF RarFile CLASS INSTEAD.

-Properties:
-    index - index of file within the archive
-    filename - name of the file in the archive including path (if any)
-    datetime - file date/time as a struct_time suitable for time.strftime
-    isdir - True if the file is a directory
-    size - size in bytes of the uncompressed file
-    comment - comment associated with the file
-    
-Note - this is not currently intended to be a Python file-like object.
 
 Methods defined here:
-
__init__(self, rarfile, data)
- -
__str__(self)
- -
-Data descriptors defined here:
-
__dict__
-
dictionary for instance variables (if defined)
-
-
__weakref__
-
list of weak references to the object (if defined)
-
-

- - - - - -
 
-Functions
       
condition2checker(condition)
Converts different condition types to callback
-

- - - - - -
 
-Data
       __version__ = '0.99.2'
-in_windows = False
+ + +Python: package UnRAR2 + + + + + +
 
+ 
UnRAR2 (version 0.99.5)
index
z:\py-unrar2\unrar2\__init__.py
+

pyUnRAR2 is a ctypes based wrapper around the free UnRAR.dll. 

+It is an modified version of Jimmy Retzlaff's pyUnRAR - more simple,
+stable and foolproof.
+Notice that it has INCOMPATIBLE interface.

+It enables reading and unpacking of archives created with the
+RAR/WinRAR archivers. There is a low-level interface which is very
+similar to the C interface provided by UnRAR. There is also a
+higher level interface which makes some common operations easier.

+

+ + + + + +
 
+Package Contents
       
UnRAR2 (package)
+rar_exceptions
+
setup
+test_UnRAR2
+
unix
+windows
+

+ + + + + +
 
+Classes
       
+
UnRAR2.windows.RarFileImplementation(__builtin__.object) +
+
+
RarFile +
+
+
__builtin__.object +
+
+
RarInfo +
+
+
+

+ + + + + +
 
+class RarFile(UnRAR2.windows.RarFileImplementation)
    
Method resolution order:
+
RarFile
+
UnRAR2.windows.RarFileImplementation
+
__builtin__.object
+
+
+Methods defined here:
+
__del__(self)
+ +
__init__(self, archiveName, password=None)
Instantiate the archive.

+archiveName is the name of the RAR file.
+password is used to decrypt the files in the archive.

+Properties:
+    comment - comment associated with the archive

+>>> print RarFile('test.rar').comment
+This is a test.
+ +
extract(self, condition='*', path='.', withSubpath=True, overwrite=True)
Extract specific files from archive to disk.

+If "condition" is a list of numbers, then extract files which have those positions in infolist.
+If "condition" is a string, then it is treated as a wildcard for names of files to extract.
+If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object
+    and returns either boolean True (extract) or boolean False (skip).
+DEPRECATED: If "condition" callback returns string (only supported for Windows) - 
+    that string will be used as a new name to save the file under.
+If "condition" is omitted, all files are extracted.

+"path" is a directory to extract to
+"withSubpath" flag denotes whether files are extracted with their full path in the archive.
+"overwrite" flag denotes whether extracted files will overwrite old ones. Defaults to true.

+Returns list of RarInfos for extracted files.
+ +
get_volume(self)
Determine which volume is it in a multi-volume archive. Returns None if it's not a 
+multi-volume archive, 0-based volume number otherwise.
+ +
infoiter(self)
Iterate over all the files in the archive, generating RarInfos.

+>>> import os
+>>> for fileInArchive in RarFile('test.rar').infoiter():
+...     print os.path.split(fileInArchive.filename)[-1],
+...     print fileInArchive.isdir,
+...     print fileInArchive.size,
+...     print fileInArchive.comment,
+...     print tuple(fileInArchive.datetime)[0:5],
+...     print time.strftime('%a, %d %b %Y %H:%M', fileInArchive.datetime)
+test True 0 None (2003, 6, 30, 1, 59) Mon, 30 Jun 2003 01:59
+test.txt False 20 None (2003, 6, 30, 2, 1) Mon, 30 Jun 2003 02:01
+this.py False 1030 None (2002, 2, 8, 16, 47) Fri, 08 Feb 2002 16:47
+ +
infolist(self)
Return a list of RarInfos, descripting the contents of the archive.
+ +
read_files(self, condition='*')
Read specific files from archive into memory.
+If "condition" is a list of numbers, then return files which have those positions in infolist.
+If "condition" is a string, then it is treated as a wildcard for names of files to extract.
+If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object 
+    and returns boolean True (extract) or False (skip).
+If "condition" is omitted, all files are returned.

+Returns list of tuples (RarInfo info, str contents)
+ +
+Methods inherited from UnRAR2.windows.RarFileImplementation:
+
destruct(self)
+ +
init(self, password=None)
+ +
make_sure_ready(self)
+ +
+Data descriptors inherited from UnRAR2.windows.RarFileImplementation:
+
__dict__
+
dictionary for instance variables (if defined)
+
+
__weakref__
+
list of weak references to the object (if defined)
+
+

+ + + + + + + +
 
+class RarInfo(__builtin__.object)
   Represents a file header in an archive. Don't instantiate directly.
+Use only to obtain information about file.
+YOU CANNOT EXTRACT FILE CONTENTS USING THIS OBJECT.
+USE METHODS OF RarFile CLASS INSTEAD.

+Properties:
+    index - index of file within the archive
+    filename - name of the file in the archive including path (if any)
+    datetime - file date/time as a struct_time suitable for time.strftime
+    isdir - True if the file is a directory
+    size - size in bytes of the uncompressed file
+    comment - comment associated with the file
+    
+Note - this is not currently intended to be a Python file-like object.
 
 Methods defined here:
+
__init__(self, rarfile, data)
+ +
__str__(self)
+ +
+Data descriptors defined here:
+
__dict__
+
dictionary for instance variables (if defined)
+
+
__weakref__
+
list of weak references to the object (if defined)
+
+

+ + + + + +
 
+Functions
       
condition2checker(condition)
Converts different condition types to callback
+

+ + + + + +
 
+Data
       __version__ = '0.99.5'
+in_windows = True
\ No newline at end of file diff --git a/lib/unrar2/UnRARDLL/unrar.h b/lib/unrar2/UnRARDLL/unrar.h index 4582f2c6..7643fa71 100644 --- a/lib/unrar2/UnRARDLL/unrar.h +++ b/lib/unrar2/UnRARDLL/unrar.h @@ -1,140 +1,140 @@ -#ifndef _UNRAR_DLL_ -#define _UNRAR_DLL_ - -#define ERAR_END_ARCHIVE 10 -#define ERAR_NO_MEMORY 11 -#define ERAR_BAD_DATA 12 -#define ERAR_BAD_ARCHIVE 13 -#define ERAR_UNKNOWN_FORMAT 14 -#define ERAR_EOPEN 15 -#define ERAR_ECREATE 16 -#define ERAR_ECLOSE 17 -#define ERAR_EREAD 18 -#define ERAR_EWRITE 19 -#define ERAR_SMALL_BUF 20 -#define ERAR_UNKNOWN 21 -#define ERAR_MISSING_PASSWORD 22 - -#define RAR_OM_LIST 0 -#define RAR_OM_EXTRACT 1 -#define RAR_OM_LIST_INCSPLIT 2 - -#define RAR_SKIP 0 -#define RAR_TEST 1 -#define RAR_EXTRACT 2 - -#define RAR_VOL_ASK 0 -#define RAR_VOL_NOTIFY 1 - -#define RAR_DLL_VERSION 4 - -#ifdef _UNIX -#define CALLBACK -#define PASCAL -#define LONG long -#define HANDLE void * -#define LPARAM long -#define UINT unsigned int -#endif - -struct RARHeaderData -{ - char ArcName[260]; - char FileName[260]; - unsigned int Flags; - unsigned int PackSize; - unsigned int UnpSize; - unsigned int HostOS; - unsigned int FileCRC; - unsigned int FileTime; - unsigned int UnpVer; - unsigned int Method; - unsigned int FileAttr; - char *CmtBuf; - unsigned int CmtBufSize; - unsigned int CmtSize; - unsigned int CmtState; -}; - - -struct RARHeaderDataEx -{ - char ArcName[1024]; - wchar_t ArcNameW[1024]; - char FileName[1024]; - wchar_t FileNameW[1024]; - unsigned int Flags; - unsigned int PackSize; - unsigned int PackSizeHigh; - unsigned int UnpSize; - unsigned int UnpSizeHigh; - unsigned int HostOS; - unsigned int FileCRC; - unsigned int FileTime; - unsigned int UnpVer; - unsigned int Method; - unsigned int FileAttr; - char *CmtBuf; - unsigned int CmtBufSize; - unsigned int CmtSize; - unsigned int CmtState; - unsigned int Reserved[1024]; -}; - - -struct RAROpenArchiveData -{ - char *ArcName; - unsigned int OpenMode; - unsigned int OpenResult; - char *CmtBuf; - unsigned int CmtBufSize; - unsigned int CmtSize; - unsigned int CmtState; -}; - -struct RAROpenArchiveDataEx -{ - char *ArcName; - wchar_t *ArcNameW; - unsigned int OpenMode; - unsigned int OpenResult; - char *CmtBuf; - unsigned int CmtBufSize; - unsigned int CmtSize; - unsigned int CmtState; - unsigned int Flags; - unsigned int Reserved[32]; -}; - -enum UNRARCALLBACK_MESSAGES { - UCM_CHANGEVOLUME,UCM_PROCESSDATA,UCM_NEEDPASSWORD -}; - -typedef int (CALLBACK *UNRARCALLBACK)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2); - -typedef int (PASCAL *CHANGEVOLPROC)(char *ArcName,int Mode); -typedef int (PASCAL *PROCESSDATAPROC)(unsigned char *Addr,int Size); - -#ifdef __cplusplus -extern "C" { -#endif - -HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData); -HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData); -int PASCAL RARCloseArchive(HANDLE hArcData); -int PASCAL RARReadHeader(HANDLE hArcData,struct RARHeaderData *HeaderData); -int PASCAL RARReadHeaderEx(HANDLE hArcData,struct RARHeaderDataEx *HeaderData); -int PASCAL RARProcessFile(HANDLE hArcData,int Operation,char *DestPath,char *DestName); -int PASCAL RARProcessFileW(HANDLE hArcData,int Operation,wchar_t *DestPath,wchar_t *DestName); -void PASCAL RARSetCallback(HANDLE hArcData,UNRARCALLBACK Callback,LPARAM UserData); -void PASCAL RARSetChangeVolProc(HANDLE hArcData,CHANGEVOLPROC ChangeVolProc); -void PASCAL RARSetProcessDataProc(HANDLE hArcData,PROCESSDATAPROC ProcessDataProc); -void PASCAL RARSetPassword(HANDLE hArcData,char *Password); -int PASCAL RARGetDllVersion(); - -#ifdef __cplusplus -} -#endif - -#endif +#ifndef _UNRAR_DLL_ +#define _UNRAR_DLL_ + +#define ERAR_END_ARCHIVE 10 +#define ERAR_NO_MEMORY 11 +#define ERAR_BAD_DATA 12 +#define ERAR_BAD_ARCHIVE 13 +#define ERAR_UNKNOWN_FORMAT 14 +#define ERAR_EOPEN 15 +#define ERAR_ECREATE 16 +#define ERAR_ECLOSE 17 +#define ERAR_EREAD 18 +#define ERAR_EWRITE 19 +#define ERAR_SMALL_BUF 20 +#define ERAR_UNKNOWN 21 +#define ERAR_MISSING_PASSWORD 22 + +#define RAR_OM_LIST 0 +#define RAR_OM_EXTRACT 1 +#define RAR_OM_LIST_INCSPLIT 2 + +#define RAR_SKIP 0 +#define RAR_TEST 1 +#define RAR_EXTRACT 2 + +#define RAR_VOL_ASK 0 +#define RAR_VOL_NOTIFY 1 + +#define RAR_DLL_VERSION 4 + +#ifdef _UNIX +#define CALLBACK +#define PASCAL +#define LONG long +#define HANDLE void * +#define LPARAM long +#define UINT unsigned int +#endif + +struct RARHeaderData +{ + char ArcName[260]; + char FileName[260]; + unsigned int Flags; + unsigned int PackSize; + unsigned int UnpSize; + unsigned int HostOS; + unsigned int FileCRC; + unsigned int FileTime; + unsigned int UnpVer; + unsigned int Method; + unsigned int FileAttr; + char *CmtBuf; + unsigned int CmtBufSize; + unsigned int CmtSize; + unsigned int CmtState; +}; + + +struct RARHeaderDataEx +{ + char ArcName[1024]; + wchar_t ArcNameW[1024]; + char FileName[1024]; + wchar_t FileNameW[1024]; + unsigned int Flags; + unsigned int PackSize; + unsigned int PackSizeHigh; + unsigned int UnpSize; + unsigned int UnpSizeHigh; + unsigned int HostOS; + unsigned int FileCRC; + unsigned int FileTime; + unsigned int UnpVer; + unsigned int Method; + unsigned int FileAttr; + char *CmtBuf; + unsigned int CmtBufSize; + unsigned int CmtSize; + unsigned int CmtState; + unsigned int Reserved[1024]; +}; + + +struct RAROpenArchiveData +{ + char *ArcName; + unsigned int OpenMode; + unsigned int OpenResult; + char *CmtBuf; + unsigned int CmtBufSize; + unsigned int CmtSize; + unsigned int CmtState; +}; + +struct RAROpenArchiveDataEx +{ + char *ArcName; + wchar_t *ArcNameW; + unsigned int OpenMode; + unsigned int OpenResult; + char *CmtBuf; + unsigned int CmtBufSize; + unsigned int CmtSize; + unsigned int CmtState; + unsigned int Flags; + unsigned int Reserved[32]; +}; + +enum UNRARCALLBACK_MESSAGES { + UCM_CHANGEVOLUME,UCM_PROCESSDATA,UCM_NEEDPASSWORD +}; + +typedef int (CALLBACK *UNRARCALLBACK)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2); + +typedef int (PASCAL *CHANGEVOLPROC)(char *ArcName,int Mode); +typedef int (PASCAL *PROCESSDATAPROC)(unsigned char *Addr,int Size); + +#ifdef __cplusplus +extern "C" { +#endif + +HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData); +HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData); +int PASCAL RARCloseArchive(HANDLE hArcData); +int PASCAL RARReadHeader(HANDLE hArcData,struct RARHeaderData *HeaderData); +int PASCAL RARReadHeaderEx(HANDLE hArcData,struct RARHeaderDataEx *HeaderData); +int PASCAL RARProcessFile(HANDLE hArcData,int Operation,char *DestPath,char *DestName); +int PASCAL RARProcessFileW(HANDLE hArcData,int Operation,wchar_t *DestPath,wchar_t *DestName); +void PASCAL RARSetCallback(HANDLE hArcData,UNRARCALLBACK Callback,LPARAM UserData); +void PASCAL RARSetChangeVolProc(HANDLE hArcData,CHANGEVOLPROC ChangeVolProc); +void PASCAL RARSetProcessDataProc(HANDLE hArcData,PROCESSDATAPROC ProcessDataProc); +void PASCAL RARSetPassword(HANDLE hArcData,char *Password); +int PASCAL RARGetDllVersion(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/lib/unrar2/UnRARDLL/unrardll.txt b/lib/unrar2/UnRARDLL/unrardll.txt index c49dd5b4..291c8715 100644 --- a/lib/unrar2/UnRARDLL/unrardll.txt +++ b/lib/unrar2/UnRARDLL/unrardll.txt @@ -1,606 +1,606 @@ - - UnRAR.dll Manual - ~~~~~~~~~~~~~~~~ - - UnRAR.dll is a 32-bit Windows dynamic-link library which provides - file extraction from RAR archives. - - - Exported functions - -==================================================================== -HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData) -==================================================================== - -Description -~~~~~~~~~~~ - Open RAR archive and allocate memory structures - -Parameters -~~~~~~~~~~ -ArchiveData Points to RAROpenArchiveData structure - -struct RAROpenArchiveData -{ - char *ArcName; - UINT OpenMode; - UINT OpenResult; - char *CmtBuf; - UINT CmtBufSize; - UINT CmtSize; - UINT CmtState; -}; - -Structure fields: - -ArcName - Input parameter which should point to zero terminated string - containing the archive name. - -OpenMode - Input parameter. - - Possible values - - RAR_OM_LIST - Open archive for reading file headers only. - - RAR_OM_EXTRACT - Open archive for testing and extracting files. - - RAR_OM_LIST_INCSPLIT - Open archive for reading file headers only. If you open an archive - in such mode, RARReadHeader[Ex] will return all file headers, - including those with "file continued from previous volume" flag. - In case of RAR_OM_LIST such headers are automatically skipped. - So if you process RAR volumes in RAR_OM_LIST_INCSPLIT mode, you will - get several file header records for same file if file is split between - volumes. For such files only the last file header record will contain - the correct file CRC and if you wish to get the correct packed size, - you need to sum up packed sizes of all parts. - -OpenResult - Output parameter. - - Possible values - - 0 Success - ERAR_NO_MEMORY Not enough memory to initialize data structures - ERAR_BAD_DATA Archive header broken - ERAR_BAD_ARCHIVE File is not valid RAR archive - ERAR_UNKNOWN_FORMAT Unknown encryption used for archive headers - ERAR_EOPEN File open error - -CmtBuf - Input parameter which should point to the buffer for archive - comments. Maximum comment size is limited to 64Kb. Comment text is - zero terminated. If the comment text is larger than the buffer - size, the comment text will be truncated. If CmtBuf is set to - NULL, comments will not be read. - -CmtBufSize - Input parameter which should contain size of buffer for archive - comments. - -CmtSize - Output parameter containing size of comments actually read into the - buffer, cannot exceed CmtBufSize. - -CmtState - Output parameter. - - Possible values - - 0 comments not present - 1 Comments read completely - ERAR_NO_MEMORY Not enough memory to extract comments - ERAR_BAD_DATA Broken comment - ERAR_UNKNOWN_FORMAT Unknown comment format - ERAR_SMALL_BUF Buffer too small, comments not completely read - -Return values -~~~~~~~~~~~~~ - Archive handle or NULL in case of error - - -======================================================================== -HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData) -======================================================================== - -Description -~~~~~~~~~~~ - Similar to RAROpenArchive, but uses RAROpenArchiveDataEx structure - allowing to specify Unicode archive name and returning information - about archive flags. - -Parameters -~~~~~~~~~~ -ArchiveData Points to RAROpenArchiveDataEx structure - -struct RAROpenArchiveDataEx -{ - char *ArcName; - wchar_t *ArcNameW; - unsigned int OpenMode; - unsigned int OpenResult; - char *CmtBuf; - unsigned int CmtBufSize; - unsigned int CmtSize; - unsigned int CmtState; - unsigned int Flags; - unsigned int Reserved[32]; -}; - -Structure fields: - -ArcNameW - Input parameter which should point to zero terminated Unicode string - containing the archive name or NULL if Unicode name is not specified. - -Flags - Output parameter. Combination of bit flags. - - Possible values - - 0x0001 - Volume attribute (archive volume) - 0x0002 - Archive comment present - 0x0004 - Archive lock attribute - 0x0008 - Solid attribute (solid archive) - 0x0010 - New volume naming scheme ('volname.partN.rar') - 0x0020 - Authenticity information present - 0x0040 - Recovery record present - 0x0080 - Block headers are encrypted - 0x0100 - First volume (set only by RAR 3.0 and later) - -Reserved[32] - Reserved for future use. Must be zero. - -Information on other structure fields and function return values -is available above, in RAROpenArchive function description. - - -==================================================================== -int PASCAL RARCloseArchive(HANDLE hArcData) -==================================================================== - -Description -~~~~~~~~~~~ - Close RAR archive and release allocated memory. It must be called when - archive processing is finished, even if the archive processing was stopped - due to an error. - -Parameters -~~~~~~~~~~ -hArcData - This parameter should contain the archive handle obtained from the - RAROpenArchive function call. - -Return values -~~~~~~~~~~~~~ - 0 Success - ERAR_ECLOSE Archive close error - - -==================================================================== -int PASCAL RARReadHeader(HANDLE hArcData, - struct RARHeaderData *HeaderData) -==================================================================== - -Description -~~~~~~~~~~~ - Read header of file in archive. - -Parameters -~~~~~~~~~~ -hArcData - This parameter should contain the archive handle obtained from the - RAROpenArchive function call. - -HeaderData - It should point to RARHeaderData structure: - -struct RARHeaderData -{ - char ArcName[260]; - char FileName[260]; - UINT Flags; - UINT PackSize; - UINT UnpSize; - UINT HostOS; - UINT FileCRC; - UINT FileTime; - UINT UnpVer; - UINT Method; - UINT FileAttr; - char *CmtBuf; - UINT CmtBufSize; - UINT CmtSize; - UINT CmtState; -}; - -Structure fields: - -ArcName - Output parameter which contains a zero terminated string of the - current archive name. May be used to determine the current volume - name. - -FileName - Output parameter which contains a zero terminated string of the - file name in OEM (DOS) encoding. - -Flags - Output parameter which contains file flags: - - 0x01 - file continued from previous volume - 0x02 - file continued on next volume - 0x04 - file encrypted with password - 0x08 - file comment present - 0x10 - compression of previous files is used (solid flag) - - bits 7 6 5 - - 0 0 0 - dictionary size 64 Kb - 0 0 1 - dictionary size 128 Kb - 0 1 0 - dictionary size 256 Kb - 0 1 1 - dictionary size 512 Kb - 1 0 0 - dictionary size 1024 Kb - 1 0 1 - dictionary size 2048 KB - 1 1 0 - dictionary size 4096 KB - 1 1 1 - file is directory - - Other bits are reserved. - -PackSize - Output parameter means packed file size or size of the - file part if file was split between volumes. - -UnpSize - Output parameter - unpacked file size. - -HostOS - Output parameter - operating system used for archiving: - - 0 - MS DOS; - 1 - OS/2. - 2 - Win32 - 3 - Unix - -FileCRC - Output parameter which contains unpacked file CRC. In case of file parts - split between volumes only the last part contains the correct CRC - and it is accessible only in RAR_OM_LIST_INCSPLIT listing mode. - -FileTime - Output parameter - contains date and time in standard MS DOS format. - -UnpVer - Output parameter - RAR version needed to extract file. - It is encoded as 10 * Major version + minor version. - -Method - Output parameter - packing method. - -FileAttr - Output parameter - file attributes. - -CmtBuf - File comments support is not implemented in the new DLL version yet. - Now CmtState is always 0. - -/* - * Input parameter which should point to the buffer for file - * comments. Maximum comment size is limited to 64Kb. Comment text is - * a zero terminated string in OEM encoding. If the comment text is - * larger than the buffer size, the comment text will be truncated. - * If CmtBuf is set to NULL, comments will not be read. - */ - -CmtBufSize - Input parameter which should contain size of buffer for archive - comments. - -CmtSize - Output parameter containing size of comments actually read into the - buffer, should not exceed CmtBufSize. - -CmtState - Output parameter. - - Possible values - - 0 Absent comments - 1 Comments read completely - ERAR_NO_MEMORY Not enough memory to extract comments - ERAR_BAD_DATA Broken comment - ERAR_UNKNOWN_FORMAT Unknown comment format - ERAR_SMALL_BUF Buffer too small, comments not completely read - -Return values -~~~~~~~~~~~~~ - - 0 Success - ERAR_END_ARCHIVE End of archive - ERAR_BAD_DATA File header broken - - -==================================================================== -int PASCAL RARReadHeaderEx(HANDLE hArcData, - struct RARHeaderDataEx *HeaderData) -==================================================================== - -Description -~~~~~~~~~~~ - Similar to RARReadHeader, but uses RARHeaderDataEx structure, -containing information about Unicode file names and 64 bit file sizes. - -struct RARHeaderDataEx -{ - char ArcName[1024]; - wchar_t ArcNameW[1024]; - char FileName[1024]; - wchar_t FileNameW[1024]; - unsigned int Flags; - unsigned int PackSize; - unsigned int PackSizeHigh; - unsigned int UnpSize; - unsigned int UnpSizeHigh; - unsigned int HostOS; - unsigned int FileCRC; - unsigned int FileTime; - unsigned int UnpVer; - unsigned int Method; - unsigned int FileAttr; - char *CmtBuf; - unsigned int CmtBufSize; - unsigned int CmtSize; - unsigned int CmtState; - unsigned int Reserved[1024]; -}; - - -==================================================================== -int PASCAL RARProcessFile(HANDLE hArcData, - int Operation, - char *DestPath, - char *DestName) -==================================================================== - -Description -~~~~~~~~~~~ - Performs action and moves the current position in the archive to - the next file. Extract or test the current file from the archive - opened in RAR_OM_EXTRACT mode. If the mode RAR_OM_LIST is set, - then a call to this function will simply skip the archive position - to the next file. - -Parameters -~~~~~~~~~~ -hArcData - This parameter should contain the archive handle obtained from the - RAROpenArchive function call. - -Operation - File operation. - - Possible values - - RAR_SKIP Move to the next file in the archive. If the - archive is solid and RAR_OM_EXTRACT mode was set - when the archive was opened, the current file will - be processed - the operation will be performed - slower than a simple seek. - - RAR_TEST Test the current file and move to the next file in - the archive. If the archive was opened with - RAR_OM_LIST mode, the operation is equal to - RAR_SKIP. - - RAR_EXTRACT Extract the current file and move to the next file. - If the archive was opened with RAR_OM_LIST mode, - the operation is equal to RAR_SKIP. - - -DestPath - This parameter should point to a zero terminated string containing the - destination directory to which to extract files to. If DestPath is equal - to NULL, it means extract to the current directory. This parameter has - meaning only if DestName is NULL. - -DestName - This parameter should point to a string containing the full path and name - to assign to extracted file or it can be NULL to use the default name. - If DestName is defined (not NULL), it overrides both the original file - name saved in the archive and path specigied in DestPath setting. - - Both DestPath and DestName must be in OEM encoding. If necessary, - use CharToOem to convert text to OEM before passing to this function. - -Return values -~~~~~~~~~~~~~ - 0 Success - ERAR_BAD_DATA File CRC error - ERAR_BAD_ARCHIVE Volume is not valid RAR archive - ERAR_UNKNOWN_FORMAT Unknown archive format - ERAR_EOPEN Volume open error - ERAR_ECREATE File create error - ERAR_ECLOSE File close error - ERAR_EREAD Read error - ERAR_EWRITE Write error - - -Note: if you wish to cancel extraction, return -1 when processing - UCM_PROCESSDATA callback message. - - -==================================================================== -int PASCAL RARProcessFileW(HANDLE hArcData, - int Operation, - wchar_t *DestPath, - wchar_t *DestName) -==================================================================== - -Description -~~~~~~~~~~~ - Unicode version of RARProcessFile. It uses Unicode DestPath - and DestName parameters, other parameters and return values - are the same as in RARProcessFile. - - -==================================================================== -void PASCAL RARSetCallback(HANDLE hArcData, - int PASCAL (*CallbackProc)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2), - LPARAM UserData); -==================================================================== - -Description -~~~~~~~~~~~ - Set a user-defined callback function to process Unrar events. - -Parameters -~~~~~~~~~~ -hArcData - This parameter should contain the archive handle obtained from the - RAROpenArchive function call. - -CallbackProc - It should point to a user-defined callback function. - - The function will be passed four parameters: - - - msg Type of event. Described below. - - UserData User defined value passed to RARSetCallback. - - P1 and P2 Event dependent parameters. Described below. - - - Possible events - - UCM_CHANGEVOLUME Process volume change. - - P1 Points to the zero terminated name - of the next volume. - - P2 The function call mode: - - RAR_VOL_ASK Required volume is absent. The function should - prompt user and return a positive value - to retry or return -1 value to terminate - operation. The function may also specify a new - volume name, placing it to the address specified - by P1 parameter. - - RAR_VOL_NOTIFY Required volume is successfully opened. - This is a notification call and volume name - modification is not allowed. The function should - return a positive value to continue or -1 - to terminate operation. - - UCM_PROCESSDATA Process unpacked data. It may be used to read - a file while it is being extracted or tested - without actual extracting file to disk. - Return a positive value to continue process - or -1 to cancel the archive operation - - P1 Address pointing to the unpacked data. - Function may refer to the data but must not - change it. - - P2 Size of the unpacked data. It is guaranteed - only that the size will not exceed the maximum - dictionary size (4 Mb in RAR 3.0). - - UCM_NEEDPASSWORD DLL needs a password to process archive. - This message must be processed if you wish - to be able to handle archives with encrypted - file names. It can be also used as replacement - of RARSetPassword function even for usual - encrypted files with non-encrypted names. - - P1 Address pointing to the buffer for a password. - You need to copy a password here. - - P2 Size of the password buffer. - - -UserData - User data passed to callback function. - - Other functions of UnRAR.dll should not be called from the callback - function. - -Return values -~~~~~~~~~~~~~ - None - - - -==================================================================== -void PASCAL RARSetChangeVolProc(HANDLE hArcData, - int PASCAL (*ChangeVolProc)(char *ArcName,int Mode)); -==================================================================== - -Obsoleted, use RARSetCallback instead. - - - -==================================================================== -void PASCAL RARSetProcessDataProc(HANDLE hArcData, - int PASCAL (*ProcessDataProc)(unsigned char *Addr,int Size)) -==================================================================== - -Obsoleted, use RARSetCallback instead. - - -==================================================================== -void PASCAL RARSetPassword(HANDLE hArcData, - char *Password); -==================================================================== - -Description -~~~~~~~~~~~ - Set a password to decrypt files. - -Parameters -~~~~~~~~~~ -hArcData - This parameter should contain the archive handle obtained from the - RAROpenArchive function call. - -Password - It should point to a string containing a zero terminated password. - -Return values -~~~~~~~~~~~~~ - None - - -==================================================================== -void PASCAL RARGetDllVersion(); -==================================================================== - -Description -~~~~~~~~~~~ - Returns API version. - -Parameters -~~~~~~~~~~ - None. - -Return values -~~~~~~~~~~~~~ - Returns an integer value denoting UnRAR.dll API version, which is also -defined in unrar.h as RAR_DLL_VERSION. API version number is incremented -only in case of noticeable changes in UnRAR.dll API. Do not confuse it -with version of UnRAR.dll stored in DLL resources, which is incremented -with every DLL rebuild. - - If RARGetDllVersion() returns a value lower than UnRAR.dll which your -application was designed for, it may indicate that DLL version is too old -and it will fail to provide all necessary functions to your application. - - This function is absent in old versions of UnRAR.dll, so it is safer -to use LoadLibrary and GetProcAddress to access this function. - + + UnRAR.dll Manual + ~~~~~~~~~~~~~~~~ + + UnRAR.dll is a 32-bit Windows dynamic-link library which provides + file extraction from RAR archives. + + + Exported functions + +==================================================================== +HANDLE PASCAL RAROpenArchive(struct RAROpenArchiveData *ArchiveData) +==================================================================== + +Description +~~~~~~~~~~~ + Open RAR archive and allocate memory structures + +Parameters +~~~~~~~~~~ +ArchiveData Points to RAROpenArchiveData structure + +struct RAROpenArchiveData +{ + char *ArcName; + UINT OpenMode; + UINT OpenResult; + char *CmtBuf; + UINT CmtBufSize; + UINT CmtSize; + UINT CmtState; +}; + +Structure fields: + +ArcName + Input parameter which should point to zero terminated string + containing the archive name. + +OpenMode + Input parameter. + + Possible values + + RAR_OM_LIST + Open archive for reading file headers only. + + RAR_OM_EXTRACT + Open archive for testing and extracting files. + + RAR_OM_LIST_INCSPLIT + Open archive for reading file headers only. If you open an archive + in such mode, RARReadHeader[Ex] will return all file headers, + including those with "file continued from previous volume" flag. + In case of RAR_OM_LIST such headers are automatically skipped. + So if you process RAR volumes in RAR_OM_LIST_INCSPLIT mode, you will + get several file header records for same file if file is split between + volumes. For such files only the last file header record will contain + the correct file CRC and if you wish to get the correct packed size, + you need to sum up packed sizes of all parts. + +OpenResult + Output parameter. + + Possible values + + 0 Success + ERAR_NO_MEMORY Not enough memory to initialize data structures + ERAR_BAD_DATA Archive header broken + ERAR_BAD_ARCHIVE File is not valid RAR archive + ERAR_UNKNOWN_FORMAT Unknown encryption used for archive headers + ERAR_EOPEN File open error + +CmtBuf + Input parameter which should point to the buffer for archive + comments. Maximum comment size is limited to 64Kb. Comment text is + zero terminated. If the comment text is larger than the buffer + size, the comment text will be truncated. If CmtBuf is set to + NULL, comments will not be read. + +CmtBufSize + Input parameter which should contain size of buffer for archive + comments. + +CmtSize + Output parameter containing size of comments actually read into the + buffer, cannot exceed CmtBufSize. + +CmtState + Output parameter. + + Possible values + + 0 comments not present + 1 Comments read completely + ERAR_NO_MEMORY Not enough memory to extract comments + ERAR_BAD_DATA Broken comment + ERAR_UNKNOWN_FORMAT Unknown comment format + ERAR_SMALL_BUF Buffer too small, comments not completely read + +Return values +~~~~~~~~~~~~~ + Archive handle or NULL in case of error + + +======================================================================== +HANDLE PASCAL RAROpenArchiveEx(struct RAROpenArchiveDataEx *ArchiveData) +======================================================================== + +Description +~~~~~~~~~~~ + Similar to RAROpenArchive, but uses RAROpenArchiveDataEx structure + allowing to specify Unicode archive name and returning information + about archive flags. + +Parameters +~~~~~~~~~~ +ArchiveData Points to RAROpenArchiveDataEx structure + +struct RAROpenArchiveDataEx +{ + char *ArcName; + wchar_t *ArcNameW; + unsigned int OpenMode; + unsigned int OpenResult; + char *CmtBuf; + unsigned int CmtBufSize; + unsigned int CmtSize; + unsigned int CmtState; + unsigned int Flags; + unsigned int Reserved[32]; +}; + +Structure fields: + +ArcNameW + Input parameter which should point to zero terminated Unicode string + containing the archive name or NULL if Unicode name is not specified. + +Flags + Output parameter. Combination of bit flags. + + Possible values + + 0x0001 - Volume attribute (archive volume) + 0x0002 - Archive comment present + 0x0004 - Archive lock attribute + 0x0008 - Solid attribute (solid archive) + 0x0010 - New volume naming scheme ('volname.partN.rar') + 0x0020 - Authenticity information present + 0x0040 - Recovery record present + 0x0080 - Block headers are encrypted + 0x0100 - First volume (set only by RAR 3.0 and later) + +Reserved[32] + Reserved for future use. Must be zero. + +Information on other structure fields and function return values +is available above, in RAROpenArchive function description. + + +==================================================================== +int PASCAL RARCloseArchive(HANDLE hArcData) +==================================================================== + +Description +~~~~~~~~~~~ + Close RAR archive and release allocated memory. It must be called when + archive processing is finished, even if the archive processing was stopped + due to an error. + +Parameters +~~~~~~~~~~ +hArcData + This parameter should contain the archive handle obtained from the + RAROpenArchive function call. + +Return values +~~~~~~~~~~~~~ + 0 Success + ERAR_ECLOSE Archive close error + + +==================================================================== +int PASCAL RARReadHeader(HANDLE hArcData, + struct RARHeaderData *HeaderData) +==================================================================== + +Description +~~~~~~~~~~~ + Read header of file in archive. + +Parameters +~~~~~~~~~~ +hArcData + This parameter should contain the archive handle obtained from the + RAROpenArchive function call. + +HeaderData + It should point to RARHeaderData structure: + +struct RARHeaderData +{ + char ArcName[260]; + char FileName[260]; + UINT Flags; + UINT PackSize; + UINT UnpSize; + UINT HostOS; + UINT FileCRC; + UINT FileTime; + UINT UnpVer; + UINT Method; + UINT FileAttr; + char *CmtBuf; + UINT CmtBufSize; + UINT CmtSize; + UINT CmtState; +}; + +Structure fields: + +ArcName + Output parameter which contains a zero terminated string of the + current archive name. May be used to determine the current volume + name. + +FileName + Output parameter which contains a zero terminated string of the + file name in OEM (DOS) encoding. + +Flags + Output parameter which contains file flags: + + 0x01 - file continued from previous volume + 0x02 - file continued on next volume + 0x04 - file encrypted with password + 0x08 - file comment present + 0x10 - compression of previous files is used (solid flag) + + bits 7 6 5 + + 0 0 0 - dictionary size 64 Kb + 0 0 1 - dictionary size 128 Kb + 0 1 0 - dictionary size 256 Kb + 0 1 1 - dictionary size 512 Kb + 1 0 0 - dictionary size 1024 Kb + 1 0 1 - dictionary size 2048 KB + 1 1 0 - dictionary size 4096 KB + 1 1 1 - file is directory + + Other bits are reserved. + +PackSize + Output parameter means packed file size or size of the + file part if file was split between volumes. + +UnpSize + Output parameter - unpacked file size. + +HostOS + Output parameter - operating system used for archiving: + + 0 - MS DOS; + 1 - OS/2. + 2 - Win32 + 3 - Unix + +FileCRC + Output parameter which contains unpacked file CRC. In case of file parts + split between volumes only the last part contains the correct CRC + and it is accessible only in RAR_OM_LIST_INCSPLIT listing mode. + +FileTime + Output parameter - contains date and time in standard MS DOS format. + +UnpVer + Output parameter - RAR version needed to extract file. + It is encoded as 10 * Major version + minor version. + +Method + Output parameter - packing method. + +FileAttr + Output parameter - file attributes. + +CmtBuf + File comments support is not implemented in the new DLL version yet. + Now CmtState is always 0. + +/* + * Input parameter which should point to the buffer for file + * comments. Maximum comment size is limited to 64Kb. Comment text is + * a zero terminated string in OEM encoding. If the comment text is + * larger than the buffer size, the comment text will be truncated. + * If CmtBuf is set to NULL, comments will not be read. + */ + +CmtBufSize + Input parameter which should contain size of buffer for archive + comments. + +CmtSize + Output parameter containing size of comments actually read into the + buffer, should not exceed CmtBufSize. + +CmtState + Output parameter. + + Possible values + + 0 Absent comments + 1 Comments read completely + ERAR_NO_MEMORY Not enough memory to extract comments + ERAR_BAD_DATA Broken comment + ERAR_UNKNOWN_FORMAT Unknown comment format + ERAR_SMALL_BUF Buffer too small, comments not completely read + +Return values +~~~~~~~~~~~~~ + + 0 Success + ERAR_END_ARCHIVE End of archive + ERAR_BAD_DATA File header broken + + +==================================================================== +int PASCAL RARReadHeaderEx(HANDLE hArcData, + struct RARHeaderDataEx *HeaderData) +==================================================================== + +Description +~~~~~~~~~~~ + Similar to RARReadHeader, but uses RARHeaderDataEx structure, +containing information about Unicode file names and 64 bit file sizes. + +struct RARHeaderDataEx +{ + char ArcName[1024]; + wchar_t ArcNameW[1024]; + char FileName[1024]; + wchar_t FileNameW[1024]; + unsigned int Flags; + unsigned int PackSize; + unsigned int PackSizeHigh; + unsigned int UnpSize; + unsigned int UnpSizeHigh; + unsigned int HostOS; + unsigned int FileCRC; + unsigned int FileTime; + unsigned int UnpVer; + unsigned int Method; + unsigned int FileAttr; + char *CmtBuf; + unsigned int CmtBufSize; + unsigned int CmtSize; + unsigned int CmtState; + unsigned int Reserved[1024]; +}; + + +==================================================================== +int PASCAL RARProcessFile(HANDLE hArcData, + int Operation, + char *DestPath, + char *DestName) +==================================================================== + +Description +~~~~~~~~~~~ + Performs action and moves the current position in the archive to + the next file. Extract or test the current file from the archive + opened in RAR_OM_EXTRACT mode. If the mode RAR_OM_LIST is set, + then a call to this function will simply skip the archive position + to the next file. + +Parameters +~~~~~~~~~~ +hArcData + This parameter should contain the archive handle obtained from the + RAROpenArchive function call. + +Operation + File operation. + + Possible values + + RAR_SKIP Move to the next file in the archive. If the + archive is solid and RAR_OM_EXTRACT mode was set + when the archive was opened, the current file will + be processed - the operation will be performed + slower than a simple seek. + + RAR_TEST Test the current file and move to the next file in + the archive. If the archive was opened with + RAR_OM_LIST mode, the operation is equal to + RAR_SKIP. + + RAR_EXTRACT Extract the current file and move to the next file. + If the archive was opened with RAR_OM_LIST mode, + the operation is equal to RAR_SKIP. + + +DestPath + This parameter should point to a zero terminated string containing the + destination directory to which to extract files to. If DestPath is equal + to NULL, it means extract to the current directory. This parameter has + meaning only if DestName is NULL. + +DestName + This parameter should point to a string containing the full path and name + to assign to extracted file or it can be NULL to use the default name. + If DestName is defined (not NULL), it overrides both the original file + name saved in the archive and path specigied in DestPath setting. + + Both DestPath and DestName must be in OEM encoding. If necessary, + use CharToOem to convert text to OEM before passing to this function. + +Return values +~~~~~~~~~~~~~ + 0 Success + ERAR_BAD_DATA File CRC error + ERAR_BAD_ARCHIVE Volume is not valid RAR archive + ERAR_UNKNOWN_FORMAT Unknown archive format + ERAR_EOPEN Volume open error + ERAR_ECREATE File create error + ERAR_ECLOSE File close error + ERAR_EREAD Read error + ERAR_EWRITE Write error + + +Note: if you wish to cancel extraction, return -1 when processing + UCM_PROCESSDATA callback message. + + +==================================================================== +int PASCAL RARProcessFileW(HANDLE hArcData, + int Operation, + wchar_t *DestPath, + wchar_t *DestName) +==================================================================== + +Description +~~~~~~~~~~~ + Unicode version of RARProcessFile. It uses Unicode DestPath + and DestName parameters, other parameters and return values + are the same as in RARProcessFile. + + +==================================================================== +void PASCAL RARSetCallback(HANDLE hArcData, + int PASCAL (*CallbackProc)(UINT msg,LPARAM UserData,LPARAM P1,LPARAM P2), + LPARAM UserData); +==================================================================== + +Description +~~~~~~~~~~~ + Set a user-defined callback function to process Unrar events. + +Parameters +~~~~~~~~~~ +hArcData + This parameter should contain the archive handle obtained from the + RAROpenArchive function call. + +CallbackProc + It should point to a user-defined callback function. + + The function will be passed four parameters: + + + msg Type of event. Described below. + + UserData User defined value passed to RARSetCallback. + + P1 and P2 Event dependent parameters. Described below. + + + Possible events + + UCM_CHANGEVOLUME Process volume change. + + P1 Points to the zero terminated name + of the next volume. + + P2 The function call mode: + + RAR_VOL_ASK Required volume is absent. The function should + prompt user and return a positive value + to retry or return -1 value to terminate + operation. The function may also specify a new + volume name, placing it to the address specified + by P1 parameter. + + RAR_VOL_NOTIFY Required volume is successfully opened. + This is a notification call and volume name + modification is not allowed. The function should + return a positive value to continue or -1 + to terminate operation. + + UCM_PROCESSDATA Process unpacked data. It may be used to read + a file while it is being extracted or tested + without actual extracting file to disk. + Return a positive value to continue process + or -1 to cancel the archive operation + + P1 Address pointing to the unpacked data. + Function may refer to the data but must not + change it. + + P2 Size of the unpacked data. It is guaranteed + only that the size will not exceed the maximum + dictionary size (4 Mb in RAR 3.0). + + UCM_NEEDPASSWORD DLL needs a password to process archive. + This message must be processed if you wish + to be able to handle archives with encrypted + file names. It can be also used as replacement + of RARSetPassword function even for usual + encrypted files with non-encrypted names. + + P1 Address pointing to the buffer for a password. + You need to copy a password here. + + P2 Size of the password buffer. + + +UserData + User data passed to callback function. + + Other functions of UnRAR.dll should not be called from the callback + function. + +Return values +~~~~~~~~~~~~~ + None + + + +==================================================================== +void PASCAL RARSetChangeVolProc(HANDLE hArcData, + int PASCAL (*ChangeVolProc)(char *ArcName,int Mode)); +==================================================================== + +Obsoleted, use RARSetCallback instead. + + + +==================================================================== +void PASCAL RARSetProcessDataProc(HANDLE hArcData, + int PASCAL (*ProcessDataProc)(unsigned char *Addr,int Size)) +==================================================================== + +Obsoleted, use RARSetCallback instead. + + +==================================================================== +void PASCAL RARSetPassword(HANDLE hArcData, + char *Password); +==================================================================== + +Description +~~~~~~~~~~~ + Set a password to decrypt files. + +Parameters +~~~~~~~~~~ +hArcData + This parameter should contain the archive handle obtained from the + RAROpenArchive function call. + +Password + It should point to a string containing a zero terminated password. + +Return values +~~~~~~~~~~~~~ + None + + +==================================================================== +void PASCAL RARGetDllVersion(); +==================================================================== + +Description +~~~~~~~~~~~ + Returns API version. + +Parameters +~~~~~~~~~~ + None. + +Return values +~~~~~~~~~~~~~ + Returns an integer value denoting UnRAR.dll API version, which is also +defined in unrar.h as RAR_DLL_VERSION. API version number is incremented +only in case of noticeable changes in UnRAR.dll API. Do not confuse it +with version of UnRAR.dll stored in DLL resources, which is incremented +with every DLL rebuild. + + If RARGetDllVersion() returns a value lower than UnRAR.dll which your +application was designed for, it may indicate that DLL version is too old +and it will fail to provide all necessary functions to your application. + + This function is absent in old versions of UnRAR.dll, so it is safer +to use LoadLibrary and GetProcAddress to access this function. + diff --git a/lib/unrar2/UnRARDLL/whatsnew.txt b/lib/unrar2/UnRARDLL/whatsnew.txt index 874d19b1..84ad72cb 100644 --- a/lib/unrar2/UnRARDLL/whatsnew.txt +++ b/lib/unrar2/UnRARDLL/whatsnew.txt @@ -1,80 +1,80 @@ -List of unrar.dll API changes. We do not include performance and reliability -improvements into this list, but this library and RAR/UnRAR tools share -the same source code. So the latest version of unrar.dll usually contains -same decompression algorithm changes as the latest UnRAR version. -============================================================================ - --- 18 January 2008 - -all LONG parameters of CallbackProc function were changed -to LPARAM type for 64 bit mode compatibility. - - --- 12 December 2007 - -Added new RAR_OM_LIST_INCSPLIT open mode for function RAROpenArchive. - - --- 14 August 2007 - -Added NoCrypt\unrar_nocrypt.dll without decryption code for those -applications where presence of encryption or decryption code is not -allowed because of legal restrictions. - - --- 14 December 2006 - -Added ERAR_MISSING_PASSWORD error type. This error is returned -if empty password is specified for encrypted file. - - --- 12 June 2003 - -Added RARProcessFileW function, Unicode version of RARProcessFile - - --- 9 August 2002 - -Added RAROpenArchiveEx function allowing to specify Unicode archive -name and get archive flags. - - --- 24 January 2002 - -Added RARReadHeaderEx function allowing to read Unicode file names -and 64 bit file sizes. - - --- 23 January 2002 - -Added ERAR_UNKNOWN error type (it is used for all errors which -do not have special ERAR code yet) and UCM_NEEDPASSWORD callback -message. - -Unrar.dll automatically opens all next volumes not only when extracting, -but also in RAR_OM_LIST mode. - - --- 27 November 2001 - -RARSetChangeVolProc and RARSetProcessDataProc are replaced by -the single callback function installed with RARSetCallback. -Unlike old style callbacks, the new function accepts the user defined -parameter. Unrar.dll still supports RARSetChangeVolProc and -RARSetProcessDataProc for compatibility purposes, but if you write -a new application, better use RARSetCallback. - -File comments support is not implemented in the new DLL version yet. -Now CmtState is always 0. - - --- 13 August 2001 - -Added RARGetDllVersion function, so you may distinguish old unrar.dll, -which used C style callback functions and the new one with PASCAL callbacks. - - --- 10 May 2001 - -Callback functions in RARSetChangeVolProc and RARSetProcessDataProc -use PASCAL style call convention now. +List of unrar.dll API changes. We do not include performance and reliability +improvements into this list, but this library and RAR/UnRAR tools share +the same source code. So the latest version of unrar.dll usually contains +same decompression algorithm changes as the latest UnRAR version. +============================================================================ + +-- 18 January 2008 + +all LONG parameters of CallbackProc function were changed +to LPARAM type for 64 bit mode compatibility. + + +-- 12 December 2007 + +Added new RAR_OM_LIST_INCSPLIT open mode for function RAROpenArchive. + + +-- 14 August 2007 + +Added NoCrypt\unrar_nocrypt.dll without decryption code for those +applications where presence of encryption or decryption code is not +allowed because of legal restrictions. + + +-- 14 December 2006 + +Added ERAR_MISSING_PASSWORD error type. This error is returned +if empty password is specified for encrypted file. + + +-- 12 June 2003 + +Added RARProcessFileW function, Unicode version of RARProcessFile + + +-- 9 August 2002 + +Added RAROpenArchiveEx function allowing to specify Unicode archive +name and get archive flags. + + +-- 24 January 2002 + +Added RARReadHeaderEx function allowing to read Unicode file names +and 64 bit file sizes. + + +-- 23 January 2002 + +Added ERAR_UNKNOWN error type (it is used for all errors which +do not have special ERAR code yet) and UCM_NEEDPASSWORD callback +message. + +Unrar.dll automatically opens all next volumes not only when extracting, +but also in RAR_OM_LIST mode. + + +-- 27 November 2001 + +RARSetChangeVolProc and RARSetProcessDataProc are replaced by +the single callback function installed with RARSetCallback. +Unlike old style callbacks, the new function accepts the user defined +parameter. Unrar.dll still supports RARSetChangeVolProc and +RARSetProcessDataProc for compatibility purposes, but if you write +a new application, better use RARSetCallback. + +File comments support is not implemented in the new DLL version yet. +Now CmtState is always 0. + + +-- 13 August 2001 + +Added RARGetDllVersion function, so you may distinguish old unrar.dll, +which used C style callback functions and the new one with PASCAL callbacks. + + +-- 10 May 2001 + +Callback functions in RARSetChangeVolProc and RARSetProcessDataProc +use PASCAL style call convention now. diff --git a/lib/unrar2/UnRARDLL/x64/readme.txt b/lib/unrar2/UnRARDLL/x64/readme.txt index bbfb340d..8f3b4e10 100644 --- a/lib/unrar2/UnRARDLL/x64/readme.txt +++ b/lib/unrar2/UnRARDLL/x64/readme.txt @@ -1 +1 @@ -This is x64 version of unrar.dll. +This is x64 version of unrar.dll. diff --git a/lib/unrar2/[test].rar b/lib/unrar2/[test].rar new file mode 100644 index 0000000000000000000000000000000000000000..1498d2ce20077a8ce0fca15faeb26d8f54273f86 GIT binary patch literal 84 zcmWGaEK-zWXE;Bhn1O+p0Rj&EC{dW8&%g!bfiP3FqoMu6UDkH823!mZK!NCz)Z&s@ ay^@L&h7BAmOF=wdE)aRdwwl3#odEzI&J^_k literal 0 HcmV?d00001 diff --git a/lib/unrar2/[test].txt b/lib/unrar2/[test].txt new file mode 100644 index 00000000..ce3f303d --- /dev/null +++ b/lib/unrar2/[test].txt @@ -0,0 +1,2 @@ +test +test \ No newline at end of file diff --git a/lib/unrar2/__init__.py b/lib/unrar2/__init__.py index fe27cfe1..516a82f4 100644 --- a/lib/unrar2/__init__.py +++ b/lib/unrar2/__init__.py @@ -1,177 +1,180 @@ -# Copyright (c) 2003-2005 Jimmy Retzlaff, 2008 Konstantin Yegupov -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -""" -pyUnRAR2 is a ctypes based wrapper around the free UnRAR.dll. - -It is an modified version of Jimmy Retzlaff's pyUnRAR - more simple, -stable and foolproof. -Notice that it has INCOMPATIBLE interface. - -It enables reading and unpacking of archives created with the -RAR/WinRAR archivers. There is a low-level interface which is very -similar to the C interface provided by UnRAR. There is also a -higher level interface which makes some common operations easier. -""" - -__version__ = '0.99.3' - -try: - WindowsError - in_windows = True -except NameError: - in_windows = False - -if in_windows: - from windows import RarFileImplementation -else: - from unix import RarFileImplementation - - -import fnmatch, time, weakref - -class RarInfo(object): - """Represents a file header in an archive. Don't instantiate directly. - Use only to obtain information about file. - YOU CANNOT EXTRACT FILE CONTENTS USING THIS OBJECT. - USE METHODS OF RarFile CLASS INSTEAD. - - Properties: - index - index of file within the archive - filename - name of the file in the archive including path (if any) - datetime - file date/time as a struct_time suitable for time.strftime - isdir - True if the file is a directory - size - size in bytes of the uncompressed file - comment - comment associated with the file - - Note - this is not currently intended to be a Python file-like object. - """ - - def __init__(self, rarfile, data): - self.rarfile = weakref.proxy(rarfile) - self.index = data['index'] - self.filename = data['filename'] - self.isdir = data['isdir'] - self.size = data['size'] - self.datetime = data['datetime'] - self.comment = data['comment'] - - - - def __str__(self): - try : - arcName = self.rarfile.archiveName - except ReferenceError: - arcName = "[ARCHIVE_NO_LONGER_LOADED]" - return '' % (self.filename, arcName) - -class RarFile(RarFileImplementation): - - def __init__(self, archiveName, password=None): - """Instantiate the archive. - - archiveName is the name of the RAR file. - password is used to decrypt the files in the archive. - - Properties: - comment - comment associated with the archive - - >>> print RarFile('test.rar').comment - This is a test. - """ - self.archiveName = archiveName - RarFileImplementation.init(self, password) - - def __del__(self): - self.destruct() - - def infoiter(self): - """Iterate over all the files in the archive, generating RarInfos. - - >>> import os - >>> for fileInArchive in RarFile('test.rar').infoiter(): - ... print os.path.split(fileInArchive.filename)[-1], - ... print fileInArchive.isdir, - ... print fileInArchive.size, - ... print fileInArchive.comment, - ... print tuple(fileInArchive.datetime)[0:5], - ... print time.strftime('%a, %d %b %Y %H:%M', fileInArchive.datetime) - test True 0 None (2003, 6, 30, 1, 59) Mon, 30 Jun 2003 01:59 - test.txt False 20 None (2003, 6, 30, 2, 1) Mon, 30 Jun 2003 02:01 - this.py False 1030 None (2002, 2, 8, 16, 47) Fri, 08 Feb 2002 16:47 - """ - for params in RarFileImplementation.infoiter(self): - yield RarInfo(self, params) - - def infolist(self): - """Return a list of RarInfos, descripting the contents of the archive.""" - return list(self.infoiter()) - - def read_files(self, condition='*'): - """Read specific files from archive into memory. - If "condition" is a list of numbers, then return files which have those positions in infolist. - If "condition" is a string, then it is treated as a wildcard for names of files to extract. - If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object - and returns boolean True (extract) or False (skip). - If "condition" is omitted, all files are returned. - - Returns list of tuples (RarInfo info, str contents) - """ - checker = condition2checker(condition) - return RarFileImplementation.read_files(self, checker) - - - def extract(self, condition='*', path='.', withSubpath=True, overwrite=True): - """Extract specific files from archive to disk. - - If "condition" is a list of numbers, then extract files which have those positions in infolist. - If "condition" is a string, then it is treated as a wildcard for names of files to extract. - If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object - and returns either boolean True (extract) or boolean False (skip). - DEPRECATED: If "condition" callback returns string (only supported for Windows) - - that string will be used as a new name to save the file under. - If "condition" is omitted, all files are extracted. - - "path" is a directory to extract to - "withSubpath" flag denotes whether files are extracted with their full path in the archive. - "overwrite" flag denotes whether extracted files will overwrite old ones. Defaults to true. - - Returns list of RarInfos for extracted files.""" - checker = condition2checker(condition) - return RarFileImplementation.extract(self, checker, path, withSubpath, overwrite) - -def condition2checker(condition): - """Converts different condition types to callback""" - if type(condition) in [str, unicode]: - def smatcher(info): - return fnmatch.fnmatch(info.filename, condition) - return smatcher - elif type(condition) in [list, tuple] and type(condition[0]) in [int, long]: - def imatcher(info): - return info.index in condition - return imatcher - elif callable(condition): - return condition - else: - raise TypeError - - +# Copyright (c) 2003-2005 Jimmy Retzlaff, 2008 Konstantin Yegupov +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +pyUnRAR2 is a ctypes based wrapper around the free UnRAR.dll. + +It is an modified version of Jimmy Retzlaff's pyUnRAR - more simple, +stable and foolproof. +Notice that it has INCOMPATIBLE interface. + +It enables reading and unpacking of archives created with the +RAR/WinRAR archivers. There is a low-level interface which is very +similar to the C interface provided by UnRAR. There is also a +higher level interface which makes some common operations easier. +""" + +__version__ = '0.99.6' + +try: + WindowsError + in_windows = True +except NameError: + in_windows = False + +if in_windows: + from windows import RarFileImplementation +else: + from unix import RarFileImplementation + + +import fnmatch, time, weakref + +class RarInfo(object): + """Represents a file header in an archive. Don't instantiate directly. + Use only to obtain information about file. + YOU CANNOT EXTRACT FILE CONTENTS USING THIS OBJECT. + USE METHODS OF RarFile CLASS INSTEAD. + + Properties: + index - index of file within the archive + filename - name of the file in the archive including path (if any) + datetime - file date/time as a struct_time suitable for time.strftime + isdir - True if the file is a directory + size - size in bytes of the uncompressed file + comment - comment associated with the file + + Note - this is not currently intended to be a Python file-like object. + """ + + def __init__(self, rarfile, data): + self.rarfile = weakref.proxy(rarfile) + self.index = data['index'] + self.filename = data['filename'] + self.isdir = data['isdir'] + self.size = data['size'] + self.datetime = data['datetime'] + self.comment = data['comment'] + + def __str__(self): + try : + arcName = self.rarfile.archiveName + except ReferenceError: + arcName = "[ARCHIVE_NO_LONGER_LOADED]" + return '' % (self.filename, arcName) + +class RarFile(RarFileImplementation): + + def __init__(self, archiveName, password=None): + """Instantiate the archive. + + archiveName is the name of the RAR file. + password is used to decrypt the files in the archive. + + Properties: + comment - comment associated with the archive + + >>> print RarFile('test.rar').comment + This is a test. + """ + self.archiveName = archiveName + RarFileImplementation.init(self, password) + + def __del__(self): + self.destruct() + + def infoiter(self): + """Iterate over all the files in the archive, generating RarInfos. + + >>> import os + >>> for fileInArchive in RarFile('test.rar').infoiter(): + ... print os.path.split(fileInArchive.filename)[-1], + ... print fileInArchive.isdir, + ... print fileInArchive.size, + ... print fileInArchive.comment, + ... print tuple(fileInArchive.datetime)[0:5], + ... print time.strftime('%a, %d %b %Y %H:%M', fileInArchive.datetime) + test True 0 None (2003, 6, 30, 1, 59) Mon, 30 Jun 2003 01:59 + test.txt False 20 None (2003, 6, 30, 2, 1) Mon, 30 Jun 2003 02:01 + this.py False 1030 None (2002, 2, 8, 16, 47) Fri, 08 Feb 2002 16:47 + """ + for params in RarFileImplementation.infoiter(self): + yield RarInfo(self, params) + + def infolist(self): + """Return a list of RarInfos, descripting the contents of the archive.""" + return list(self.infoiter()) + + def read_files(self, condition='*'): + """Read specific files from archive into memory. + If "condition" is a list of numbers, then return files which have those positions in infolist. + If "condition" is a string, then it is treated as a wildcard for names of files to extract. + If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object + and returns boolean True (extract) or False (skip). + If "condition" is omitted, all files are returned. + + Returns list of tuples (RarInfo info, str contents) + """ + checker = condition2checker(condition) + return RarFileImplementation.read_files(self, checker) + + + def extract(self, condition='*', path='.', withSubpath=True, overwrite=True): + """Extract specific files from archive to disk. + + If "condition" is a list of numbers, then extract files which have those positions in infolist. + If "condition" is a string, then it is treated as a wildcard for names of files to extract. + If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object + and returns either boolean True (extract) or boolean False (skip). + DEPRECATED: If "condition" callback returns string (only supported for Windows) - + that string will be used as a new name to save the file under. + If "condition" is omitted, all files are extracted. + + "path" is a directory to extract to + "withSubpath" flag denotes whether files are extracted with their full path in the archive. + "overwrite" flag denotes whether extracted files will overwrite old ones. Defaults to true. + + Returns list of RarInfos for extracted files.""" + checker = condition2checker(condition) + return RarFileImplementation.extract(self, checker, path, withSubpath, overwrite) + + def get_volume(self): + """Determine which volume is it in a multi-volume archive. Returns None if it's not a + multi-volume archive, 0-based volume number otherwise.""" + return RarFileImplementation.get_volume(self) + +def condition2checker(condition): + """Converts different condition types to callback""" + if type(condition) in [str, unicode]: + def smatcher(info): + return fnmatch.fnmatch(info.filename, condition) + return smatcher + elif type(condition) in [list, tuple] and type(condition[0]) in [int, long]: + def imatcher(info): + return info.index in condition + return imatcher + elif callable(condition): + return condition + else: + raise TypeError + + diff --git a/lib/unrar2/license.txt b/lib/unrar2/license.txt index a395801b..121b2f14 100644 --- a/lib/unrar2/license.txt +++ b/lib/unrar2/license.txt @@ -1,21 +1,21 @@ -Copyright (c) 2003-2005 Jimmy Retzlaff, 2008 Konstantin Yegupov - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +Copyright (c) 2003-2005 Jimmy Retzlaff, 2008 Konstantin Yegupov + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/lib/unrar2/setup.py b/lib/unrar2/setup.py index 7fab60fe..99a07fc8 100644 --- a/lib/unrar2/setup.py +++ b/lib/unrar2/setup.py @@ -1,54 +1,54 @@ -# setup.py, config file for distutils - -import __init__ - -from distutils.core import setup -from distutils.command.install_data import install_data -import os - - -class smart_install_data(install_data): - def run(self): - #need to change self.install_dir to the actual library dir - install_cmd = self.get_finalized_command('install') - self.install_dir = getattr(install_cmd, 'install_lib') - return install_data.run(self) - - -data_files = [] -for dirpath, dirnames, filenames in os.walk(r'.'): - for dirname in ['.svn','build', 'dist', '_sgbak', '.hg']: - try: - dirnames.remove(dirname) - except ValueError: - pass - for filename in [fn for fn in filenames if os.path.splitext(fn)[-1].lower() in ('.pyc', '.pyo', '.scc')]: - filenames.remove(filename) - parts = ['UnRAR2']+dirpath.split(os.sep)[1:] - - data_files.append((os.path.join(*parts), [os.path.join(dirpath, fn) for fn in filenames])) - -setup(name='pyUnRAR2', - version=__init__.__version__, - description='Improved Python wrapper around the free UnRAR.dll', - long_description=__init__.__doc__.strip(), - author='Konstantin Yegupov', - author_email='yk4ever@gmail.com', - url='http://code.google.com/py-unrar2', - license='MIT', - platforms='Windows', - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Win32 (MS Windows)', - 'License :: OSI Approved :: MIT License', - 'Natural Language :: English', - 'Operating System :: Microsoft :: Windows', - 'Programming Language :: Python', - 'Topic :: Software Development :: Libraries :: Python Modules', - 'Topic :: System :: Archiving :: Compression', - ], - packages=['UnRAR2'], - package_dir={'UnRAR2' : ''}, - data_files=data_files, - cmdclass = {'install_data': smart_install_data}, - ) +# setup.py, config file for distutils + +import __init__ + +from distutils.core import setup +from distutils.command.install_data import install_data +import os + + +class smart_install_data(install_data): + def run(self): + #need to change self.install_dir to the actual library dir + install_cmd = self.get_finalized_command('install') + self.install_dir = getattr(install_cmd, 'install_lib') + return install_data.run(self) + + +data_files = [] +for dirpath, dirnames, filenames in os.walk(r'.'): + for dirname in ['.svn','build', 'dist', '_sgbak', '.hg']: + try: + dirnames.remove(dirname) + except ValueError: + pass + for filename in [fn for fn in filenames if os.path.splitext(fn)[-1].lower() in ('.pyc', '.pyo', '.scc')]: + filenames.remove(filename) + parts = ['UnRAR2']+dirpath.split(os.sep)[1:] + + data_files.append((os.path.join(*parts), [os.path.join(dirpath, fn) for fn in filenames])) + +setup(name='pyUnRAR2', + version=__init__.__version__, + description='Improved Python wrapper around the free UnRAR.dll', + long_description=__init__.__doc__.strip(), + author='Konstantin Yegupov', + author_email='yk4ever@gmail.com', + url='http://code.google.com/py-unrar2', + license='MIT', + platforms='Windows', + classifiers=[ + 'Development Status :: 4 - Beta', + 'Environment :: Win32 (MS Windows)', + 'License :: OSI Approved :: MIT License', + 'Natural Language :: English', + 'Operating System :: Microsoft :: Windows', + 'Programming Language :: Python', + 'Topic :: Software Development :: Libraries :: Python Modules', + 'Topic :: System :: Archiving :: Compression', + ], + packages=['UnRAR2'], + package_dir={'UnRAR2' : ''}, + data_files=data_files, + cmdclass = {'install_data': smart_install_data}, + ) diff --git a/lib/unrar2/test_UnRAR2.py b/lib/unrar2/test_UnRAR2.py index 13c092b6..478b49fc 100644 --- a/lib/unrar2/test_UnRAR2.py +++ b/lib/unrar2/test_UnRAR2.py @@ -1,138 +1,187 @@ -import os, sys - -import UnRAR2 -from UnRAR2.rar_exceptions import * - - -def cleanup(dir='test'): - for path, dirs, files in os.walk(dir): - for fn in files: - os.remove(os.path.join(path, fn)) - for dir in dirs: - os.removedirs(os.path.join(path, dir)) - - -# basic test -cleanup() -rarc = UnRAR2.RarFile('test.rar') -rarc.infolist() -assert rarc.comment == "This is a test." -for info in rarc.infoiter(): - saveinfo = info - assert (str(info)=="""""") - break -rarc.extract() -assert os.path.exists('test'+os.sep+'test.txt') -assert os.path.exists('test'+os.sep+'this.py') -del rarc -assert (str(saveinfo)=="""""") -cleanup() - -# extract all the files in test.rar -cleanup() -UnRAR2.RarFile('test.rar').extract() -assert os.path.exists('test'+os.sep+'test.txt') -assert os.path.exists('test'+os.sep+'this.py') -cleanup() - -# extract all the files in test.rar matching the wildcard *.txt -cleanup() -UnRAR2.RarFile('test.rar').extract('*.txt') -assert os.path.exists('test'+os.sep+'test.txt') -assert not os.path.exists('test'+os.sep+'this.py') -cleanup() - - -# check the name and size of each file, extracting small ones -cleanup() -archive = UnRAR2.RarFile('test.rar') -assert archive.comment == 'This is a test.' -archive.extract(lambda rarinfo: rarinfo.size <= 1024) -for rarinfo in archive.infoiter(): - if rarinfo.size <= 1024 and not rarinfo.isdir: - assert rarinfo.size == os.stat(rarinfo.filename).st_size -assert file('test'+os.sep+'test.txt', 'rt').read() == 'This is only a test.' -assert not os.path.exists('test'+os.sep+'this.py') -cleanup() - - -# extract this.py, overriding it's destination -cleanup('test2') -archive = UnRAR2.RarFile('test.rar') -archive.extract('*.py', 'test2', False) -assert os.path.exists('test2'+os.sep+'this.py') -cleanup('test2') - - -# extract test.txt to memory -cleanup() -archive = UnRAR2.RarFile('test.rar') -entries = UnRAR2.RarFile('test.rar').read_files('*test.txt') -assert len(entries)==1 -assert entries[0][0].filename.endswith('test.txt') -assert entries[0][1]=='This is only a test.' - - -# extract all the files in test.rar with overwriting -cleanup() -fo = open('test'+os.sep+'test.txt',"wt") -fo.write("blah") -fo.close() -UnRAR2.RarFile('test.rar').extract('*.txt') -assert open('test'+os.sep+'test.txt',"rt").read()!="blah" -cleanup() - -# extract all the files in test.rar without overwriting -cleanup() -fo = open('test'+os.sep+'test.txt',"wt") -fo.write("blahblah") -fo.close() -UnRAR2.RarFile('test.rar').extract('*.txt', overwrite = False) -assert open('test'+os.sep+'test.txt',"rt").read()=="blahblah" -cleanup() - -# list big file in an archive -list(UnRAR2.RarFile('test_nulls.rar').infoiter()) - -# extract files from an archive with protected files -cleanup() -rarc = UnRAR2.RarFile('test_protected_files.rar', password="protected") -rarc.extract() -assert os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') -cleanup() -errored = False -try: - UnRAR2.RarFile('test_protected_files.rar', password="proteqted").extract() -except IncorrectRARPassword: - errored = True -assert not os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') -assert errored -cleanup() - -# extract files from an archive with protected headers -cleanup() -UnRAR2.RarFile('test_protected_headers.rar', password="secret").extract() -assert os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') -cleanup() -errored = False -try: - UnRAR2.RarFile('test_protected_headers.rar', password="seqret").extract() -except IncorrectRARPassword: - errored = True -assert not os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') -assert errored -cleanup() - -# make sure docstring examples are working -import doctest -doctest.testmod(UnRAR2) - -# update documentation -import pydoc -pydoc.writedoc(UnRAR2) - -# cleanup -try: - os.remove('__init__.pyc') -except: - pass +import os,sys,inspect +currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) +parentdir = os.path.dirname(currentdir) +sys.path.insert(0,parentdir) + +import unrar2 as UnRAR2 +from unrar2.rar_exceptions import * + + +def cleanup(dir='test'): + for path, dirs, files in os.walk(dir): + for fn in files: + os.remove(os.path.join(path, fn)) + for dir in dirs: + os.removedirs(os.path.join(path, dir)) + + +# basic test +cleanup() +rarc = UnRAR2.RarFile('test.rar') +assert rarc.get_volume() == None +rarc.infolist() +assert rarc.comment == "This is a test." +for info in rarc.infoiter(): + saveinfo = info + assert (str(info)=="""""") + break +rarc.extract() +assert os.path.exists('test'+os.sep+'test.txt') +assert os.path.exists('test'+os.sep+'this.py') +del rarc +assert (str(saveinfo)=="""""") +cleanup() + +# shell-unsafe-name test +cleanup() +rarc = UnRAR2.RarFile('[test].rar') +rarc.infolist() +for info in rarc.infoiter(): + saveinfo = info + assert (str(info)=="""""") + break +rarc.extract() +assert os.path.exists('[test].txt') +del rarc +assert (str(saveinfo)=="""""") +cleanup() + + +# extract all the files in test.rar +cleanup() +UnRAR2.RarFile('test.rar').extract() +assert os.path.exists('test'+os.sep+'test.txt') +assert os.path.exists('test'+os.sep+'this.py') +cleanup() + +# extract all the files in test.rar matching the wildcard *.txt +cleanup() +UnRAR2.RarFile('test.rar').extract('*.txt') +assert os.path.exists('test'+os.sep+'test.txt') +assert not os.path.exists('test'+os.sep+'this.py') +cleanup() + + +# check the name and size of each file, extracting small ones +cleanup() +archive = UnRAR2.RarFile('test.rar') +assert archive.comment == 'This is a test.' +archive.extract(lambda rarinfo: rarinfo.size <= 1024) +for rarinfo in archive.infoiter(): + if rarinfo.size <= 1024 and not rarinfo.isdir: + assert rarinfo.size == os.stat(rarinfo.filename).st_size +assert file('test'+os.sep+'test.txt', 'rt').read() == 'This is only a test.' +assert not os.path.exists('test'+os.sep+'this.py') +cleanup() + + +# extract this.py, overriding it's destination +cleanup('test2') +archive = UnRAR2.RarFile('test.rar') +archive.extract('*.py', 'test2', False) +assert os.path.exists('test2'+os.sep+'this.py') +cleanup('test2') + + +# extract test.txt to memory +cleanup() +archive = UnRAR2.RarFile('test.rar') +entries = UnRAR2.RarFile('test.rar').read_files('*test.txt') +assert len(entries)==1 +assert entries[0][0].filename.endswith('test.txt') +assert entries[0][1]=='This is only a test.' + + +# extract all the files in test.rar with overwriting +cleanup() +fo = open('test'+os.sep+'test.txt',"wt") +fo.write("blah") +fo.close() +UnRAR2.RarFile('test.rar').extract('*.txt') +assert open('test'+os.sep+'test.txt',"rt").read()!="blah" +cleanup() + +# extract all the files in test.rar without overwriting +cleanup() +fo = open('test'+os.sep+'test.txt',"wt") +fo.write("blahblah") +fo.close() +UnRAR2.RarFile('test.rar').extract('*.txt', overwrite = False) +assert open('test'+os.sep+'test.txt',"rt").read()=="blahblah" +cleanup() + +# list big file in an archive +list(UnRAR2.RarFile('test_nulls.rar').infoiter()) + +# extract files from an archive with protected files +cleanup() +rarc = UnRAR2.RarFile('test_protected_files.rar', password="protected") +rarc.extract() +assert os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') +cleanup() +errored = False +try: + UnRAR2.RarFile('test_protected_files.rar', password="proteqted").extract() +except IncorrectRARPassword: + errored = True +assert not os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') +assert errored +cleanup() +errored = False +try: + UnRAR2.RarFile('test_protected_files.rar').extract() +except IncorrectRARPassword: + errored = True +assert not os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') +assert errored +cleanup() + + +# extract files from an archive with protected headers +cleanup() +UnRAR2.RarFile('test_protected_headers.rar', password="secret").extract() +assert os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') +cleanup() +errored = False +try: + UnRAR2.RarFile('test_protected_headers.rar', password="seqret").extract() +except IncorrectRARPassword: + errored = True +assert not os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') +assert errored +cleanup() +errored = False +try: + UnRAR2.RarFile('test_protected_headers.rar').extract() +except IncorrectRARPassword: + errored = True +assert not os.path.exists('test'+os.sep+'top_secret_xxx_file.txt') +assert errored +cleanup() + +# check volume number +cleanup() +rarc1 = UnRAR2.RarFile('test_volumes.part1.rar') +assert rarc1.get_volume() == 0 +rarc2 = UnRAR2.RarFile('test_volumes.part2.rar') +assert rarc2.get_volume() == 1 +cleanup() +rarc1 = UnRAR2.RarFile('test_volumes_old.rar') +assert rarc1.get_volume() == 0 +rarc2 = UnRAR2.RarFile('test_volumes_old.r00') +assert rarc2.get_volume() == 1 +cleanup() + +# make sure docstring examples are working +import doctest +doctest.testmod(UnRAR2) + +# update documentation +import pydoc +pydoc.writedoc(UnRAR2) + +# cleanup +try: + os.remove('__init__.pyc') +except: + pass diff --git a/lib/unrar2/test_volumes.part1.rar b/lib/unrar2/test_volumes.part1.rar new file mode 100644 index 0000000000000000000000000000000000000000..6a60152ff13526db9a92ee8dc0673d1dd6f0a13e GIT binary patch literal 17408 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 DhaBxT literal 0 HcmV?d00001 diff --git a/lib/unrar2/test_volumes.part2.rar b/lib/unrar2/test_volumes.part2.rar new file mode 100644 index 0000000000000000000000000000000000000000..0f4119a8958f587a627be0097c37c364724d9c78 GIT binary patch literal 7471 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 literal 0 HcmV?d00001 diff --git a/lib/unrar2/test_volumes_old.r00 b/lib/unrar2/test_volumes_old.r00 new file mode 100644 index 0000000000000000000000000000000000000000..d7ee09ab0ad3e1c0d13d6f2c32329896d7936e53 GIT binary patch literal 7471 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 literal 0 HcmV?d00001 diff --git a/lib/unrar2/test_volumes_old.rar b/lib/unrar2/test_volumes_old.rar new file mode 100644 index 0000000000000000000000000000000000000000..9f35591f190154fdf301ce7c3c50184b25ab8019 GIT binary patch literal 17408 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 D@!;;j literal 0 HcmV?d00001 diff --git a/lib/unrar2/unix.py b/lib/unrar2/unix.py index bd9ee859..12cced48 100644 --- a/lib/unrar2/unix.py +++ b/lib/unrar2/unix.py @@ -74,13 +74,13 @@ class RarFileImplementation(object): accum = [] source = iter(stdoutdata.splitlines()) line = '' - while not (line.startswith('UNRAR')): + while (line.find('RAR ') == -1): line = source.next() signature = line # The code below is mighty flaky # and will probably crash on localized versions of RAR # but I see no safe way to rewrite it using a CLI tool - if signature.startswith("UNRAR 4"): + if signature.find("RAR 4") > -1: rar_executable_version = 4 while not (line.startswith('Comment:') or line.startswith('Pathname/Comment')): if line.strip().endswith('is not RAR archive'): @@ -94,7 +94,7 @@ class RarFileImplementation(object): self.comment = '\n'.join(accum[:-1]) else: self.comment = None - elif signature.startswith("UNRAR 5"): + elif signature.find("RAR 5") > -1: rar_executable_version = 5 line = source.next() while not line.startswith('Archive:'): @@ -155,6 +155,7 @@ class RarFileImplementation(object): data['isdir'] = 'd' in attr.lower() data['datetime'] = time.strptime(fields[3]+" "+fields[4], '%d-%m-%y %H:%M') data['comment'] = None + data['volume'] = None yield data accum = [] i += 1 @@ -170,6 +171,7 @@ class RarFileImplementation(object): data['isdir'] = 'd' in attr.lower() data['datetime'] = time.strptime(fields[2]+" "+fields[3], '%d-%m-%y %H:%M') data['comment'] = None + data['volume'] = None yield data i += 1 line = source.next() @@ -214,5 +216,42 @@ class RarFileImplementation(object): def destruct(self): pass + + def get_volume(self): + command = "v" if rar_executable_version == 4 else "l" + stdoutdata, stderrdata = self.call(command, ['c-']).communicate() + + for line in stderrdata.splitlines(): + if line.strip().startswith("Cannot open"): + raise FileOpenError + + source = iter(stdoutdata.splitlines()) + line = '' + while not line.startswith('-----------'): + if line.strip().endswith('is not RAR archive'): + raise InvalidRARArchive + if line.startswith("CRC failed") or line.startswith("Checksum error"): + raise IncorrectRARPassword + line = source.next() + line = source.next() + if rar_executable_version == 4: + while not line.startswith('-----------'): + line = source.next() + line = source.next() + items = line.strip().split() + if len(items)>4 and items[4]=="volume": + return int(items[5]) - 1 + else: + return None + + elif rar_executable_version == 5: + while not line.startswith('-----------'): + line = source.next() + line = source.next() + items = line.strip().split() + if items[1]=="volume": + return int(items[2]) - 1 + else: + return None diff --git a/lib/unrar2/windows.py b/lib/unrar2/windows.py index bb92481b..19cca3d7 100644 --- a/lib/unrar2/windows.py +++ b/lib/unrar2/windows.py @@ -25,7 +25,7 @@ from __future__ import generators import ctypes, ctypes.wintypes -import os, os.path, sys +import os, os.path, sys, re import Queue import time @@ -43,6 +43,7 @@ ERAR_EREAD = 18 ERAR_EWRITE = 19 ERAR_SMALL_BUF = 20 ERAR_UNKNOWN = 21 +ERAR_MISSING_PASSWORD = 22 RAR_OM_LIST = 0 RAR_OM_EXTRACT = 1 @@ -66,6 +67,9 @@ dll_name = "unrar.dll" if architecture_bits == 64: dll_name = "x64\\unrar64.dll" +volume_naming1 = re.compile("\.r([0-9]{2})$") +volume_naming2 = re.compile("\.([0-9]{3}).rar$") +volume_naming3 = re.compile("\.part([0-9]+).rar$") try: unrar = ctypes.WinDLL(os.path.join(os.path.split(__file__)[0], 'UnRARDLL', dll_name)) @@ -188,7 +192,7 @@ class RarInfoIterator(object): self.index = 0 self.headerData = RARHeaderDataEx() self.res = RARReadHeaderEx(self.arc._handle, ctypes.byref(self.headerData)) - if self.res==ERAR_BAD_DATA: + if self.res in [ERAR_BAD_DATA, ERAR_MISSING_PASSWORD]: raise IncorrectRARPassword self.arc.lockStatus = "locked" self.arc.needskip = False @@ -208,7 +212,7 @@ class RarInfoIterator(object): data = {} data['index'] = self.index - data['filename'] = self.headerData.FileName + data['filename'] = self.headerData.FileNameW data['datetime'] = DosDateTimeToTimeTuple(self.headerData.FileTime) data['isdir'] = ((self.headerData.Flags & 0xE0) == 0xE0) data['size'] = self.headerData.UnpSize + (self.headerData.UnpSizeHigh << 32) @@ -251,7 +255,8 @@ class RarFileImplementation(object): RARSetPassword(self._handle, password) self.lockStatus = "ready" - + + self.isVolume = archiveData.Flags & 1 def destruct(self): @@ -277,7 +282,7 @@ class RarFileImplementation(object): c_callback = UNRARCALLBACK(reader._callback) RARSetCallback(self._handle, c_callback, 1) tmpres = RARProcessFile(self._handle, RAR_TEST, None, None) - if tmpres==ERAR_BAD_DATA: + if tmpres in [ERAR_BAD_DATA, ERAR_MISSING_PASSWORD]: raise IncorrectRARPassword self.needskip = False res.append((info, reader.get_result())) @@ -299,11 +304,29 @@ class RarFileImplementation(object): target = checkres if overwrite or (not os.path.exists(target)): tmpres = RARProcessFile(self._handle, RAR_EXTRACT, None, target) - if tmpres==ERAR_BAD_DATA: + if tmpres in [ERAR_BAD_DATA, ERAR_MISSING_PASSWORD]: raise IncorrectRARPassword self.needskip = False res.append(info) return res + def get_volume(self): + if not self.isVolume: + return None + headerData = RARHeaderDataEx() + res = RARReadHeaderEx(self._handle, ctypes.byref(headerData)) + arcName = headerData.ArcNameW + match3 = volume_naming3.search(arcName) + if match3 != None: + return int(match3.group(1)) - 1 + match2 = volume_naming3.search(arcName) + if match2 != None: + return int(match2.group(1)) + match1 = volume_naming1.search(arcName) + if match1 != None: + return int(match1.group(1)) + 1 + return 0 + + diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py index 9b6738d3..29aef590 100644 --- a/sickbeard/providers/torrentday.py +++ b/sickbeard/providers/torrentday.py @@ -1,19 +1,19 @@ # Author: Mr_Orange # -# This file is part of SickRage. +# This file is part of SickGear. # -# SickRage is free software: you can redistribute it and/or modify +# SickGear is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # -# SickRage is distributed in the hope that it will be useful, +# SickGear is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with SickRage. If not, see . +# along with SickGear. If not, see . import re import datetime @@ -35,6 +35,11 @@ from sickbeard.helpers import sanitizeSceneName class TorrentDayProvider(generic.TorrentProvider): + urls = {'base_url': 'https://torrentday.eu', + 'login': 'https://torrentday.eu/torrents/', + 'search': 'https://torrentday.eu/V3/API/API.php', + 'download': 'https://torrentday.eu/download.php/%s/%s' + } def __init__(self): @@ -54,12 +59,6 @@ class TorrentDayProvider(generic.TorrentProvider): self.cache = TorrentDayCache(self) - self.urls = {'base_url': 'http://www.td.af', - 'login': 'http://www.td.af/torrents/', - 'search': 'http://www.td.af/V3/API/API.php', - 'download': 'http://www.td.af/download.php/%s/%s' - } - self.url = self.urls['base_url'] self.cookies = None @@ -84,7 +83,9 @@ class TorrentDayProvider(generic.TorrentProvider): return True if self._uid and self._hash: + requests.utils.add_dict_to_cookiejar(self.session.cookies, self.cookies) + else: login_params = {'username': self.username, @@ -93,9 +94,6 @@ class TorrentDayProvider(generic.TorrentProvider): 'submit.y': 0 } - if not self.session: - self.session = requests.Session() - try: response = self.session.post(self.urls['login'], data=login_params, timeout=30, verify=False) except (requests.exceptions.ConnectionError, requests.exceptions.HTTPError), e: @@ -110,20 +108,18 @@ class TorrentDayProvider(generic.TorrentProvider): logger.log(u'Invalid username or password for ' + self.name + ', Check your settings!', logger.ERROR) return False - try: - if requests.utils.dict_from_cookiejar(self.session.cookies)['uid'] and requests.utils.dict_from_cookiejar(self.session.cookies)['pass']: - self._uid = requests.utils.dict_from_cookiejar(self.session.cookies)['uid'] - self._hash = requests.utils.dict_from_cookiejar(self.session.cookies)['pass'] + if requests.utils.dict_from_cookiejar(self.session.cookies)['uid'] and requests.utils.dict_from_cookiejar(self.session.cookies)['pass']: + self._uid = requests.utils.dict_from_cookiejar(self.session.cookies)['uid'] + self._hash = requests.utils.dict_from_cookiejar(self.session.cookies)['pass'] - self.cookies = {'uid': self._uid, - 'pass': self._hash - } - return True - except: - pass + self.cookies = {'uid': self._uid, + 'pass': self._hash + } + return True - logger.log(u'Unable to obtain cookie for TorrentDay', logger.ERROR) - return False + else: + logger.log(u'Unable to obtain cookie for TorrentDay', logger.ERROR) + return False def _get_season_search_strings(self, ep_obj): @@ -169,7 +165,7 @@ class TorrentDayProvider(generic.TorrentProvider): for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): ep_string = show_name_helpers.sanitizeSceneName(show_name) + ' ' + \ sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season, - 'episodenumber': ep_obj.scene_episode} + ' %s' % add_string + 'episodenumber': ep_obj.scene_episode} search_string['Episode'].append(re.sub('\s+', ' ', ep_string)) @@ -183,7 +179,7 @@ class TorrentDayProvider(generic.TorrentProvider): freeleech = '&free=on' if self.freeleech else '' if not self._doLogin(): - return results + return [] for mode in search_params.keys(): for search_string in search_params[mode]: @@ -283,6 +279,8 @@ class TorrentDayCache(tvcache.TVCache): def _getRSSData(self): search_params = {'RSS': ['']} - return {'entries': self.provider._doSearch(search_params)} + return self.provider._doSearch(search_params) + + provider = TorrentDayProvider() From 94732e9568f58b9f89330fec827ebc34671bb1d4 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Wed, 21 Jan 2015 23:48:03 -0500 Subject: [PATCH 069/156] Fix absolute numbering used everywhere if selected even if custom anime rename isn't active. --- sickbeard/tv.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 8c3f6695..663b6bf0 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -2187,8 +2187,11 @@ class TVEpisode(object): if multi == None: multi = sickbeard.NAMING_MULTI_EP - if anime_type == None: - anime_type = sickbeard.NAMING_ANIME + if sickbeard.NAMING_CUSTOM_ANIME: + if anime_type == None: + anime_type = sickbeard.NAMING_ANIME + else: + anime_type = 3 replace_map = self._replace_map() From 2203939e6fd89c93b75dc9a3a2611230b88692c0 Mon Sep 17 00:00:00 2001 From: TagForce Date: Thu, 22 Jan 2015 13:03:06 +0100 Subject: [PATCH 070/156] Added Select All Checkbox to Preview Rename page - Added "Select All" check box under new "All Seasons" table - Duplicated "Rename Selected" and "Cancel Rename" buttons to be available underneath the "Select All" checkbox. --- gui/slick/interfaces/default/testRename.tmpl | 22 +++++++++++++++++++- gui/slick/js/testRename.js | 14 +++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/gui/slick/interfaces/default/testRename.tmpl b/gui/slick/interfaces/default/testRename.tmpl index 87ea39b3..45c8d0d9 100644 --- a/gui/slick/interfaces/default/testRename.tmpl +++ b/gui/slick/interfaces/default/testRename.tmpl @@ -32,6 +32,26 @@ #set $curSeason = -1 #set $odd = False + + + + + + + + + + + + + +
+

All Seasons

+
Select All
+ +
+
Cancel Rename + #for $cur_ep_obj in $ep_obj_list: @@ -43,7 +63,7 @@ diff --git a/gui/slick/js/testRename.js b/gui/slick/js/testRename.js index 10ba453a..faf61b70 100644 --- a/gui/slick/js/testRename.js +++ b/gui/slick/js/testRename.js @@ -1,4 +1,18 @@ $(document).ready(function(){ + $('.seriesCheck').click(function(){ + var serCheck = this; + + $('.seasonCheck:visible').each(function(){ + + this.checked = serCheck.checked + }); + + $('.epCheck:visible').each(function(){ + + this.checked = serCheck.checked + }); + }); + $('.seasonCheck').click(function(){ var seasCheck = this; var seasNo = $(seasCheck).attr('id'); From a3a706dd74a1a860af4b73484665491c287b6173 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Thu, 22 Jan 2015 11:21:22 -0500 Subject: [PATCH 071/156] Fix accent issue on system with locale like POSIX. --- .../network/{télé-québec.png => tele-quebec.png} | Bin gui/slick/interfaces/default/home.tmpl | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename gui/slick/images/network/{télé-québec.png => tele-quebec.png} (100%) diff --git a/gui/slick/images/network/télé-québec.png b/gui/slick/images/network/tele-quebec.png similarity index 100% rename from gui/slick/images/network/télé-québec.png rename to gui/slick/images/network/tele-quebec.png diff --git a/gui/slick/interfaces/default/home.tmpl b/gui/slick/interfaces/default/home.tmpl index 49b3af7b..bafc1365 100644 --- a/gui/slick/interfaces/default/home.tmpl +++ b/gui/slick/interfaces/default/home.tmpl @@ -403,7 +403,7 @@ $myShowList.sort(lambda x, y: cmp(x.name, y.name)) #end if - + + #if ($sickbeard.DISPLAY_FILESIZE == True): + + #end if #if len($sickbeard.DOWNLOAD_URL) > 0 @@ -471,6 +478,14 @@ $epResult["name"] + #if ($sickbeard.DISPLAY_FILESIZE == True): + + #end if diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 531ac5bb..8c4ee50e 100755 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -451,6 +451,7 @@ COMING_EPS_LAYOUT = None COMING_EPS_DISPLAY_PAUSED = False COMING_EPS_SORT = None COMING_EPS_MISSED_RANGE = None +DISPLAY_FILESIZE = False FUZZY_DATING = False TRIM_ZERO = False DATE_PRESET = None @@ -529,7 +530,7 @@ def initialize(consoleLogging=True): USE_EMAIL, EMAIL_HOST, EMAIL_PORT, EMAIL_TLS, EMAIL_USER, EMAIL_PASSWORD, EMAIL_FROM, EMAIL_NOTIFY_ONSNATCH, EMAIL_NOTIFY_ONDOWNLOAD, EMAIL_NOTIFY_ONSUBTITLEDOWNLOAD, EMAIL_LIST, \ USE_LISTVIEW, METADATA_KODI, METADATA_KODI_12PLUS, METADATA_MEDIABROWSER, METADATA_PS3, metadata_provider_dict, \ NEWZBIN, NEWZBIN_USERNAME, NEWZBIN_PASSWORD, GIT_PATH, MOVE_ASSOCIATED_FILES, POSTPONE_IF_SYNC_FILES, dailySearchScheduler, NFO_RENAME, \ - GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_MISSED_RANGE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, \ + GUI_NAME, HOME_LAYOUT, HISTORY_LAYOUT, DISPLAY_SHOW_SPECIALS, COMING_EPS_LAYOUT, COMING_EPS_SORT, COMING_EPS_DISPLAY_PAUSED, COMING_EPS_MISSED_RANGE, DISPLAY_FILESIZE, FUZZY_DATING, TRIM_ZERO, DATE_PRESET, TIME_PRESET, TIME_PRESET_W_SECONDS, THEME_NAME, \ POSTER_SORTBY, POSTER_SORTDIR, \ METADATA_WDTV, METADATA_TIVO, METADATA_MEDE8ER, IGNORE_WORDS, REQUIRE_WORDS, CALENDAR_UNPROTECTED, CREATE_MISSING_SHOW_DIRS, \ ADD_SHOWS_WO_DIR, USE_SUBTITLES, SUBTITLES_LANGUAGES, SUBTITLES_DIR, SUBTITLES_SERVICES_LIST, SUBTITLES_SERVICES_ENABLED, SUBTITLES_HISTORY, SUBTITLES_FINDER_FREQUENCY, SUBTITLES_MULTI, subtitlesFinderScheduler, \ @@ -1016,6 +1017,7 @@ def initialize(consoleLogging=True): COMING_EPS_DISPLAY_PAUSED = bool(check_setting_int(CFG, 'GUI', 'coming_eps_display_paused', 0)) COMING_EPS_SORT = check_setting_str(CFG, 'GUI', 'coming_eps_sort', 'date') COMING_EPS_MISSED_RANGE = check_setting_int(CFG, 'GUI', 'coming_eps_missed_range', 7) + DISPLAY_FILESIZE = bool(check_setting_int(CFG, 'GUI', 'display_filesize', 0)) FUZZY_DATING = bool(check_setting_int(CFG, 'GUI', 'fuzzy_dating', 0)) TRIM_ZERO = bool(check_setting_int(CFG, 'GUI', 'trim_zero', 0)) DATE_PRESET = check_setting_str(CFG, 'GUI', 'date_preset', '%x') @@ -1853,6 +1855,7 @@ def save_config(): new_config['GUI']['coming_eps_display_paused'] = int(COMING_EPS_DISPLAY_PAUSED) new_config['GUI']['coming_eps_sort'] = COMING_EPS_SORT new_config['GUI']['coming_eps_missed_range'] = int(COMING_EPS_MISSED_RANGE) + new_config['GUI']['display_filesize'] = int(DISPLAY_FILESIZE) new_config['GUI']['fuzzy_dating'] = int(FUZZY_DATING) new_config['GUI']['trim_zero'] = int(TRIM_ZERO) new_config['GUI']['date_preset'] = DATE_PRESET diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index b6f023f2..44542d9b 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -3450,7 +3450,7 @@ class ConfigGeneral(Config): handle_reverse_proxy=None, sort_article=None, auto_update=None, notify_on_update=None, proxy_setting=None, proxy_indexers=None, anon_redirect=None, git_path=None, git_remote=None, calendar_unprotected=None, - fuzzy_dating=None, trim_zero=None, date_preset=None, date_preset_na=None, time_preset=None, + display_filesize=None, fuzzy_dating=None, trim_zero=None, date_preset=None, date_preset_na=None, time_preset=None, indexer_timeout=None, play_videos=None, download_url=None, rootDir=None, theme_name=None, git_reset=None, git_username=None, git_password=None, git_autoissues=None): @@ -3491,7 +3491,8 @@ class ConfigGeneral(Config): sickbeard.ENCRYPTION_VERSION = config.checkbox_to_value(encryption_version) sickbeard.WEB_USERNAME = web_username sickbeard.WEB_PASSWORD = web_password - + + sickbeard.DISPLAY_FILESIZE = config.checkbox_to_value(display_filesize) sickbeard.FUZZY_DATING = config.checkbox_to_value(fuzzy_dating) sickbeard.TRIM_ZERO = config.checkbox_to_value(trim_zero) From 37ab43adbc32f5b4dbd892ff29bab5defad8eb14 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Mon, 26 Jan 2015 12:19:16 -0500 Subject: [PATCH 090/156] Added ability to modify Transmission's RPC url. --- gui/slick/interfaces/default/config_search.tmpl | 9 +++++++++ gui/slick/js/configSearch.js | 2 ++ sickbeard/__init__.py | 5 ++++- sickbeard/clients/transmission.py | 2 +- sickbeard/webserve.py | 5 +++-- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/gui/slick/interfaces/default/config_search.tmpl b/gui/slick/interfaces/default/config_search.tmpl index 8f08fb06..d812eaf6 100755 --- a/gui/slick/interfaces/default/config_search.tmpl +++ b/gui/slick/interfaces/default/config_search.tmpl @@ -454,6 +454,15 @@ + +
+ +
diff --git a/gui/slick/js/configSearch.js b/gui/slick/js/configSearch.js index 0c5038ce..24694843 100644 --- a/gui/slick/js/configSearch.js +++ b/gui/slick/js/configSearch.js @@ -47,6 +47,7 @@ $(document).ready(function(){ directory = ' directory', client = '', option_panel = '#options_torrent_blackhole'; + rpcurl = ' RPC URL' if ('blackhole' != selectedProvider) { var label_warning_deluge = '#label_warning_deluge', @@ -115,6 +116,7 @@ $(document).ready(function(){ $('#username_title').text(client + username); $('#password_title').text(client + password); $('#torrent_client').text(client); + $('#rpcurl_title').text(client + rpcurl); option_panel = '#options_torrent_clients'; } $(option_panel).show(); diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 2928746b..ba79dcdc 100755 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -286,7 +286,7 @@ TORRENT_HIGH_BANDWIDTH = False TORRENT_LABEL = '' TORRENT_LABEL_ANIME = '' TORRENT_VERIFY_CERT = False -TORRENT_RPCURL = '/transmission' +TORRENT_RPCURL = 'transmission' USE_KODI = False KODI_ALWAYS_ON = True @@ -809,7 +809,7 @@ def initialize(consoleLogging=True): TORRENT_LABEL = check_setting_str(CFG, 'TORRENT', 'torrent_label', '') TORRENT_LABEL_ANIME = check_setting_str(CFG, 'TORRENT', 'torrent_label_anime', '') TORRENT_VERIFY_CERT = bool(check_setting_int(CFG, 'TORRENT', 'torrent_verify_cert', 0)) - TORRENT_RPCURL = check_setting_str(CFG, 'TORRENT', 'torrent_rpcurl', '/transmission') + TORRENT_RPCURL = check_setting_str(CFG, 'TORRENT', 'torrent_rpcurl', 'transmission') USE_KODI = bool(check_setting_int(CFG, 'KODI', 'use_kodi', 0)) KODI_ALWAYS_ON = bool(check_setting_int(CFG, 'KODI', 'kodi_always_on', 1)) From 6b915ebc1c5bfc53ff48d4419da5fe90f37b6ed3 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Mon, 26 Jan 2015 15:29:09 -0500 Subject: [PATCH 093/156] Added simple url check --- sickbeard/clients/generic.py | 1 + sickbeard/clients/transmission.py | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/sickbeard/clients/generic.py b/sickbeard/clients/generic.py index 6347ca55..9f8e3d69 100644 --- a/sickbeard/clients/generic.py +++ b/sickbeard/clients/generic.py @@ -18,6 +18,7 @@ class GenericClient(object): self.username = sickbeard.TORRENT_USERNAME if username is None else username self.password = sickbeard.TORRENT_PASSWORD if password is None else password self.host = sickbeard.TORRENT_HOST if host is None else host + self.rpcurl = sickbeard.TORRENT_RPCURL self.url = None self.response = None diff --git a/sickbeard/clients/transmission.py b/sickbeard/clients/transmission.py index 670fd200..f0d20124 100755 --- a/sickbeard/clients/transmission.py +++ b/sickbeard/clients/transmission.py @@ -30,7 +30,16 @@ class TransmissionAPI(GenericClient): super(TransmissionAPI, self).__init__('Transmission', host, username, password) - self.url = self.host + sickbeard.TORRENT_RPCURL + '/rpc' + if not self.host.endswith('/'): + self.host = self.host + '/' + + if self.rpcurl.startswith('/'): + self.rpcurl = self.rpcurl[1:] + + if self.rpcurl.endswith('/'): + self.rpcurl = self.rpcurl[:-1] + + self.url = self.host + self.rpcurl + '/rpc' def _get_auth(self): From d280b56e13ed1423afafbde3749b4650f43e9700 Mon Sep 17 00:00:00 2001 From: Fernando Date: Mon, 26 Jan 2015 19:55:56 -0200 Subject: [PATCH 094/156] Set UNKNOWN quality as Low Quality https://github.com/SiCKRAGETV/sickrage-issues/issues/493#issuecomment-71538630 UNKNOWN quality will always be low quality no matter what. It's different from unknown episode status. --- sickbeard/tv.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 8c3f6695..a889444b 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -1269,6 +1269,8 @@ class TVShow(object): if epStatus == FAILED: return Overview.WANTED + if curQuality == Quality.UNKNOWN: + return Overview.QUAL elif epStatus in (SNATCHED_BEST, SNATCHED, SNATCHED_PROPER ) and curQuality == maxBestQuality: return Overview.SNATCHED # if they don't want re-downloads then we call it good if they have anything From 3c9adc4590649a3051d8f80ed0bc085f1c36598e Mon Sep 17 00:00:00 2001 From: "M. Adam Kendall" Date: Tue, 27 Jan 2015 09:41:02 -0500 Subject: [PATCH 095/156] Try to catch situation where no response is set on error --- lib/trakt/trakt.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/trakt/trakt.py b/lib/trakt/trakt.py index a66f3659..84c31584 100644 --- a/lib/trakt/trakt.py +++ b/lib/trakt/trakt.py @@ -29,12 +29,21 @@ class TraktAPI(): resp.raise_for_status() resp = resp.json() except (requests.HTTPError, requests.ConnectionError) as e: - if e.response.status_code == 502: + code = getattr(e.response, 'status_code', None) + if not code: + # This is pretty much a fatal error if there is no status_code + # It means there basically was no response at all + raise traktException(e) + elif code == 502: # Retry the request, cloudflare had a proxying issue logger.log(u"Retrying trakt api request: auth/login", logger.WARNING) return self.validateAccount() - elif e.response.status_code == 401: + elif code == 401: raise traktAuthException(e) + elif code == 503: + raise traktServerBusy(e) + else: + raise traktException(e) if 'token' in resp: self.token = resp['token'] return True @@ -58,13 +67,18 @@ class TraktAPI(): # convert response to json resp = resp.json() except (requests.HTTPError, requests.ConnectionError) as e: - if e.response.status_code == 502: + code = getattr(e.response, 'status_code', None) + if not code: + # This is pretty much a fatal error if there is no status_code + # It means there basically was no response at all + raise traktException(e) + elif code == 502: # Retry the request, cloudflare had a proxying issue logger.log(u"Retrying trakt api request: %s" % path, logger.WARNING) return self.traktRequest(path, data, method) - elif e.response.status_code == 401: + elif code == 401: raise traktAuthException(e) - elif e.response.status_code == 503: + elif code == 503: raise traktServerBusy(e) else: raise traktException(e) From 246becd9d8137b73705926d04c6c431e3fb1e362 Mon Sep 17 00:00:00 2001 From: TagForce Date: Tue, 27 Jan 2015 16:51:08 +0100 Subject: [PATCH 096/156] Add plot info to mede8er series.xml - Added plot info to mede8er series.xml metadata file. --- sickbeard/metadata/mede8er.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sickbeard/metadata/mede8er.py b/sickbeard/metadata/mede8er.py index 9e3d836e..f140d54b 100644 --- a/sickbeard/metadata/mede8er.py +++ b/sickbeard/metadata/mede8er.py @@ -163,6 +163,9 @@ class Mede8erMetadata(mediabrowser.MediaBrowserMetadata): year.text = year_text except: pass + plot = etree.SubElement(tv_node, "plot") + if getattr(myShow, 'overview', None) is not None: + plot.text = myShow["overview"] if myShow['rating'] != None: try: From ccf3a03c24736103c962a950c6db06e47acca0cd Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Tue, 27 Jan 2015 12:16:14 -0500 Subject: [PATCH 097/156] Reverted change torrentday.py, the shouldn't be included --- sickbeard/providers/torrentday.py | 54 ++++++++++++++++--------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/sickbeard/providers/torrentday.py b/sickbeard/providers/torrentday.py index 29aef590..9b6738d3 100644 --- a/sickbeard/providers/torrentday.py +++ b/sickbeard/providers/torrentday.py @@ -1,19 +1,19 @@ # Author: Mr_Orange # -# This file is part of SickGear. +# This file is part of SickRage. # -# SickGear is free software: you can redistribute it and/or modify +# SickRage is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # -# SickGear is distributed in the hope that it will be useful, +# SickRage is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with SickGear. If not, see . +# along with SickRage. If not, see . import re import datetime @@ -35,11 +35,6 @@ from sickbeard.helpers import sanitizeSceneName class TorrentDayProvider(generic.TorrentProvider): - urls = {'base_url': 'https://torrentday.eu', - 'login': 'https://torrentday.eu/torrents/', - 'search': 'https://torrentday.eu/V3/API/API.php', - 'download': 'https://torrentday.eu/download.php/%s/%s' - } def __init__(self): @@ -59,6 +54,12 @@ class TorrentDayProvider(generic.TorrentProvider): self.cache = TorrentDayCache(self) + self.urls = {'base_url': 'http://www.td.af', + 'login': 'http://www.td.af/torrents/', + 'search': 'http://www.td.af/V3/API/API.php', + 'download': 'http://www.td.af/download.php/%s/%s' + } + self.url = self.urls['base_url'] self.cookies = None @@ -83,9 +84,7 @@ class TorrentDayProvider(generic.TorrentProvider): return True if self._uid and self._hash: - requests.utils.add_dict_to_cookiejar(self.session.cookies, self.cookies) - else: login_params = {'username': self.username, @@ -94,6 +93,9 @@ class TorrentDayProvider(generic.TorrentProvider): 'submit.y': 0 } + if not self.session: + self.session = requests.Session() + try: response = self.session.post(self.urls['login'], data=login_params, timeout=30, verify=False) except (requests.exceptions.ConnectionError, requests.exceptions.HTTPError), e: @@ -108,18 +110,20 @@ class TorrentDayProvider(generic.TorrentProvider): logger.log(u'Invalid username or password for ' + self.name + ', Check your settings!', logger.ERROR) return False - if requests.utils.dict_from_cookiejar(self.session.cookies)['uid'] and requests.utils.dict_from_cookiejar(self.session.cookies)['pass']: - self._uid = requests.utils.dict_from_cookiejar(self.session.cookies)['uid'] - self._hash = requests.utils.dict_from_cookiejar(self.session.cookies)['pass'] + try: + if requests.utils.dict_from_cookiejar(self.session.cookies)['uid'] and requests.utils.dict_from_cookiejar(self.session.cookies)['pass']: + self._uid = requests.utils.dict_from_cookiejar(self.session.cookies)['uid'] + self._hash = requests.utils.dict_from_cookiejar(self.session.cookies)['pass'] - self.cookies = {'uid': self._uid, - 'pass': self._hash - } - return True + self.cookies = {'uid': self._uid, + 'pass': self._hash + } + return True + except: + pass - else: - logger.log(u'Unable to obtain cookie for TorrentDay', logger.ERROR) - return False + logger.log(u'Unable to obtain cookie for TorrentDay', logger.ERROR) + return False def _get_season_search_strings(self, ep_obj): @@ -165,7 +169,7 @@ class TorrentDayProvider(generic.TorrentProvider): for show_name in set(show_name_helpers.allPossibleShowNames(self.show)): ep_string = show_name_helpers.sanitizeSceneName(show_name) + ' ' + \ sickbeard.config.naming_ep_type[2] % {'seasonnumber': ep_obj.scene_season, - 'episodenumber': ep_obj.scene_episode} + 'episodenumber': ep_obj.scene_episode} + ' %s' % add_string search_string['Episode'].append(re.sub('\s+', ' ', ep_string)) @@ -179,7 +183,7 @@ class TorrentDayProvider(generic.TorrentProvider): freeleech = '&free=on' if self.freeleech else '' if not self._doLogin(): - return [] + return results for mode in search_params.keys(): for search_string in search_params[mode]: @@ -279,8 +283,6 @@ class TorrentDayCache(tvcache.TVCache): def _getRSSData(self): search_params = {'RSS': ['']} - return self.provider._doSearch(search_params) - - + return {'entries': self.provider._doSearch(search_params)} provider = TorrentDayProvider() From 94d17c286ef25b37358cf7eb3a8a2ceb6e2a6917 Mon Sep 17 00:00:00 2001 From: "M. Adam Kendall" Date: Tue, 27 Jan 2015 14:26:53 -0500 Subject: [PATCH 098/156] Update to provide option to disable SSL certificate verification --- .../default/config_notifications.tmpl | 53 +++++++++++-------- gui/slick/js/configNotifications.js | 21 ++++---- lib/trakt/trakt.py | 10 ++-- sickbeard/__init__.py | 5 +- sickbeard/notifiers/trakt.py | 6 +-- sickbeard/traktChecker.py | 2 +- sickbeard/webserve.py | 15 ++++-- 7 files changed, 66 insertions(+), 46 deletions(-) diff --git a/gui/slick/interfaces/default/config_notifications.tmpl b/gui/slick/interfaces/default/config_notifications.tmpl index 87076a76..1c64516c 100644 --- a/gui/slick/interfaces/default/config_notifications.tmpl +++ b/gui/slick/interfaces/default/config_notifications.tmpl @@ -12,9 +12,9 @@ -#if $varExists('header') +#if $varExists('header')

$header

-#else +#else

$title

#end if @@ -30,7 +30,7 @@
- +

KODI

@@ -110,7 +110,7 @@

only send library updates to the first active host ?

-
+
- +
@@ -232,7 +232,7 @@ +
+ -
+
- +
@@ -430,7 +430,7 @@ @@ -446,8 +446,8 @@
- - + +
@@ -563,7 +563,7 @@
- +
@@ -576,7 +576,7 @@ @@ -587,7 +587,7 @@ @@ -1203,7 +1203,7 @@ @@ -1214,7 +1214,7 @@ @@ -1266,7 +1266,7 @@
- +
@@ -1390,6 +1390,15 @@ password of your Trakt account.
+
+ +
-
+
-
-
+
+
-
+

#if int($cur_ep_obj.season) == 0 then "Specials" else "Season "+str($cur_ep_obj.season)#

#if $layout != 'simple': #if $curShow.network: - $curShow.network + $curShow.network #else: No Network #end if @@ -561,7 +561,7 @@ $myShowList.sort(lambda x, y: cmp(x.name, y.name)) #if $layout != 'simple': #if $curShow.network: - $curShow.network + $curShow.network #else: No Network #end if From cee1566b7bda3da6a90e82954c0e397a6fe258e4 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Fri, 23 Jan 2015 13:16:06 -0500 Subject: [PATCH 072/156] Fix if network is None --- sickbeard/webserve.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index b6f023f2..ad940828 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -573,9 +573,11 @@ class WebRoot(WebHandler): ical = ical + 'UID:Sick-Beard-' + str(datetime.date.today().isoformat()) + '-' + show[ 'show_name'].replace(" ", "-") + '-E' + str(episode['episode']) + 'S' + str( episode['season']) + '\r\n' - if (episode['description'] is not None and episode['description'] != ''): - ical = ical + 'DESCRIPTION:' + show['airs'] + ' on ' + show['network'] + '\\n\\n' + \ - episode['description'].splitlines()[0] + '\r\n' + if episode['description']: + ical = ical + 'DESCRIPTION: {0} on {1} \\n\\n {2}\r\n'.format( + (show['airs'] or '(Unknown airs)'), + (show['network'] or 'Unknown network'), + episode['description'].splitlines()[0]) else: ical = ical + 'DESCRIPTION:' + (show['airs'] or '(Unknown airs)') + ' on ' + ( show['network'] or 'Unknown network') + '\r\n' From 17545d93b2bf03fe2becbb89b32e578ab3ec13c6 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Fri, 23 Jan 2015 13:44:18 -0500 Subject: [PATCH 073/156] Prevent submitting empty gist. --- sickbeard/logger.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sickbeard/logger.py b/sickbeard/logger.py index 1d289f1d..0b326509 100644 --- a/sickbeard/logger.py +++ b/sickbeard/logger.py @@ -172,7 +172,8 @@ class Logger(object): level = match.group(2) if reverseNames[level] == ERROR: paste_data = "".join(log_data[i:50]) - gist = gh.get_user().create_gist(True, {"sickrage.log": InputFileContent(paste_data)}) + if paste_data: + gist = gh.get_user().create_gist(True, {"sickrage.log": InputFileContent(paste_data)}) break message = u"### INFO\n" @@ -189,7 +190,7 @@ class Logger(object): message += u"---\n" message += u"_STAFF NOTIFIED_: @SiCKRAGETV/owners @SiCKRAGETV/moderators" - issue = gh.get_organization(gh_org).get_repo(gh_repo).create_issue("[APP SUBMITTED]: " + curError.title, message) + issue = gh.get_organization(gh_org).get_repo(gh_repo).create_issue("[APP SUBMITTED]: " + str(curError.title), message) if issue: self.log('Your issue ticket #%s was submitted successfully!' % issue.number) From ecc7839cf7e6157efee67b80e69fcd4300a5dad6 Mon Sep 17 00:00:00 2001 From: TagForce Date: Fri, 23 Jan 2015 22:16:03 +0100 Subject: [PATCH 074/156] Fix for issue #358 - Renamer now correctly handles metadata files that have add-ons to the filename itself (fixes https://github.com/SiCKRAGETV/sickrage-issues/issues/358) - Renamer now correctly handles subfolders for metadata (fixes MediaBrowser and TiVO metadata renaming issues) --- sickbeard/postProcessor.py | 13 ++++++++++--- sickbeard/tv.py | 15 ++++++++++++--- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/sickbeard/postProcessor.py b/sickbeard/postProcessor.py index d4d2b03f..e3f23023 100644 --- a/sickbeard/postProcessor.py +++ b/sickbeard/postProcessor.py @@ -19,6 +19,7 @@ from __future__ import with_statement import glob +import fnmatch import os import re import subprocess @@ -154,13 +155,19 @@ class PostProcessor(object): Returns: A list containing all files which are associated to the given file """ + def recursive_glob(treeroot, pattern): + results = [] + for base, dirs, files in os.walk(treeroot): + goodfiles = fnmatch.filter(files, pattern) + results.extend(os.path.join(base, f) for f in goodfiles) + return results if not file_path: return [] file_path_list = [] - base_name = file_path.rpartition('.')[0] + base_name = ek.ek(os.path.basename, file_path).rpartition('.')[0] if not base_name_only: base_name = base_name + '.' @@ -171,8 +178,8 @@ class PostProcessor(object): # don't confuse glob with chars we didn't mean to use base_name = re.sub(r'[\[\]\*\?]', r'[\g<0>]', base_name) - - for associated_file_path in ek.ek(glob.glob, base_name + '*'): + + for associated_file_path in ek.ek(recursive_glob, self.folder_path, base_name + '*'): # only add associated to list if associated_file_path == file_path: continue diff --git a/sickbeard/tv.py b/sickbeard/tv.py index 8c3f6695..1d9ca294 100644 --- a/sickbeard/tv.py +++ b/sickbeard/tv.py @@ -2428,7 +2428,7 @@ class TVEpisode(object): return related_files = postProcessor.PostProcessor(self.location).list_associated_files( - self.location) + self.location, base_name_only=True) if self.show.subtitles and sickbeard.SUBTITLES_DIR != '': related_subs = postProcessor.PostProcessor(self.location).list_associated_files(sickbeard.SUBTITLES_DIR, @@ -2442,8 +2442,17 @@ class TVEpisode(object): # move related files for cur_related_file in related_files: - cur_result = helpers.rename_ep_file(cur_related_file, absolute_proper_path, - absolute_current_path_no_ext_length) + #We need to fix something here because related files can be in subfolders and the original code doesn't handle this (at all) + cur_related_dir = ek.ek(os.path.dirname, ek.ek(os.path.abspath, cur_related_file)) + subfolder = cur_related_dir.replace(ek.ek(os.path.dirname, ek.ek(os.path.abspath, self.location)), '') + #We now have a subfolder. We need to add that to the absolute_proper_path. + #First get the absolute proper-path dir + proper_related_dir = ek.ek(os.path.dirname, ek.ek(os.path.abspath, absolute_proper_path + file_ext)) + proper_related_path = absolute_proper_path.replace(proper_related_dir, proper_related_dir + subfolder) + + + cur_result = helpers.rename_ep_file(cur_related_file, proper_related_path, + absolute_current_path_no_ext_length + len(subfolder)) if not cur_result: logger.log(str(self.indexerid) + u": Unable to rename file " + cur_related_file, logger.ERROR) From c9085a3ac667944301d628636e718a22b097a8eb Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Fri, 23 Jan 2015 16:43:41 -0500 Subject: [PATCH 075/156] Fix number of lines submitted. --- sickbeard/logger.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/logger.py b/sickbeard/logger.py index 0b326509..303d3cc1 100644 --- a/sickbeard/logger.py +++ b/sickbeard/logger.py @@ -171,7 +171,7 @@ class Logger(object): if match: level = match.group(2) if reverseNames[level] == ERROR: - paste_data = "".join(log_data[i:50]) + paste_data = "".join(log_data[i:i+50]) if paste_data: gist = gh.get_user().create_gist(True, {"sickrage.log": InputFileContent(paste_data)}) break From e96ad42c5da8588de3f232654e94e7ef14ee701d Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Fri, 23 Jan 2015 21:45:22 -0500 Subject: [PATCH 076/156] Fix access to webcal without password. --- sickbeard/webserve.py | 12 ++++++++++++ sickbeard/webserveInit.py | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index b6f023f2..90be1c64 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -521,6 +521,18 @@ class WebRoot(WebHandler): return t.respond() + +class CalendarHandler(BaseHandler): + def get(self, *args, **kwargs): + if sickbeard.CALENDAR_UNPROTECTED: + self.write(self.calendar()) + else: + self.calendar_auth() + + @authenticated + def calendar_auth(self): + self.write(self.calendar()) + # Raw iCalendar implementation by Pedro Jose Pereira Vieito (@pvieito). # # iCalendar (iCal) - Standard RFC 5545 diff --git a/sickbeard/webserveInit.py b/sickbeard/webserveInit.py index 2192233a..713e6a7d 100644 --- a/sickbeard/webserveInit.py +++ b/sickbeard/webserveInit.py @@ -3,7 +3,7 @@ import threading import sys import sickbeard -from sickbeard.webserve import LoginHandler, LogoutHandler, KeyHandler +from sickbeard.webserve import LoginHandler, LogoutHandler, KeyHandler, CalendarHandler from sickbeard.webapi import ApiHandler from sickbeard import logger from sickbeard.helpers import create_https_certificates, generateApiKey @@ -93,6 +93,11 @@ class SRWebServer(threading.Thread): # webui handlers ] + route.get_routes(self.options['web_root'])) + # Web calendar handler (Needed because option Unprotected calendar) + self.app.add_handlers('.*$', [ + (r'%s/calendar(/?.*)' % self.options['web_root'], CalendarHandler), + ]) + # Static File Handlers self.app.add_handlers(".*$", [ # favicon From 0888942820ce1a4131528f545d4ee8702cdf5f5e Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Fri, 23 Jan 2015 22:11:54 -0500 Subject: [PATCH 077/156] Fix wrong url handler --- sickbeard/webserveInit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/webserveInit.py b/sickbeard/webserveInit.py index 713e6a7d..6ddb53a5 100644 --- a/sickbeard/webserveInit.py +++ b/sickbeard/webserveInit.py @@ -95,7 +95,7 @@ class SRWebServer(threading.Thread): # Web calendar handler (Needed because option Unprotected calendar) self.app.add_handlers('.*$', [ - (r'%s/calendar(/?.*)' % self.options['web_root'], CalendarHandler), + (r'%s/calendar' % self.options['web_root'], CalendarHandler), ]) # Static File Handlers From 6c1ef84d1b1de827f44d89e97f7f16a0bcec254e Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Sat, 24 Jan 2015 14:00:09 -0500 Subject: [PATCH 078/156] Add a notice to inform the user about the current TVRage's indexer implementation missing the ability to retrieve specials. --- gui/slick/interfaces/default/home_newShow.tmpl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gui/slick/interfaces/default/home_newShow.tmpl b/gui/slick/interfaces/default/home_newShow.tmpl index de6f1345..a82221c6 100644 --- a/gui/slick/interfaces/default/home_newShow.tmpl +++ b/gui/slick/interfaces/default/home_newShow.tmpl @@ -60,7 +60,8 @@   @@ -69,6 +70,7 @@

* This will only affect the language of the retrieved metadata file contents and episode filenames.
This DOES NOT allow SickRage to download non-english TV episodes!
+ ** The indexer implementation doesn't currently support specials.


#end if From f20bf1a45eabb29a0e7f06603dacbe1ef41e6fd4 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Sat, 24 Jan 2015 17:20:26 -0500 Subject: [PATCH 079/156] Add a missing space --- gui/slick/interfaces/default/home_newShow.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/slick/interfaces/default/home_newShow.tmpl b/gui/slick/interfaces/default/home_newShow.tmpl index a82221c6..e41bd8f0 100644 --- a/gui/slick/interfaces/default/home_newShow.tmpl +++ b/gui/slick/interfaces/default/home_newShow.tmpl @@ -61,7 +61,7 @@ #for $indexer in $indexers + #if $indexers[$indexer] == 'TVRage' then ''.join(($indexers[$indexer], ' **')) else $indexers[$indexer]# #end for   From b9cbc661d4b6865fed8c2482519c32f3c7029509 Mon Sep 17 00:00:00 2001 From: Fernando Date: Sun, 25 Jan 2015 01:17:17 -0200 Subject: [PATCH 080/156] Try to fix issue #258 SiCKRAGETV/sickrage-issues#258 related to: SiCKRAGETV/sickrage-issues#471 --- tornado/iostream.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tornado/iostream.py b/tornado/iostream.py index eced6d64..772aa4db 100644 --- a/tornado/iostream.py +++ b/tornado/iostream.py @@ -934,8 +934,9 @@ class IOStream(BaseIOStream): return self.socket def close_fd(self): - self.socket.close() - self.socket = None + if self.socket is not None: + self.socket.close() + self.socket = None def get_fd_error(self): errno = self.socket.getsockopt(socket.SOL_SOCKET, From 2f9362c74cbf4530a6af5341af3fecd8c1f21a1b Mon Sep 17 00:00:00 2001 From: Tawmmm Date: Sun, 25 Jan 2015 16:49:46 +0000 Subject: [PATCH 081/156] Update helpers.py Ignore partially synced files from BTSync 2.0 Alpha --- sickbeard/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 8bf157ab..cd4b2a21 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -127,7 +127,7 @@ def replaceExtension(filename, newExt): def isSyncFile(filename): extension = filename.rpartition(".")[2].lower() - if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part': + if extension == '!sync' or extension == 'lftp-pget-status' or extension == 'part' or extension == 'bts': return True else: return False From dba4d17603b779803a561e0332ced7ac0648c4d3 Mon Sep 17 00:00:00 2001 From: "M. Adam Kendall" Date: Sun, 25 Jan 2015 15:14:57 -0500 Subject: [PATCH 082/156] Update to Trakt.tv API 2.0 --- .../default/config_notifications.tmpl | 10 --- .../interfaces/default/trendingShows.tmpl | 16 ++-- gui/slick/js/configNotifications.js | 14 +--- gui/slick/js/recommendedShows.js | 1 + lib/trakt/trakt.py | 51 +++++++++--- sickbeard/__init__.py | 7 +- sickbeard/notifiers/trakt.py | 79 +++++++++---------- sickbeard/traktChecker.py | 66 +++++++++++----- sickbeard/webserve.py | 28 ++++--- 9 files changed, 151 insertions(+), 121 deletions(-) diff --git a/gui/slick/interfaces/default/config_notifications.tmpl b/gui/slick/interfaces/default/config_notifications.tmpl index f1919d9d..87076a76 100644 --- a/gui/slick/interfaces/default/config_notifications.tmpl +++ b/gui/slick/interfaces/default/config_notifications.tmpl @@ -1390,16 +1390,6 @@ password of your Trakt account. -
- - -
#else #for $cur_show in $trending_shows: - #set $image = re.sub(r'(?im)(.*)(\..*?)$', r'\1-300\2', $cur_show['images']['poster'], 0) + #set $show_url = 'http://www.trakt.tv/shows/%s' % $cur_show['show']['ids']['slug'] -
+
- +
- <%= (cur_show['title'], ' ')[ '' == cur_show['title']] %> + <%= (cur_show['show']['title'], ' ')[ '' == cur_show['show']['title']] %>
-

$cur_show['ratings']['percentage']%

- $cur_show['ratings']['votes'] votes - +

$cur_show['show']['rating']

+ $cur_show['show']['votes'] votes + $cur_show['watchers'] watchers
diff --git a/gui/slick/js/configNotifications.js b/gui/slick/js/configNotifications.js index d62ceed4..f85806c6 100644 --- a/gui/slick/js/configNotifications.js +++ b/gui/slick/js/configNotifications.js @@ -295,18 +295,12 @@ $(document).ready(function(){ $('#testFreeMobile').prop('disabled', false); }); }); - + $('#testTrakt').click(function () { - var trakt_api = $.trim($('#trakt_api').val()); var trakt_username = $.trim($('#trakt_username').val()); var trakt_password = $.trim($('#trakt_password').val()); - if (!trakt_api || !trakt_username || !trakt_password) { + if (!trakt_username || !trakt_password) { $('#testTrakt-result').html('Please fill out the necessary fields above.'); - if (!trakt_api) { - $('#trakt_api').addClass('warning'); - } else { - $('#trakt_api').removeClass('warning'); - } if (!trakt_username) { $('#trakt_username').addClass('warning'); } else { @@ -319,10 +313,10 @@ $(document).ready(function(){ } return; } - $('#trakt_api,#trakt_username,#trakt_password').removeClass('warning'); + $('#trakt_username,#trakt_password').removeClass('warning'); $(this).prop('disabled', true); $('#testTrakt-result').html(loading); - $.get(sbRoot + '/home/testTrakt', {'api': trakt_api, 'username': trakt_username, 'password': trakt_password}) + $.get(sbRoot + '/home/testTrakt', {'username': trakt_username, 'password': trakt_password}) .done(function (data) { $('#testTrakt-result').html(data); $('#testTrakt').prop('disabled', false); diff --git a/gui/slick/js/recommendedShows.js b/gui/slick/js/recommendedShows.js index caec10d9..9f7165b3 100644 --- a/gui/slick/js/recommendedShows.js +++ b/gui/slick/js/recommendedShows.js @@ -1,4 +1,5 @@ $(document).ready(function () { + $('#searchResults').html(' loading recommended shows...'); function getRecommendedShows() { $.getJSON(sbRoot + '/home/addShows/getRecommendedShows', {}, function (data) { var firstResult = true; diff --git a/lib/trakt/trakt.py b/lib/trakt/trakt.py index c802cd40..86004bf1 100644 --- a/lib/trakt/trakt.py +++ b/lib/trakt/trakt.py @@ -1,27 +1,52 @@ import requests +import json +from sickbeard import logger -from requests.auth import HTTPBasicAuth from exceptions import traktException, traktAuthException, traktServerBusy class TraktAPI(): - def __init__(self, apikey, username=None, password=None, use_https=False, timeout=5): - self.apikey = apikey + def __init__(self, apikey, username=None, password=None, timeout=5): self.username = username self.password = password - - self.protocol = 'https://' if use_https else 'http://' self.timeout = timeout + self.api_url = 'https://api.trakt.tv/' + self.headers = { + 'Content-Type': 'application/json', + 'trakt-api-version': '2', + 'trakt-api-key': apikey, + } def validateAccount(self): - return self.traktRequest("account/test/%APIKEY%", method='POST') + if hasattr(self, 'token'): + del(self.token) + data = { + 'login': self.username, + 'password': self.password + } + try: + resp = requests.request('POST', self.api_url+"auth/login", + headers=self.headers, data=json.dumps(data)) + resp.raise_for_status() + resp = resp.json() + except (requests.HTTPError, requests.ConnectionError) as e: + if e.response.status_code == 401: + raise traktAuthException(e) + if 'token' in resp: + self.token = resp['token'] + return True + return False - def traktRequest(self, url, data=None, method='GET'): - base_url = self.protocol + 'api.trakt.tv/%s' % url.replace('%APIKEY%', self.apikey).replace('%USER%', - self.username) + def traktRequest(self, path, data=None, method='GET'): + url = self.api_url + path + headers = self.headers + if not getattr(self, 'token', None): + self.validateAccount() + headers['trakt-user-login'] = self.username + headers['trakt-user-token'] = self.token # request the URL from trakt and parse the result as json try: - resp = requests.request(method, base_url, auth=HTTPBasicAuth(self.username, self.password), data=data if data else []) + resp = requests.request(method, url, headers=headers, data=json.dumps(data) if data else []) # check for http errors and raise if any are present resp.raise_for_status() @@ -29,7 +54,11 @@ class TraktAPI(): # convert response to json resp = resp.json() except (requests.HTTPError, requests.ConnectionError) as e: - if e.response.status_code == 401: + if e.response.status_code == 502: + # Retry the request, cloudflare had a proxying issue + logger.log(u"Retrying trakt api request: %s" % path, logger.WARNING) + self.traktRequest(path, data, method) + elif e.response.status_code == 401: raise traktAuthException(e) elif e.response.status_code == 503: raise traktServerBusy(e) diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index 531ac5bb..504bfe89 100755 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -392,7 +392,6 @@ SYNOLOGYNOTIFIER_NOTIFY_ONSUBTITLEDOWNLOAD = False USE_TRAKT = False TRAKT_USERNAME = None TRAKT_PASSWORD = None -TRAKT_API = '' TRAKT_REMOVE_WATCHLIST = False TRAKT_REMOVE_SERIESLIST = False TRAKT_USE_WATCHLIST = False @@ -481,7 +480,7 @@ REQUIRE_WORDS = "" CALENDAR_UNPROTECTED = False TMDB_API_KEY = 'edc5f123313769de83a71e157758030b' -TRAKT_API_KEY = 'abd806c54516240c76e4ebc9c5ccf394' +TRAKT_API_KEY = 'd4161a7a106424551add171e5470112e4afdaf2438e6ef2fe0548edc75924868' FANART_API_KEY = '9b3afaf26f6241bdb57d6cc6bd798da7' __INITIALIZED__ = False @@ -502,7 +501,7 @@ def initialize(consoleLogging=True): TORRENT_USERNAME, TORRENT_PASSWORD, TORRENT_HOST, TORRENT_PATH, TORRENT_SEED_TIME, TORRENT_PAUSED, TORRENT_HIGH_BANDWIDTH, TORRENT_LABEL, TORRENT_LABEL_ANIME, TORRENT_VERIFY_CERT, \ USE_KODI, KODI_ALWAYS_ON, KODI_NOTIFY_ONSNATCH, KODI_NOTIFY_ONDOWNLOAD, KODI_NOTIFY_ONSUBTITLEDOWNLOAD, KODI_UPDATE_FULL, KODI_UPDATE_ONLYFIRST, \ KODI_UPDATE_LIBRARY, KODI_HOST, KODI_USERNAME, KODI_PASSWORD, BACKLOG_FREQUENCY, \ - USE_TRAKT, TRAKT_USERNAME, TRAKT_PASSWORD, TRAKT_API, TRAKT_REMOVE_WATCHLIST, TRAKT_USE_WATCHLIST, TRAKT_METHOD_ADD, TRAKT_START_PAUSED, traktCheckerScheduler, TRAKT_USE_RECOMMENDED, TRAKT_SYNC, TRAKT_DEFAULT_INDEXER, TRAKT_REMOVE_SERIESLIST, \ + USE_TRAKT, TRAKT_USERNAME, TRAKT_PASSWORD, TRAKT_REMOVE_WATCHLIST, TRAKT_USE_WATCHLIST, TRAKT_METHOD_ADD, TRAKT_START_PAUSED, traktCheckerScheduler, TRAKT_USE_RECOMMENDED, TRAKT_SYNC, TRAKT_DEFAULT_INDEXER, TRAKT_REMOVE_SERIESLIST, \ USE_PLEX, PLEX_NOTIFY_ONSNATCH, PLEX_NOTIFY_ONDOWNLOAD, PLEX_NOTIFY_ONSUBTITLEDOWNLOAD, PLEX_UPDATE_LIBRARY, \ PLEX_SERVER_HOST, PLEX_HOST, PLEX_USERNAME, PLEX_PASSWORD, DEFAULT_BACKLOG_FREQUENCY, MIN_BACKLOG_FREQUENCY, BACKLOG_STARTUP, SKIP_REMOVED_FILES, \ showUpdateScheduler, __INITIALIZED__, LAUNCH_BROWSER, UPDATE_SHOWS_ON_START, TRASH_REMOVE_SHOW, TRASH_ROTATE_LOGS, SORT_ARTICLE, showList, loadingShowList, \ @@ -910,7 +909,6 @@ def initialize(consoleLogging=True): USE_TRAKT = bool(check_setting_int(CFG, 'Trakt', 'use_trakt', 0)) TRAKT_USERNAME = check_setting_str(CFG, 'Trakt', 'trakt_username', '', censor_log=True) TRAKT_PASSWORD = check_setting_str(CFG, 'Trakt', 'trakt_password', '', censor_log=True) - TRAKT_API = check_setting_str(CFG, 'Trakt', 'trakt_api', '', censor_log=True) TRAKT_REMOVE_WATCHLIST = bool(check_setting_int(CFG, 'Trakt', 'trakt_remove_watchlist', 0)) TRAKT_REMOVE_SERIESLIST = bool(check_setting_int(CFG, 'Trakt', 'trakt_remove_serieslist', 0)) TRAKT_USE_WATCHLIST = bool(check_setting_int(CFG, 'Trakt', 'trakt_use_watchlist', 0)) @@ -1781,7 +1779,6 @@ def save_config(): new_config['Trakt']['use_trakt'] = int(USE_TRAKT) new_config['Trakt']['trakt_username'] = TRAKT_USERNAME new_config['Trakt']['trakt_password'] = helpers.encrypt(TRAKT_PASSWORD, ENCRYPTION_VERSION) - new_config['Trakt']['trakt_api'] = TRAKT_API new_config['Trakt']['trakt_remove_watchlist'] = int(TRAKT_REMOVE_WATCHLIST) new_config['Trakt']['trakt_remove_serieslist'] = int(TRAKT_REMOVE_SERIESLIST) new_config['Trakt']['trakt_use_watchlist'] = int(TRAKT_USE_WATCHLIST) diff --git a/sickbeard/notifiers/trakt.py b/sickbeard/notifiers/trakt.py index 39f958ca..bf809e40 100644 --- a/sickbeard/notifiers/trakt.py +++ b/sickbeard/notifiers/trakt.py @@ -42,7 +42,7 @@ class TraktNotifier: def update_library(self, ep_obj): """ Sends a request to trakt indicating that the given episode is part of our library. - + ep_obj: The TVEpisode object to add to trakt """ @@ -53,82 +53,75 @@ class TraktNotifier: try: # URL parameters data = { - 'title': ep_obj.show.name, - 'year': ep_obj.show.startyear, - 'episodes': [{ - 'season': ep_obj.season, - 'episode': ep_obj.episode - }] + 'shows': [ + { + 'title': ep_obj.show.name, + 'year': ep_obj.show.startyear, + 'ids': {}, + 'seasons': [ + { + 'number': ep_obj.season, + 'episodes': [ + { + 'number': ep_obj.episode + } + ] + } + ] + } + ] } if trakt_id == 'tvdb_id': - data[trakt_id] = ep_obj.show.indexerid + data['shows'][0]['ids']['tvdb'] = ep_obj.show.indexerid + else: + data['shows'][0]['ids']['tvrage'] = ep_obj.show.indexerid # update library - trakt_api.traktRequest("show/episode/library/%APIKEY%", data, method='POST') + trakt_api.traktRequest("sync/collection", data, method='POST') # remove from watchlist if sickbeard.TRAKT_REMOVE_WATCHLIST: - trakt_api.traktRequest("show/episode/unwatchlist/%APIKEY%", data, method='POST') + trakt_api.traktRequest("sync/watchlist/remove", data, method='POST') if sickbeard.TRAKT_REMOVE_SERIESLIST: data = { 'shows': [ { 'title': ep_obj.show.name, - 'year': ep_obj.show.startyear + 'year': ep_obj.show.startyear, + 'ids': {} } ] } if trakt_id == 'tvdb_id': - data['shows'][0][trakt_id] = ep_obj.show.indexerid + data['shows'][0]['ids']['tvdb'] = ep_obj.show.indexerid + else: + data['shows'][0]['ids']['tvrage'] = ep_obj.show.indexerid - trakt_api.traktRequest("show/unwatchlist/%APIKEY%", data, method='POST') + trakt_api.traktRequest("sync/watchlist/remove", data, method='POST') - # Remove all episodes from episode watchlist - # Start by getting all episodes in the watchlist - watchlist = trakt_api.traktRequest("user/watchlist/episodes.json/%APIKEY%/%USER%") - - # Convert watchlist to only contain current show - if watchlist: - for show in watchlist: - if show[trakt_id] == ep_obj.show.indexerid: - data_show = { - 'title': show['title'], - trakt_id: show[trakt_id], - 'episodes': [] - } - - # Add series and episode (number) to the array - for episodes in show['episodes']: - ep = {'season': episodes['season'], 'episode': episodes['number']} - data_show['episodes'].append(ep) - - trakt_api.traktRequest("show/episode/unwatchlist/%APIKEY%", data_show, method='POST') except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) - def test_notify(self, api, username, password): + def test_notify(self, username, password): """ Sends a test notification to trakt with the given authentication info and returns a boolean representing success. - + api: The api string to use username: The username to use password: The password to use - + Returns: True if the request succeeded, False otherwise """ - - trakt_api = TraktAPI(api, username, password) - try: - if trakt_api.validateAccount(): - return "Test notice sent successfully to Trakt" + trakt_api = TraktAPI(sickbeard.TRAKT_API_KEY, username, password) + trakt_api.validateAccount() + return "Test notice sent successfully to Trakt" except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) - - return "Test notice failed to Trakt: %s" % ex(e) + return "Test notice failed to Trakt: %s" % ex(e) notifier = TraktNotifier diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py index 2c14b069..b29953c4 100644 --- a/sickbeard/traktChecker.py +++ b/sickbeard/traktChecker.py @@ -19,6 +19,7 @@ import os import traceback import datetime +import json import sickbeard from sickbeard import encodingKludge as ek @@ -59,7 +60,7 @@ class TraktChecker(): traktShow = None try: - library = self.trakt_api.traktRequest("user/library/shows/all.json/%APIKEY%/%USER%") + library = self.trakt_api.traktRequest("sync/collection/shows") or [] if not library: logger.log(u"Could not connect to trakt service, aborting library check", logger.ERROR) @@ -69,7 +70,7 @@ class TraktChecker(): logger.log(u"No shows found in your library, aborting library update", logger.DEBUG) return - traktShow = filter(lambda x: int(indexerid) in [int(x['tvdb_id']) or 0, int(x['tvrage_id'])] or 0, library) + traktShow = filter(lambda x: int(indexerid) in [int(x['show']['ids']['tvdb']) or 0, int(x['show']['ids']['tvrage'])] or 0, library) except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) @@ -83,14 +84,26 @@ class TraktChecker(): def removeShowFromTraktLibrary(self, show_obj): if self.findShow(show_obj.indexer, show_obj.indexerid): - # URL parameters - data = {'tvdb_id': helpers.mapIndexersToShow(show_obj)[1], 'title': show_obj.name, - 'year': show_obj.startyear} + trakt_id = sickbeard.indexerApi(show_obj.indexer).config['trakt_id'] + # URL parameters + data = { + 'shows': [ + { + 'title': show_obj.name, + 'year': show_obj.startyear, + 'ids': {} + } + ] + } + if trakt_id == 'tvdb_id': + data['shows'][0]['ids']['tvdb'] = show_obj.indexerid + else: + data['shows'][0]['ids']['tvrage'] = show_obj.indexerid logger.log(u"Removing " + show_obj.name + " from trakt.tv library", logger.DEBUG) try: - self.trakt_api.traktRequest("show/unlibrary/%APIKEY%", data, method='POST') + self.trakt_api.traktRequest("sync/collection/remove", data, method='POST') except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) pass @@ -105,16 +118,27 @@ class TraktChecker(): data = {} if not self.findShow(show_obj.indexer, show_obj.indexerid): + trakt_id = sickbeard.indexerApi(show_obj.indexer).config['trakt_id'] # URL parameters - data['tvdb_id'] = helpers.mapIndexersToShow(show_obj)[1] - data['title'] = show_obj.name - data['year'] = show_obj.startyear + data = { + 'shows': [ + { + 'title': show_obj.name, + 'year': show_obj.startyear, + 'ids': {} + } + ] + } + if trakt_id == 'tvdb_id': + data['shows'][0]['ids']['tvdb'] = show_obj.indexerid + else: + data['shows'][0]['ids']['tvrage'] = show_obj.indexerid if len(data): logger.log(u"Adding " + show_obj.name + " to trakt.tv library", logger.DEBUG) try: - self.trakt_api.traktRequest("show/library/%APIKEY%", data, method='POST') + self.trakt_api.traktRequest("sync/collection", data, method='POST') except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) return @@ -123,7 +147,7 @@ class TraktChecker(): logger.log(u"Starting trakt show watchlist check", logger.DEBUG) try: - watchlist = self.trakt_api.traktRequest("user/watchlist/shows.json/%APIKEY%/%USER%") + watchlist = self.trakt_api.traktRequest("sync/watchlist/shows") except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) return @@ -135,14 +159,14 @@ class TraktChecker(): for show in watchlist: indexer = int(sickbeard.TRAKT_DEFAULT_INDEXER) if indexer == 2: - indexer_id = int(show["tvrage_id"]) + indexer_id = int(show["show"]["ids"]["tvrage"]) else: - indexer_id = int(show["tvdb_id"]) + indexer_id = int(show["show"]["ids"]["tvdb"]) if int(sickbeard.TRAKT_METHOD_ADD) != 2: - self.addDefaultShow(indexer, indexer_id, show["title"], SKIPPED) + self.addDefaultShow(indexer, indexer_id, show["show"]["title"], SKIPPED) else: - self.addDefaultShow(indexer, indexer_id, show["title"], WANTED) + self.addDefaultShow(indexer, indexer_id, show["show"]["title"], WANTED) if int(sickbeard.TRAKT_METHOD_ADD) == 1: newShow = helpers.findCertainShow(sickbeard.showList, indexer_id) @@ -158,7 +182,7 @@ class TraktChecker(): logger.log(u"Starting trakt episode watchlist check", logger.DEBUG) try: - watchlist = self.trakt_api.traktRequest("user/watchlist/episodes.json/%APIKEY%/%USER%") + watchlist = self.trakt_api.traktRequest("sync/watchlist/episodes") except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) return @@ -170,22 +194,22 @@ class TraktChecker(): for show in watchlist: indexer = int(sickbeard.TRAKT_DEFAULT_INDEXER) if indexer == 2: - indexer_id = int(show["tvrage_id"]) + indexer_id = int(show["show"]["ids"]["tvrage"]) else: - indexer_id = int(show["tvdb_id"]) + indexer_id = int(show["show"]["ids"]["tvdb"]) - self.addDefaultShow(indexer, indexer_id, show["title"], SKIPPED) + self.addDefaultShow(indexer, indexer_id, show["show"]["title"], SKIPPED) newShow = helpers.findCertainShow(sickbeard.showList, indexer_id) try: if newShow and newShow.indexer == indexer: - for episode in show["episodes"]: + for episode in show["episode"]: if newShow is not None: self.setEpisodeToWanted(newShow, episode["season"], episode["number"]) else: self.todoWanted.append((indexer_id, episode["season"], episode["number"])) except TypeError: - logger.log(u"Could not parse the output from trakt for " + show["title"], logger.DEBUG) + logger.log(u"Could not parse the output from trakt for " + show["show"]["title"], logger.DEBUG) def addDefaultShow(self, indexer, indexer_id, name, status): """ diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index b6f023f2..41b179e5 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -928,9 +928,9 @@ class Home(WebRoot): "dbloc": dbloc} - def testTrakt(self, api=None, username=None, password=None): + def testTrakt(self, username=None, password=None): # self.set_header('Cache-Control', 'max-age=0,no-cache,no-store') - return notifiers.trakt_notifier.test_notify(api, username, password) + return notifiers.trakt_notifier.test_notify(username, password) def loadShowNotifyLists(self): @@ -2221,16 +2221,17 @@ class HomeAddShows(Home): trakt_api = TraktAPI(sickbeard.TRAKT_API_KEY, sickbeard.TRAKT_USERNAME, sickbeard.TRAKT_PASSWORD) try: - recommendedlist = trakt_api.traktRequest("recommendations/shows.json/%APIKEY%", method='POST') + recommendedlist = trakt_api.traktRequest("recommendations/shows?extended=full,images") if recommendedlist: - indexers = ['tvdb_id', 'tvrage_id'] + indexers = ['tvdb', 'tvrage'] map(final_results.append, ( - [int(show[indexers[sickbeard.TRAKT_DEFAULT_INDEXER - 1]]), show['url'], show['title'], - show['overview'], - datetime.date.fromtimestamp(int(show['first_aired']) / 1000.0).strftime('%Y%m%d')] + [int(show['show']['ids'][indexers[sickbeard.TRAKT_DEFAULT_INDEXER - 1]]), + 'http://www.trakt.tv/shows/%s' % show['show']['ids']['slug'], show['show']['title'], + show['show']['overview'], + datetime.date.fromtimestamp(int(show['show']['first_aired']) / 1000.0).strftime('%Y%m%d')] for show in recommendedlist if not helpers.findCertainShow(sickbeard.showList, [ - int(show[indexers[sickbeard.TRAKT_DEFAULT_INDEXER - 1]])]))) + int(show['show']['ids'][indexers[sickbeard.TRAKT_DEFAULT_INDEXER - 1]])]))) except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) @@ -2276,11 +2277,13 @@ class HomeAddShows(Home): trakt_api = TraktAPI(sickbeard.TRAKT_API_KEY, sickbeard.TRAKT_USERNAME, sickbeard.TRAKT_PASSWORD) try: - shows = trakt_api.traktRequest("shows/trending.json/%APIKEY%") or [] + shows = trakt_api.traktRequest("shows/trending?limit=50&extended=full,images") or [] for show in shows: try: + tvdb_id = int(show['show']['ids']['tvdb']) + tvrage_id = int(show['show']['ids']['tvrage'] or 0) if not helpers.findCertainShow(sickbeard.showList, - [int(show['tvdb_id']), int(show['tvrage_id'])]): + [tvdb_id, tvrage_id]): t.trending_shows += [show] except exceptions.MultipleShowObjectsException: continue @@ -4374,7 +4377,7 @@ class ConfigNotifications(Config): libnotify_notify_onsubtitledownload=None, use_nmj=None, nmj_host=None, nmj_database=None, nmj_mount=None, use_synoindex=None, use_nmjv2=None, nmjv2_host=None, nmjv2_dbloc=None, nmjv2_database=None, - use_trakt=None, trakt_username=None, trakt_password=None, trakt_api=None, + use_trakt=None, trakt_username=None, trakt_password=None, trakt_remove_watchlist=None, trakt_use_watchlist=None, trakt_method_add=None, trakt_start_paused=None, trakt_use_recommended=None, trakt_sync=None, trakt_default_indexer=None, trakt_remove_serieslist=None, @@ -4425,7 +4428,7 @@ class ConfigNotifications(Config): sickbeard.GROWL_NOTIFY_ONSUBTITLEDOWNLOAD = config.checkbox_to_value(growl_notify_onsubtitledownload) sickbeard.GROWL_HOST = config.clean_host(growl_host, default_port=23053) sickbeard.GROWL_PASSWORD = growl_password - + sickbeard.USE_FREEMOBILE = config.checkbox_to_value(use_freemobile) sickbeard.FREEMOBILE_NOTIFY_ONSNATCH = config.checkbox_to_value(freemobile_notify_onsnatch) sickbeard.FREEMOBILE_NOTIFY_ONDOWNLOAD = config.checkbox_to_value(freemobile_notify_ondownload) @@ -4490,7 +4493,6 @@ class ConfigNotifications(Config): sickbeard.USE_TRAKT = config.checkbox_to_value(use_trakt) sickbeard.TRAKT_USERNAME = trakt_username sickbeard.TRAKT_PASSWORD = trakt_password - sickbeard.TRAKT_API = trakt_api sickbeard.TRAKT_REMOVE_WATCHLIST = config.checkbox_to_value(trakt_remove_watchlist) sickbeard.TRAKT_REMOVE_SERIESLIST = config.checkbox_to_value(trakt_remove_serieslist) sickbeard.TRAKT_USE_WATCHLIST = config.checkbox_to_value(trakt_use_watchlist) From bb267905aaf07a5c52e4c2518207f7cf76d481fd Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Sun, 25 Jan 2015 16:14:20 -0500 Subject: [PATCH 083/156] Remove an extra apostrophe. --- sickbeard/webapi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/webapi.py b/sickbeard/webapi.py index 4406f240..9e882a25 100644 --- a/sickbeard/webapi.py +++ b/sickbeard/webapi.py @@ -130,7 +130,7 @@ class ApiHandler(RequestHandler): except:pass def _out_as_json(self, dict): - self.set_header("Content-Type", "application/json;charset=UTF-8'") + self.set_header("Content-Type", "application/json;charset=UTF-8") try: out = json.dumps(dict, indent=self.intent, ensure_ascii=False, sort_keys=True) callback = self.get_query_argument('callback', None) or self.get_query_argument('jsonp', None) From a3bb636df27d9363ad4cde5ef0eeae77a5afab77 Mon Sep 17 00:00:00 2001 From: "M. Adam Kendall" Date: Sun, 25 Jan 2015 19:14:17 -0500 Subject: [PATCH 084/156] Fix misplaced or to prevent Nonetype errors --- sickbeard/traktChecker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sickbeard/traktChecker.py b/sickbeard/traktChecker.py index b29953c4..00e26ced 100644 --- a/sickbeard/traktChecker.py +++ b/sickbeard/traktChecker.py @@ -70,7 +70,7 @@ class TraktChecker(): logger.log(u"No shows found in your library, aborting library update", logger.DEBUG) return - traktShow = filter(lambda x: int(indexerid) in [int(x['show']['ids']['tvdb']) or 0, int(x['show']['ids']['tvrage'])] or 0, library) + traktShow = filter(lambda x: int(indexerid) in [int(x['show']['ids']['tvdb'] or 0), int(x['show']['ids']['tvrage'] or 0)], library) except (traktException, traktAuthException, traktServerBusy) as e: logger.log(u"Could not connect to Trakt service: %s" % ex(e), logger.WARNING) From 2ef08d1c256d65163290eb843de27b453eb27de3 Mon Sep 17 00:00:00 2001 From: Alexandre Beloin Date: Sun, 25 Jan 2015 20:44:58 -0500 Subject: [PATCH 085/156] Use shutil.move instead of os.rename to move file as os.rename doesn't work across partition. --- sickbeard/helpers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index 8bf157ab..27168937 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -355,7 +355,7 @@ def copyFile(srcFile, destFile): def moveFile(srcFile, destFile): try: - ek.ek(os.rename, srcFile, destFile) + ek.ek(shutil.move, srcFile, destFile) fixSetGroupID(destFile) except OSError: copyFile(srcFile, destFile) @@ -399,7 +399,7 @@ def symlink(src, dst): def moveAndSymlinkFile(srcFile, destFile): try: - ek.ek(os.rename, srcFile, destFile) + ek.ek(shutil.move, srcFile, destFile) fixSetGroupID(destFile) ek.ek(symlink, destFile, srcFile) except: @@ -491,7 +491,7 @@ def rename_ep_file(cur_path, new_path, old_path_length=0): # move the file try: logger.log(u"Renaming file from " + cur_path + " to " + new_path) - ek.ek(os.rename, cur_path, new_path) + ek.ek(shutil.move, cur_path, new_path) except (OSError, IOError), e: logger.log(u"Failed renaming " + cur_path + " to " + new_path + ": " + ex(e), logger.ERROR) return False From 9cfc3e378821e3ba5c8491137fb81dc1d839b8b8 Mon Sep 17 00:00:00 2001 From: "M. Adam Kendall" Date: Sun, 25 Jan 2015 21:33:57 -0500 Subject: [PATCH 086/156] Make sure we're returning the result of the recursive request --- lib/trakt/trakt.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/trakt/trakt.py b/lib/trakt/trakt.py index 86004bf1..a66f3659 100644 --- a/lib/trakt/trakt.py +++ b/lib/trakt/trakt.py @@ -29,7 +29,11 @@ class TraktAPI(): resp.raise_for_status() resp = resp.json() except (requests.HTTPError, requests.ConnectionError) as e: - if e.response.status_code == 401: + if e.response.status_code == 502: + # Retry the request, cloudflare had a proxying issue + logger.log(u"Retrying trakt api request: auth/login", logger.WARNING) + return self.validateAccount() + elif e.response.status_code == 401: raise traktAuthException(e) if 'token' in resp: self.token = resp['token'] @@ -57,7 +61,7 @@ class TraktAPI(): if e.response.status_code == 502: # Retry the request, cloudflare had a proxying issue logger.log(u"Retrying trakt api request: %s" % path, logger.WARNING) - self.traktRequest(path, data, method) + return self.traktRequest(path, data, method) elif e.response.status_code == 401: raise traktAuthException(e) elif e.response.status_code == 503: From a1871e2d43ece9d85e1be98a5aca6c97b88b2686 Mon Sep 17 00:00:00 2001 From: "M. Adam Kendall" Date: Sun, 25 Jan 2015 22:31:53 -0500 Subject: [PATCH 087/156] Format the rating in whole percentage --- gui/slick/interfaces/default/trendingShows.tmpl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gui/slick/interfaces/default/trendingShows.tmpl b/gui/slick/interfaces/default/trendingShows.tmpl index 68a25f3d..89492837 100644 --- a/gui/slick/interfaces/default/trendingShows.tmpl +++ b/gui/slick/interfaces/default/trendingShows.tmpl @@ -88,9 +88,8 @@
-

$cur_show['show']['rating']

+

<%= int(cur_show['show']['rating']*10) %>%

$cur_show['show']['votes'] votes - $cur_show['watchers'] watchers From d7a60e293044388982456be279c238667c9daca4 Mon Sep 17 00:00:00 2001 From: flightlevel Date: Mon, 26 Jan 2015 20:56:18 +1100 Subject: [PATCH 088/156] FreshonTV now supports HTTPS Change HTTP to HTTPS as FreshonTV now supports secure connections --- sickbeard/providers/freshontv.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sickbeard/providers/freshontv.py b/sickbeard/providers/freshontv.py index a60b7989..e06e9bad 100755 --- a/sickbeard/providers/freshontv.py +++ b/sickbeard/providers/freshontv.py @@ -58,11 +58,11 @@ class FreshOnTVProvider(generic.TorrentProvider): self.cache = FreshOnTVCache(self) - self.urls = {'base_url': 'http://freshon.tv/', - 'login': 'http://freshon.tv/login.php?action=makelogin', - 'detail': 'http://freshon.tv/details.php?id=%s', - 'search': 'http://freshon.tv/browse.php?incldead=%s&words=0&cat=0&search=%s', - 'download': 'http://freshon.tv/download.php?id=%s&type=torrent', + self.urls = {'base_url': 'https://freshon.tv/', + 'login': 'https://freshon.tv/login.php?action=makelogin', + 'detail': 'https://freshon.tv/details.php?id=%s', + 'search': 'https://freshon.tv/browse.php?incldead=%s&words=0&cat=0&search=%s', + 'download': 'https://freshon.tv/download.php?id=%s&type=torrent', } self.url = self.urls['base_url'] @@ -317,4 +317,4 @@ class FreshOnTVCache(tvcache.TVCache): search_params = {'RSS': ['']} return {'entries': self.provider._doSearch(search_params)} -provider = FreshOnTVProvider() \ No newline at end of file +provider = FreshOnTVProvider() From 9c635f81ff484a2774f93ea0ea1073fc7b512f5d Mon Sep 17 00:00:00 2001 From: TagForce Date: Mon, 26 Jan 2015 16:13:42 +0100 Subject: [PATCH 089/156] Added option to display file sizes in Show page - Added option checkbox under General -> GUI (display filesizes) - Added filesize column on Show Page to display filesize when episode is Downloaded - Changed style min-width for Episode Name when display_filesize = True to keep episode names from wrapping around earlier on mobile devices. (min-width: 190px) --- .../interfaces/default/config_general.tmpl | 10 +++++++++- gui/slick/interfaces/default/displayShow.tmpl | 17 ++++++++++++++++- sickbeard/__init__.py | 5 ++++- sickbeard/webserve.py | 5 +++-- 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/gui/slick/interfaces/default/config_general.tmpl b/gui/slick/interfaces/default/config_general.tmpl index dca5fd3d..c67ffef0 100644 --- a/gui/slick/interfaces/default/config_general.tmpl +++ b/gui/slick/interfaces/default/config_general.tmpl @@ -244,7 +244,15 @@
- +
+ +
Scene AbsoluteName>NameFilesizeAirdateDownload + #if $epResult["file_size"]: + #set $file_size = $epResult["file_size"] / 1024 / 1024 + $file_size MB + #end if + #if int($epResult['airdate']) == 1 then 'never' else $sbdatetime.sbdatetime.sbfdate($sbdatetime.sbdatetime.convert_to_setting($network_timezones.parse_date_time($epResult['airdate'],$show.airs,$show.network)))# #if $epResult["subtitles"]: - #for $sub_lang in subliminal.language.language_list([x.strip() for x in $epResult["subtitles"].split(',')]): + #for $sub_lang in subliminal.language.language_list([x.strip() for x in $epResult["subtitles"].split(',') if x != ""]): #if sub_lang.alpha2 != "" ${sub_lang} #end if From 03ef4268810c8f8cb5ddd3072f7cc28f76811b4e Mon Sep 17 00:00:00 2001 From: MrJohnsson Date: Fri, 30 Jan 2015 18:43:35 +0100 Subject: [PATCH 104/156] Added IntelliJ IDEA specific gitignores --- .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d4c1ea9a..bbe886fa 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,9 @@ tests/failed.db *.sw? Session.vim .ropeproject/* +*.iml +.idea +*.ipr # OS generated files # ###################### @@ -48,7 +51,6 @@ ehthumbs.db Thumbs.db .directory *~ -/.idea/ *.torrent # Unrar Executable # From 7f5d0ff375e17d2d4de4d923995d9929a0084562 Mon Sep 17 00:00:00 2001 From: "M. Adam Kendall" Date: Fri, 30 Jan 2015 19:42:12 -0500 Subject: [PATCH 105/156] Make the timeout configurable --- gui/slick/interfaces/default/config_notifications.tmpl | 9 +++++++++ lib/trakt/trakt.py | 2 +- sickbeard/__init__.py | 5 ++++- sickbeard/notifiers/trakt.py | 4 ++-- sickbeard/traktChecker.py | 2 +- sickbeard/webserve.py | 9 +++++---- 6 files changed, 22 insertions(+), 9 deletions(-) diff --git a/gui/slick/interfaces/default/config_notifications.tmpl b/gui/slick/interfaces/default/config_notifications.tmpl index 1c64516c..4c5a8581 100644 --- a/gui/slick/interfaces/default/config_notifications.tmpl +++ b/gui/slick/interfaces/default/config_notifications.tmpl @@ -1399,6 +1399,15 @@ +
+ +
-
-
+

+ + Seconds to wait for Trakt API to respond. (Use 0 to wait forever) + +