// ==UserScript==
// @name oo.movie( VIP视频解析 + 豆瓣影视页净化 )
// @version 20.2.3
// @description VIP视频解析 + 豆瓣影视页净化。精选VIP解析,视频少广告,原网页解析,享受VIP的原画观影体验。手机端与电脑端通用。支持腾讯视频、爱奇艺、优酷、芒果TV、搜狐视频、PPTV、1905、乐视、土豆等网站。VIP解析评分排序,不同网站,越好用的解析越靠前。
// @author (o˘◡˘o)
// @namespace https://gitee.com/ecruos/oo
// @icon https://gw.alicdn.com/tfs/TB1ZvwSycbpK1RjSZFyXXX_qFXa-48-48.ico
// @license GPL License
// @include *
// ==/UserScript==
var 是 = true,
否 = false;
// 是 / 否
var 手机端是否允许原网页解析 = 否;
/**
* 用户自定义 VIP视频解析接口 → 后面自动补全要解析的网址
* 在`符号之间添加,一行一个,类似 SEARCH_SOURCES
* 支持格式如下:
http://xxx.com/?url=
解析名字 http://xxx.com/?url=
*/
var VIP解析 = `
`;
// ** 表示搜索时的关键词
var 搜索源 = `
豆瓣 https://search.douban.com/movie/subject_search?search_text=** https://m.douban.com/search/?type=movie&query=**
爱奇艺 https://m.iqiyi.com/search.html?source=default&key=** https://so.iqiyi.com/so/q_**
腾讯 https://m.v.qq.com/search.html?act=0&keyWord=** https://v.qq.com/x/search/?q=**
哔哩哔哩 https://m.bilibili.com/search.html?keyword=** https://search.bilibili.com/all?keyword=**
优酷 https://www.soku.com/m/y/video?q=** https://so.youku.com/search_video/q_**
芒果 https://m.mgtv.com/so/?k=** https://so.mgtv.com/so/k-**
搜狐 https://m.tv.sohu.com/upload/h5/m/mso.html?key=** https://so.tv.sohu.com/mts?wd=**
咪咕 http://www.miguvideo.com/mgs/website/prd/search.html?keywords=** http://m.miguvideo.com/mgs/msite/prd/search.html?#**
1905 https://vip.1905.com/Search?q=**
PPTV http://sou.pptv.com/s_video?kw=** https://msou.pptv.com/s_video/pg_result?keyword=**
乐视 http://m.le.com/search?wd=** http://so.le.com/s?wd=**
奈菲 https://www.nfmovies.com/search.php?page=1&searchword=**
残月 http://ys.23yue.cn/seacher-**.html
云播 https://m.yunbtv.com/vodsearch/-------------.html?wd=** https://www.yunbtv.com/vodsearch/-------------.html?wd=**
飞极速 http://m.feijisu8.com/search/** http://feijisu8.com/search/**
独播 https://www.duboku.net/vodsearch/-------------.html?wd=**
拾伍 https://www.shiwutv.com/vodsearch/-------------.html?wd=**
大全 http://01th.net/search/?wd=**
樱花 http://m.yhdm.tv/search/**/ http://www.yhdm.tv/search/**/
1090 https://1090ys.com/?c=search&sort=addtime&order=desc&page=1&wd=**
APP https://app.movie/index.php/vod/search.html?wd=**
八兔 http://www.8tutv.com/search/?category=0&q=**
Vipku http://www.2n65.cn/index.php/vod/search.html?wd=**
影迷 https://www.yingmiwo.com/vodsearch.html?wd=**
`;
/**
* VIP解析 + 换站搜索 + 网站净化
*
* name: 标识说明
* match: 匹配网址,正则或字符串
* hide: 要净化隐藏的css选择器
* css: 自定义css
* jump: 在搜索页要添加 换站搜索 的css选择器
* keyword: 在搜索页获取标题 → 换站搜索 的搜索词
* vip: 在播放页要添加 Vip解析列表 的css选择器
* title: 在播放页获取标题 → 换站搜索 的搜索词
* fixUrl: 解析时对播放网址进行变换,比如将手机端播放网址变成电脑端播放网址
*/
var BETTER_ADDONS = [
// 正版源
{
name: '哔哩哔哩·搜索',
match: /bilibili.com\/search|search.bilibili.com/,
jump: '#all-list | append, .index__board__src-search-board-'
},
{
name: '哔哩哔哩 - m',
match: /m\.bilibili\.com/,
sign: '.mg-footer-copyright',
hide:
'.index__openAppBtn__src-commonComponent-topArea-, .index__container__src-commonComponent-bottomOpenApp-, .bili-app, .recom-wrapper, .b-footer, .open-app-bar, .open-app-float, .more-review-wrapper'
},
{
name: '腾讯·搜索',
match: /v.qq.com\/(\w+\/)?search/,
jump: '#result, .wrapper_main > .mod_pages',
sign: '.copyright',
hide: '.tvp_app_bar'
},
{
name: '腾讯·播放页',
match: /v\.qq\.com\/(cover|play|x\/cover|x\/page|x\/play|x\/m\/cover|x\/m\/page|x\/m\/play)/,
vip: '#vip_title, .U_box_bg_a, .player_headline, .mod_video_info',
title: '.mod_video_info .video_title, ._main_title, .player_title',
fixUrl(url) {
// 腾讯视频移动端播放网址有变化,多数解析未适配,故暂时将移动端播放网址转换为电脑端播放网址
if (url.includes('cid=')) {
var cid = url.match(/cid=(\w+)/)[1];
var vid = url.match(/vid=(\w+)/);
vid = vid ? '/' + vid[1] : '';
return `https://v.qq.com/x/cover/${cid}${vid}.html`;
}
return url;
},
hide:
'.mod_source, .video_function, .mod_promotion, #vip_privilege, #vip_activity, .U_bg_b, .btn_open_v, .btn_openapp, #vip_header, .btn_user_hd, .mod_sideslip_privileges, .mod_game_rec, .mod_source, .mod_promotion, .mod_sideslip_h, .btn_open, .btn_pay, .mod_box_lastview, .mod_vip_popup, .mod_vip_popup + .mask_layer',
css: `
body, #vip_title {
padding-bottom: 0 !important;
}
.mod_episodes_numbers.is-vip .item {
width: auto;
padding: 0 1em;
}
.U_html_bg .container {
padding-bottom: 30px;
}
.mod_play .mod_player_viptips .btn_try {
left: 30%;
}`
},
{
name: '爱奇艺·搜索',
match: /m.iqiyi.com\/search|so.iqiyi.com/,
jump: '-.m-box, .search-con-page',
sign: '.m-footer',
hide: '.btn-ticket, .btn-yuyue, .btn-download, .m-iqyDown'
},
{
name: '爱奇艺·播放页',
match: /\.iqiyi\.com\/(a_|v_|w_|adv)/,
vip: 'div[name="m-videoInfo"], #block-C',
title: '#widget-videotitle, .video-title, .c-title-link, .player-title a',
sign: '.m-footer',
hide:
'.m-iqyDown, .header-login + div, .m-video-action, div[name="m-vipRights"], div[name="m-extendBar"], .m-iqylink-diversion, .m-iqylink-guide, .c-openVip, .c-score-btn, .m-videoUser-spacing, .m-pp-entrance, .m-hotWords-bottom, div[template-type="ALBUM"] .m-player-tip',
css: `
.page_play {
padding-bottom: 0;
}
div[name="m-videoInfo"] {
padding-top: 1em;
}
.m-box-items .oo-album-item {
border-radius: 0.05rem;
background-color: #e9ecef;
color: #495057;
padding: 0.5em 1em;
display: inline-flex;
justify-content: center;
align-items: center;
margin: 0.25em;
font-weight: bold;
}
.m-video-player #oo-player {
padding-top: 56.25%;
top: 50%;
transform: translateY(-50%);
}
`
},
{
name: '优酷·搜索',
match: /soku.com\/m.+q=|so.youku.com\/search_video/,
jump: '#bpmodule-main, .yk_result'
},
{
name: '优酷·播放页',
match: /m\.youku\.com\/a|m\.youku\.com\/v|v\.youku\.com\/v_/,
vip: '.h5-detail-info, .player-title',
title:
'.player-title .subtitle a, .module-name, .anthology-title-wrap .title, .title-link',
// fixUrl(url) {
// return url.replace('v.youku.com/v_show', 'm.youku.com/video');
// },
sign: '.copyright',
hide:
'.h5-detail-guide, .h5-detail-ad, .brief-btm, .smartBannerBtn, .cmt-user-action, #right-title-ad-banner, .Corner-container',
css: `
#bpmodule-playpage-lefttitle {
height: auto !important;
}`
},
{
name: '土豆·播放页',
match: /\.tudou.com\/v\//,
vip: '.play-video-desc, .td-play__baseinfo',
title: '.td-listbox__title, .video-desc-title',
hide:
'.video-player-topbar, .td-h5__player__appguide, #tudou-footer, .dropdown__panel__con'
},
{
name: '芒果·搜索',
match: /m.mgtv.com\/so\/|so.mgtv.com\/so/,
jump: '#paginator, .result-box .media',
keyword: /k[-=]([^&\?\/\.]+)/
},
{
name: '芒果·播放页',
match: /\.mgtv\.com\/(b|l)\//,
vip: ['.xuanji | before', '.v-panel-box'],
title: '.v-panel-title, .vt-txt',
sign: '.mg-footer-copyright',
hide:
'.ad-banner, .video-area-bar, .video-error .btn, .m-vip-list, .m-vip-list + div:not([class]), .toapp, .video-comment .ft, .mg-app-swip'
},
{
name: '搜狐·搜索',
match: /m.tv.sohu.com.+key=|so.tv.sohu.com.+wd=/,
jump: '.ssMore | before, .select-container | before'
},
{
name: '搜狐·播放页',
match: /film\.sohu\.com\/album\/|tv\.sohu\.com\/(v|phone_play_film)/,
vip:
'.title-wrap, .videoInfo, .tw-info, .player-detail, .movie-info-content',
title: '#vinfobox h2, .t-info, .movie-t h3',
fixUrl(url) {
if (/phone_play_film.+channeled=/.test(url)) {
var cid = url.match(/channeled=(\w+)/)[1];
var aid = url.match(/aid=(\w+)/)[1];
return `https://film.sohu.com/album/${aid}.html?channeled=${cid}`;
}
return url;
},
sign: '.links',
hide:
'.actv-banner, .btn-xz-app, .twinfo_iconwrap, .btn-comment-app, #ad_banner, .advertise, .main-ad-view-box, .foot.sohu-swiper, .app-star-vbox, .app-guess-vbox, .main-rec-view-box, .app-qianfan-box, .comment-empty-bg, .copyinfo, .ph-vbox, .btn_m_action, .btn-xz-app, #film_top_banner, .btn-comment-app',
css: `
.comment-empty-txt {
margin-bottom: 0;
}
.app-view-box + footer {
padding: 0;
opacity: 0.5;
}
#sohuplayer #menu {
z-index: 2147483647;
}`
},
{
name: '乐视·搜索',
match: /m.le.com\/search|so.le.com\/s/,
jump: '.column_tit | before, .Relate | before'
},
{
name: '乐视·播放页',
match: /\.le\.com\/(ptv\/vplay\/|vplay_)/,
vip: '.introduction_box, .briefIntro_left .info_list',
title: '.briefIntro_info .info_tit, #j-introduction h2',
hide: '.gamePromotion, .gamePromotionTxt, #j-leappMore, .lbzDaoliu, .arkBox'
},
{
name: '咪咕.cn·搜索',
match: /\.migu\.cn\/search\.html/,
jump: '.pagination, .copyright | before',
keyword: /content=([^&\?\/\.]+)/,
hide: '.down-btn'
},
{
name: '咪咕·搜索',
match: /\.miguvideo\.com\/.*search.html/,
jump: '.search-pagination, .search-main',
keyword: /keywords=([^&\?\/\.]+)|\?.*#([^&\?\/\.]+)/
},
{
name: '咪咕·播放页',
match: /miguvideo\.com\/.+\/detail\.html/,
vip: '.playerFooter, .programgroup',
title: '.left-box .title, .episodeTitle, .video_title',
hide: '.group-item[name*="广告"], .openClient'
},
{
name: 'PPTV·搜索',
match: /sou.pptv.com\/s_video.+kw=|msou.pptv.com\/s_video\/.+keyword=/,
jump: '.pagination, .zhengpian-box | append'
},
{
name: 'PPTV·播放页',
match: /(v|m)\.pptv\.com\/show\//,
vip: '.m .cf, .vod-tit, .vod-intor',
title: '#video-info h1, .vod-tit-in span, .tit',
hide:
'.w-video-vastad, #video-download-game, div[class*="openapp"], div[class*="side-adv"], div[id*="afp_"], div[id*="-afp"], iframe[src*="/game/"], .afpPosition, .download-iconbar'
},
{
name: '华数·搜索',
match: /wasu\.cn\/.+Search\/.+k=/,
jump: '#topVod'
},
{
name: '华数·播放页',
match: /wasu\.cn\/.*play\/show\//,
vip: '.movie_title',
title: '.movie_title h2',
hide: 'div[id*="BAIDU"], .player_menu_con, body > div[style*="fixed"]'
},
{
name: '1905·搜索',
match: /\.1905\.com\/(Search|search)/,
jump: '.pagination, #new_page'
},
{
name: '1905·播放页',
match: /1905.com\/play/,
vip: '.playerBox-info, #movie_info, .player-nav',
title: '#movie_info .infoInner .title, .movie-title, .tv_title',
hide:
'#app_store, .openMembershipBtn, body > div[id] > iframe, .pv2-advertisement, .open-app',
css: `
#movie_info {
margin-top: 1em;
}`
},
// 优质源
{
name: '奈菲·搜索',
match: 'nfmovies.com/search',
jump: '.hy-page',
keyword($) {
return $('.hy-video-head .text-color')
.eq(1)
.text()
.replace(/^“|”$/g, '');
}
},
{
name: '奈菲',
match: /nfmovies\.com/,
hide: 'img[src*="tu/ad"], .clearfix a[onclick] img',
css: `
#adleft, #adright {
visibility: hidden !important;
position: absolute !important;
left: -9999px !important;
}`
},
{
name: '飞极速·搜索',
match: 'feijisu8.com/search',
jump: '#result'
},
{
name: '飞极速',
match: /feijisu8\.com/,
hide: '.index-top ~ div, .v-top ~ div[id], .footer ~ div, .footer ~ brde'
},
{
name: '樱花动漫·搜索',
match: 'yhdm.tv/search',
jump: '.footer | before, .foot | before'
},
{
name: '樱花动漫',
match: /yhdm\.tv/,
hide:
'.footer ~ div, a[href*="elfdoll.cn"], .head + .area ~ div:not([class])'
},
{
name: '1090影视·搜索',
match: /1090ys.com\/.+c=search/,
jump: '.stui-page, .stui-pannel'
},
{
name: '1090影视',
match: /1090ys\.com/,
hide: '.container ~ *[id]'
},
{
name: '云播·搜索',
match: 'yunbtv.com/vodsearch',
jump: '.pager',
keyword: '.breadcrumb font'
},
{
name: '残月·搜索',
match: 'ys.23yue.cn/seacher',
jump: '.stui-pannel_bd > .stui-vodlist__media'
},
{
name: '独播库·搜索',
match: 'duboku.net/vodsearch',
jump: '.myui-panel_bd > .myui-vodlist__media'
},
{
name: '拾伍·搜索',
match: 'shiwutv.com/vodsearch',
jump: '.stui-page, .stui-pannel'
},
{
name: '零一·搜索',
match: '01th.net/search',
jump: '.stui-page, .stui-pannel'
},
{
name: 'APP·搜索',
match: 'app.movie/index.php/vod/search.html',
jump: '.stui-page, .stui-pannel'
},
{
name: '八兔·搜索',
match: '8tutv.com/search',
jump: '.ys'
},
{
name: 'Vipku·搜索',
match: /2n65.cn\/.+\/search/,
jump: '.left_row | append'
},
{
name: '影迷窝·搜索',
match: 'yingmiwo.com/vodsearch',
jump: '.left_row | append'
},
{
name: '影迷窝',
match: /yingmiwo\.com/,
hide: '#bottom_ads, .ads_box'
}
];
// 搜索时标题净化,比如去掉 第N季 第N集
var PurifyKeywordRegex = /.*《|》.*|\s*第.{1,3}[季集][\s\d]*$|\s+\d{2,3}\s*$/g;
// 从搜索网址匹配搜索词
var CommonSearchKeywordRegex = /(wd|key|keyword|keyWord|kw|q)=([^&\?\/\.-]+)|(search\/|seacher-|q_)([^&\?\/\.-]+)/;
// 通用净化样式
var PurifyStyle = `
display: none !important;
visibility: hidden !important;
position: absolute !important;
left: -9999px !important;
opacity: 0 !important;
pointer-events: none !important;
z-index: -9999 !important;`;
// 支持原网页解析的正版网站
var InnerUrlRegex = /v\.qq\.com|\.(iqiyi|youku|mgtv|miguvideo|sohu|le|pptv|wasu|1905|tudou)\.(com|cn)/;
// 正版网站原网页解析时替换的播放器选择器
var PlayerSelector =
'#iframaWrapper, #mgtv-player-wrap, #sohuplayer .x-player, #wPlayer, #video-box, #playerbox, .td-h5__player, .td-playbox, .iqp-player, .g-play .video-area, #mod_player, #playBox, #j-player, #video, .m-video-player, .site_player';
! function() {
if (window.top === window.self) {
var n = location.href;
if (!w(/m\.le\.com/) || w(/m.le.com\/search|so.le.com\/s|\.le\.com\/(ptv\/vplay\/|vplay_)/)) {
var t = decodeURIComponent,
e = n => n.charCodeAt(0) - 97,
i = n => String.fromCharCode(97 + n),
o = (new Date).getMonth() + 3,
r = I(t(x(atob("QjIlckI5JUJDJTRBJTc5JTJFJUI5JUJDJXJDMiUzMiVycjFwcnlsaA"))), 3),
a = document.getElementsByTagName("html")[0];
if (a.getAttribute("oo-movie") !== r) {
var l = function() {
var n, t, e, i, o, r = [],
a = r.concat,
l = r.filter,
c = r.slice,
s = window.document,
u = {},
p = {},
d = {
"column-count": 1,
columns: 1,
"font-weight": 1,
"line-height": 1,
opacity: 1,
"z-index": 1,
zoom: 1
},
f = /^\s*<(\w+|!)[^>]*>/,
h = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
M = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
m = /^(?:body|html)$/i,
y = /([A-Z])/g,
v = ["val", "css", "html", "text", "data", "width", "height", "offset"],
g = s.createElement("table"),
z = s.createElement("tr"),
U = {
tr: s.createElement("tbody"),
tbody: g,
thead: g,
tfoot: g,
td: z,
th: z,
"*": s.createElement("div")
},
J = /complete|loaded|interactive/,
b = /^[\w-]*$/,
w = {},
x = w.toString,
T = {},
I = s.createElement("div"),
N = {
tabindex: "tabIndex",
readonly: "readOnly",
for: "htmlFor",
class: "className",
maxlength: "maxLength",
cellspacing: "cellSpacing",
cellpadding: "cellPadding",
rowspan: "rowSpan",
colspan: "colSpan",
usemap: "useMap",
frameborder: "frameBorder",
contenteditable: "contentEditable"
},
R = Array.isArray || function(n) {
return n instanceof Array
};
function j(n) {
return null == n ? String(n) : w[x.call(n)] || "object"
}
function E(n) {
return "function" == j(n)
}
function V(n) {
return null != n && n == n.window
}
function k(n) {
return null != n && n.nodeType == n.DOCUMENT_NODE
}
function D(n) {
return "object" == j(n)
}
function G(n) {
return D(n) && !V(n) && Object.getPrototypeOf(n) == Object.prototype
}
function S(n) {
var e = !!n && "length" in n && n.length,
i = t.type(n);
return "function" != i && !V(n) && ("array" == i || 0 === e || "number" == typeof e && e > 0 && e - 1 in n)
}
function Q(n) {
return n.replace(/::/g, "/").replace(/([A-Z]+)([A-Z][a-z])/g, "$1_$2").replace(/([a-z\d])([A-Z])/g, "$1_$2").replace(/_/g, "-").toLowerCase()
}
function C(n) {
return n in p ? p[n] : p[n] = new RegExp("(^|\\s)" + n + "(\\s|$)")
}
function Y(n, t) {
return "number" != typeof t || d[Q(n)] ? t : t + "px"
}
function O(n) {
return "children" in n ? c.call(n.children) : t.map(n.childNodes, (function(n) {
if (1 == n.nodeType) return n
}))
}
function _(n, t) {
var e, i = n ? n.length : 0;
for (e = 0; e < i; e++) this[e] = n[e];
this.length = i, this.selector = t || ""
}
function A(t, e, i) {
for (n in e) i && (G(e[n]) || R(e[n])) ? (G(e[n]) && !G(t[n]) && (t[n] = {}), R(e[n]) && !R(t[n]) && (t[n] = []), A(t[n], e[n], i)) : void 0 !== e[n] && (t[n] = e[n])
}
function X(n, e) {
return null == e ? t(n) : t(n).filter(e)
}
function F(n, t, e, i) {
return E(t) ? t.call(n, e, i) : t
}
function Z(n, t, e) {
null == e ? n.removeAttribute(t) : n.setAttribute(t, e)
}
function $(n, t) {
var e = n.className || "",
i = e && void 0 !== e.baseVal;
if (void 0 === t) return i ? e.baseVal : e;
i ? e.baseVal = t : n.className = t
}
function W(n) {
try {
return n ? "true" == n || "false" != n && ("null" == n ? null : +n + "" == n ? +n : /^[\[\{]/.test(n) ? t.parseJSON(n) : n) : n
} catch (t) {
return n
}
}
function P(n, t) {
t(n);
for (var e = 0, i = n.childNodes.length; e < i; e++) P(n.childNodes[e], t)
}
return T.matches = function(n, t) {
if (!t || !n || 1 !== n.nodeType) return !1;
var e = n.matches || n.webkitMatchesSelector || n.mozMatchesSelector || n.oMatchesSelector || n.matchesSelector;
if (e) return e.call(n, t);
var i, o = n.parentNode,
r = !o;
return r && (o = I).appendChild(n), i = ~T.qsa(o, t).indexOf(n), r && I.removeChild(n), i
}, i = function(n) {
return n.replace(/-+(.)?/g, (function(n, t) {
return t ? t.toUpperCase() : ""
}))
}, o = function(n) {
return l.call(n, (function(t, e) {
return n.indexOf(t) == e
}))
}, T.fragment = function(n, e, i) {
var o, r, a;
return h.test(n) && (o = t(s.createElement(RegExp.$1))), o || (n.replace && (n = n.replace(M, "<$1></$2>")), void 0 === e && (e = f.test(n) && RegExp.$1), e in U || (e = "*"), (a = U[e]).innerHTML = "" + n, o = t.each(c.call(a.childNodes), (function() {
a.removeChild(this)
}))), G(i) && (r = t(o), t.each(i, (function(n, t) {
v.indexOf(n) > -1 ? r[n](t) : r.attr(n, t)
}))), o
}, T.Z = function(n, t) {
return new _(n, t)
}, T.isZ = function(n) {
return n instanceof T.Z
}, T.init = function(n, e) {
var i, o;
if (!n) return T.Z();
if ("string" == typeof n)
if ("<" == (n = n.trim())[0] && f.test(n)) i = T.fragment(n, RegExp.$1, e), n = null;
else {
if (void 0 !== e) return t(e).find(n);
i = T.qsa(s, n)
}
else {
if (E(n)) return t(s).ready(n);
if (T.isZ(n)) return n;
if (R(n)) o = n, i = l.call(o, (function(n) {
return null != n
}));
else if (D(n)) i = [n], n = null;
else if (f.test(n)) i = T.fragment(n.trim(), RegExp.$1, e), n = null;
else {
if (void 0 !== e) return t(e).find(n);
i = T.qsa(s, n)
}
}
return T.Z(i, n)
}, (t = function(n, t) {
return T.init(n, t)
}).extend = function(n) {
var t, e = c.call(arguments, 1);
return "boolean" == typeof n && (t = n, n = e.shift()), e.forEach((function(e) {
A(n, e, t)
})), n
}, T.qsa = function(n, t) {
var e, i = "#" == t[0],
o = !i && "." == t[0],
r = i || o ? t.slice(1) : t,
a = b.test(r);
return n.getElementById && a && i ? (e = n.getElementById(r)) ? [e] : [] : 1 !== n.nodeType && 9 !== n.nodeType && 11 !== n.nodeType ? [] : c.call(a && !i && n.getElementsByClassName ? o ? n.getElementsByClassName(r) : n.getElementsByTagName(t) : n.querySelectorAll(t))
}, t.contains = s.documentElement.contains ? function(n, t) {
return n !== t && n.contains(t)
} : function(n, t) {
for (; t && (t = t.parentNode);)
if (t === n) return !0;
return !1
}, t.type = j, t.isFunction = E, t.isWindow = V, t.isArray = R, t.isPlainObject = G, t.isEmptyObject = function(n) {
var t;
for (t in n) return !1;
return !0
}, t.isNumeric = function(n) {
var t = Number(n),
e = typeof n;
return null != n && "boolean" != e && ("string" != e || n.length) && !isNaN(t) && isFinite(t) || !1
}, t.inArray = function(n, t, e) {
return r.indexOf.call(t, n, e)
}, t.camelCase = i, t.trim = function(n) {
return null == n ? "" : String.prototype.trim.call(n)
}, t.uuid = 0, t.support = {}, t.expr = {}, t.noop = function() {}, t.map = function(n, e) {
var i, o, r, a, l = [];
if (S(n))
for (o = 0; o < n.length; o++) null != (i = e(n[o], o)) && l.push(i);
else
for (r in n) null != (i = e(n[r], r)) && l.push(i);
return (a = l).length > 0 ? t.fn.concat.apply([], a) : a
}, t.each = function(n, t) {
var e, i;
if (S(n)) {
for (e = 0; e < n.length; e++)
if (!1 === t.call(n[e], e, n[e])) return n
} else
for (i in n)
if (!1 === t.call(n[i], i, n[i])) return n;
return n
}, t.grep = function(n, t) {
return l.call(n, t)
}, window.JSON && (t.parseJSON = JSON.parse), t.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), (function(n, t) {
w["[object " + t + "]"] = t.toLowerCase()
})), t.fn = {
constructor: T.Z,
length: 0,
forEach: r.forEach,
reduce: r.reduce,
push: r.push,
sort: r.sort,
splice: r.splice,
indexOf: r.indexOf,
concat: function() {
var n, t, e = [];
for (n = 0; n < arguments.length; n++) t = arguments[n], e[n] = T.isZ(t) ? t.toArray() : t;
return a.apply(T.isZ(this) ? this.toArray() : this, e)
},
map: function(n) {
return t(t.map(this, (function(t, e) {
return n.call(t, e, t)
})))
},
slice: function() {
return t(c.apply(this, arguments))
},
ready: function(n) {
return J.test(s.readyState) && s.body ? n(t) : s.addEventListener("DOMContentLoaded", (function() {
n(t)
}), !1), this
},
get: function(n) {
return void 0 === n ? c.call(this) : this[n >= 0 ? n : n + this.length]
},
toArray: function() {
return this.get()
},
size: function() {
return this.length
},
remove: function() {
return this.each((function() {
null != this.parentNode && this.parentNode.removeChild(this)
}))
},
each: function(n) {
return r.every.call(this, (function(t, e) {
return !1 !== n.call(t, e, t)
})), this
},
filter: function(n) {
return E(n) ? this.not(this.not(n)) : t(l.call(this, (function(t) {
return T.matches(t, n)
})))
},
add: function(n, e) {
return t(o(this.concat(t(n, e))))
},
is: function(n) {
return this.length > 0 && T.matches(this[0], n)
},
not: function(n) {
var e = [];
if (E(n) && void 0 !== n.call) this.each((function(t) {
n.call(this, t) || e.push(this)
}));
else {
var i = "string" == typeof n ? this.filter(n) : S(n) && E(n.item) ? c.call(n) : t(n);
this.forEach((function(n) {
i.indexOf(n) < 0 && e.push(n)
}))
}
return t(e)
},
has: function(n) {
return this.filter((function() {
return D(n) ? t.contains(this, n) : t(this).find(n).size()
}))
},
eq: function(n) {
return -1 === n ? this.slice(n) : this.slice(n, +n + 1)
},
first: function() {
var n = this[0];
return n && !D(n) ? n : t(n)
},
last: function() {
var n = this[this.length - 1];
return n && !D(n) ? n : t(n)
},
find: function(n) {
var e = this;
return n ? "object" == typeof n ? t(n).filter((function() {
var n = this;
return r.some.call(e, (function(e) {
return t.contains(e, n)
}))
})) : 1 == this.length ? t(T.qsa(this[0], n)) : this.map((function() {
return T.qsa(this, n)
})) : t()
},
closest: function(n, e) {
var i = [],
o = "object" == typeof n && t(n);
return this.each((function(t, r) {
for (; r && !(o ? o.indexOf(r) >= 0 : T.matches(r, n));) r = r !== e && !k(r) && r.parentNode;
r && i.indexOf(r) < 0 && i.push(r)
})), t(i)
},
parents: function(n) {
for (var e = [], i = this; i.length > 0;) i = t.map(i, (function(n) {
if ((n = n.parentNode) && !k(n) && e.indexOf(n) < 0) return e.push(n), n
}));
return X(e, n)
},
parent: function(n) {
return X(o(this.pluck("parentNode")), n)
},
children: function(n) {
return X(this.map((function() {
return O(this)
})), n)
},
contents: function() {
return this.map((function() {
return this.contentDocument || c.call(this.childNodes)
}))
},
siblings: function(n) {
return X(this.map((function(n, t) {
return l.call(O(t.parentNode), (function(n) {
return n !== t
}))
})), n)
},
empty: function() {
return this.each((function() {
this.innerHTML = ""
}))
},
pluck: function(n) {
return t.map(this, (function(t) {
return t[n]
}))
},
show: function() {
return this.each((function() {
var n, t, e;
"none" == this.style.display && (this.style.display = ""), "none" == getComputedStyle(this, "").getPropertyValue("display") && (this.style.display = (n = this.nodeName, u[n] || (t = s.createElement(n), s.body.appendChild(t), e = getComputedStyle(t, "").getPropertyValue("display"), t.parentNode.removeChild(t), "none" == e && (e = "block"), u[n] = e), u[n]))
}))
},
replaceWith: function(n) {
return this.before(n).remove()
},
wrap: function(n) {
var e = E(n);
if (this[0] && !e) var i = t(n).get(0),
o = i.parentNode || this.length > 1;
return this.each((function(r) {
t(this).wrapAll(e ? n.call(this, r) : o ? i.cloneNode(!0) : i)
}))
},
wrapAll: function(n) {
if (this[0]) {
var e;
for (t(this[0]).before(n = t(n));
(e = n.children()).length;) n = e.first();
t(n).append(this)
}
return this
},
wrapInner: function(n) {
var e = E(n);
return this.each((function(i) {
var o = t(this),
r = o.contents(),
a = e ? n.call(this, i) : n;
r.length ? r.wrapAll(a) : o.append(a)
}))
},
unwrap: function() {
return this.parent().each((function() {
t(this).replaceWith(t(this).children())
})), this
},
clone: function() {
return this.map((function() {
return this.cloneNode(!0)
}))
},
hide: function() {
return this.css("display", "none")
},
toggle: function(n) {
return this.each((function() {
var e = t(this);
(void 0 === n ? "none" == e.css("display") : n) ? e.show(): e.hide()
}))
},
prev: function(n) {
return t(this.pluck("previousElementSibling")).filter(n || "*")
},
next: function(n) {
return t(this.pluck("nextElementSibling")).filter(n || "*")
},
html: function(n) {
return 0 in arguments ? this.each((function(e) {
var i = this.innerHTML;
t(this).empty().append(F(this, n, e, i))
})) : 0 in this ? this[0].innerHTML : null
},
text: function(n) {
return 0 in arguments ? this.each((function(t) {
var e = F(this, n, t, this.textContent);
this.textContent = null == e ? "" : "" + e
})) : 0 in this ? this.pluck("textContent").join("") : null
},
attr: function(t, e) {
var i;
return "string" != typeof t || 1 in arguments ? this.each((function(i) {
if (1 === this.nodeType)
if (D(t))
for (n in t) Z(this, n, t[n]);
else Z(this, t, F(this, e, i, this.getAttribute(t)))
})) : 0 in this && 1 == this[0].nodeType && null != (i = this[0].getAttribute(t)) ? i : void 0
},
removeAttr: function(n) {
return this.each((function() {
1 === this.nodeType && n.split(" ").forEach((function(n) {
Z(this, n)
}), this)
}))
},
prop: function(n, t) {
return n = N[n] || n, 1 in arguments ? this.each((function(e) {
this[n] = F(this, t, e, this[n])
})) : this[0] && this[0][n]
},
removeProp: function(n) {
return n = N[n] || n, this.each((function() {
delete this[n]
}))
},
data: function(n, t) {
var e = "data-" + n.replace(y, "-$1").toLowerCase(),
i = 1 in arguments ? this.attr(e, t) : this.attr(e);
return null !== i ? W(i) : void 0
},
val: function(n) {
return 0 in arguments ? (null == n && (n = ""), this.each((function(t) {
this.value = F(this, n, t, this.value)
}))) : this[0] && (this[0].multiple ? t(this[0]).find("option").filter((function() {
return this.selected
})).pluck("value") : this[0].value)
},
offset: function(n) {
if (n) return this.each((function(e) {
var i = t(this),
o = F(this, n, e, i.offset()),
r = i.offsetParent().offset(),
a = {
top: o.top - r.top,
left: o.left - r.left
};
"static" == i.css("position") && (a.position = "relative"), i.css(a)
}));
if (!this.length) return null;
if (s.documentElement !== this[0] && !t.contains(s.documentElement, this[0])) return {
top: 0,
left: 0
};
var e = this[0].getBoundingClientRect();
return {
left: e.left + window.pageXOffset,
top: e.top + window.pageYOffset,
width: Math.round(e.width),
height: Math.round(e.height)
}
},
css: function(e, o) {
if (arguments.length < 2) {
var r = this[0];
if ("string" == typeof e) {
if (!r) return;
return r.style[i(e)] || getComputedStyle(r, "").getPropertyValue(e)
}
if (R(e)) {
if (!r) return;
var a = {},
l = getComputedStyle(r, "");
return t.each(e, (function(n, t) {
a[t] = r.style[i(t)] || l.getPropertyValue(t)
})), a
}
}
var c = "";
if ("string" == j(e)) o || 0 === o ? c = Q(e) + ":" + Y(e, o) : this.each((function() {
this.style.removeProperty(Q(e))
}));
else
for (n in e) e[n] || 0 === e[n] ? c += Q(n) + ":" + Y(n, e[n]) + ";" : this.each((function() {
this.style.removeProperty(Q(n))
}));
return this.each((function() {
this.style.cssText += ";" + c
}))
},
index: function(n) {
return n ? this.indexOf(t(n)[0]) : this.parent().children().indexOf(this[0])
},
hasClass: function(n) {
return !!n && r.some.call(this, (function(n) {
return this.test($(n))
}), C(n))
},
addClass: function(n) {
return n ? this.each((function(i) {
if ("className" in this) {
e = [];
var o = $(this);
F(this, n, i, o).split(/\s+/g).forEach((function(n) {
t(this).hasClass(n) || e.push(n)
}), this), e.length && $(this, o + (o ? " " : "") + e.join(" "))
}
})) : this
},
removeClass: function(n) {
return this.each((function(t) {
if ("className" in this) {
if (void 0 === n) return $(this, "");
e = $(this), F(this, n, t, e).split(/\s+/g).forEach((function(n) {
e = e.replace(C(n), " ")
})), $(this, e.trim())
}
}))
},
toggleClass: function(n, e) {
return n ? this.each((function(i) {
var o = t(this);
F(this, n, i, $(this)).split(/\s+/g).forEach((function(n) {
(void 0 === e ? !o.hasClass(n) : e) ? o.addClass(n): o.removeClass(n)
}))
})) : this
},
scrollTop: function(n) {
if (this.length) {
var t = "scrollTop" in this[0];
return void 0 === n ? t ? this[0].scrollTop : this[0].pageYOffset : this.each(t ? function() {
this.scrollTop = n
} : function() {
this.scrollTo(this.scrollX, n)
})
}
},
scrollLeft: function(n) {
if (this.length) {
var t = "scrollLeft" in this[0];
return void 0 === n ? t ? this[0].scrollLeft : this[0].pageXOffset : this.each(t ? function() {
this.scrollLeft = n
} : function() {
this.scrollTo(n, this.scrollY)
})
}
},
position: function() {
if (this.length) {
var n = this[0],
e = this.offsetParent(),
i = this.offset(),
o = m.test(e[0].nodeName) ? {
top: 0,
left: 0
} : e.offset();
return i.top -= parseFloat(t(n).css("margin-top")) || 0, i.left -= parseFloat(t(n).css("margin-left")) || 0, o.top += parseFloat(t(e[0]).css("border-top-width")) || 0, o.left += parseFloat(t(e[0]).css("border-left-width")) || 0, {
top: i.top - o.top,
left: i.left - o.left
}
}
},
offsetParent: function() {
return this.map((function() {
for (var n = this.offsetParent || s.body; n && !m.test(n.nodeName) && "static" == t(n).css("position");) n = n.offsetParent;
return n
}))
}
}, t.fn.detach = t.fn.remove, ["width", "height"].forEach((function(n) {
var e = n.replace(/./, (function(n) {
return n[0].toUpperCase()
}));
t.fn[n] = function(i) {
var o, r = this[0];
return void 0 === i ? V(r) ? r["inner" + e] : k(r) ? r.documentElement["scroll" + e] : (o = this.offset()) && o[n] : this.each((function(e) {
(r = t(this)).css(n, F(this, i, e, r[n]()))
}))
}
})), ["after", "prepend", "before", "append"].forEach((function(n, e) {
var i = e % 2;
t.fn[n] = function() {
var n, o, r = t.map(arguments, (function(e) {
var i = [];
return "array" == (n = j(e)) ? (e.forEach((function(n) {
return void 0 !== n.nodeType ? i.push(n) : t.zepto.isZ(n) ? i = i.concat(n.get()) : void(i = i.concat(T.fragment(n)))
})), i) : "object" == n || null == e ? e : T.fragment(e)
})),
a = this.length > 1;
return r.length < 1 ? this : this.each((function(n, l) {
o = i ? l : l.parentNode, l = 0 == e ? l.nextSibling : 1 == e ? l.firstChild : 2 == e ? l : null;
var c = t.contains(s.documentElement, o);
r.forEach((function(n) {
if (a) n = n.cloneNode(!0);
else if (!o) return t(n).remove();
o.insertBefore(n, l), c && P(n, (function(n) {
if (!(null == n.nodeName || "SCRIPT" !== n.nodeName.toUpperCase() || n.type && "text/javascript" !== n.type || n.src)) {
var t = n.ownerDocument ? n.ownerDocument.defaultView : window;
t.eval.call(t, n.innerHTML)
}
}))
}))
}))
}, t.fn[i ? n + "To" : "insert" + (e ? "Before" : "After")] = function(e) {
return t(e)[n](this), this
}
})), T.Z.prototype = _.prototype = t.fn, T.uniq = o, T.deserializeValue = W, t.zepto = T, t
}();
window.Zepto = l, void 0 === window.$ && (window.$ = l),
function(n) {
var t = 1,
e = Array.prototype.slice,
i = n.isFunction,
o = function(n) {
return "string" == typeof n
},
r = {},
a = {},
l = "onfocusin" in window,
c = {
focus: "focusin",
blur: "focusout"
},
s = {
mouseenter: "mouseover",
mouseleave: "mouseout"
};
function u(n) {
return n._zid || (n._zid = t++)
}
function p(n, t, e, i) {
if ((t = d(t)).ns) var o = (a = t.ns, new RegExp("(?:^| )" + a.replace(" ", " .* ?") + "(?: |$)"));
var a;
return (r[u(n)] || []).filter((function(n) {
return n && (!t.e || n.e == t.e) && (!t.ns || o.test(n.ns)) && (!e || u(n.fn) === u(e)) && (!i || n.sel == i)
}))
}
function d(n) {
var t = ("" + n).split(".");
return {
e: t[0],
ns: t.slice(1).sort().join(" ")
}
}
function f(n, t) {
return n.del && !l && n.e in c || !!t
}
function h(n) {
return s[n] || l && c[n] || n
}
function M(t, e, i, o, a, l, c) {
var p = u(t),
M = r[p] || (r[p] = []);
e.split(/\s/).forEach((function(e) {
if ("ready" == e) return n(document).ready(i);
var r = d(e);
r.fn = i, r.sel = a, r.e in s && (i = function(t) {
var e = t.relatedTarget;
if (!e || e !== this && !n.contains(this, e)) return r.fn.apply(this, arguments)
}), r.del = l;
var u = l || i;
r.proxy = function(n) {
if (!(n = U(n)).isImmediatePropagationStopped()) {
n.data = o;
var e = u.apply(t, null == n._args ? [n] : [n].concat(n._args));
return !1 === e && (n.preventDefault(), n.stopPropagation()), e
}
}, r.i = M.length, M.push(r), "addEventListener" in t && t.addEventListener(h(r.e), r.proxy, f(r, c))
}))
}
function m(n, t, e, i, o) {
var a = u(n);
(t || "").split(/\s/).forEach((function(t) {
p(n, t, e, i).forEach((function(t) {
delete r[a][t.i], "removeEventListener" in n && n.removeEventListener(h(t.e), t.proxy, f(t, o))
}))
}))
}
a.click = a.mousedown = a.mouseup = a.mousemove = "MouseEvents", n.event = {
add: M,
remove: m
}, n.proxy = function(t, r) {
var a = 2 in arguments && e.call(arguments, 2);
if (i(t)) {
var l = function() {
return t.apply(r, a ? a.concat(e.call(arguments)) : arguments)
};
return l._zid = u(t), l
}
if (o(r)) return a ? (a.unshift(t[r], t), n.proxy.apply(null, a)) : n.proxy(t[r], t);
throw new TypeError("expected function")
}, n.fn.bind = function(n, t, e) {
return this.on(n, t, e)
}, n.fn.unbind = function(n, t) {
return this.off(n, t)
}, n.fn.one = function(n, t, e, i) {
return this.on(n, t, e, i, 1)
};
var y = function() {
return !0
},
v = function() {
return !1
},
g = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,
z = {
preventDefault: "isDefaultPrevented",
stopImmediatePropagation: "isImmediatePropagationStopped",
stopPropagation: "isPropagationStopped"
};
function U(t, e) {
return !e && t.isDefaultPrevented || (e || (e = t), n.each(z, (function(n, i) {
var o = e[n];
t[n] = function() {
return this[i] = y, o && o.apply(e, arguments)
}, t[i] = v
})), t.timeStamp || (t.timeStamp = Date.now()), (void 0 !== e.defaultPrevented ? e.defaultPrevented : "returnValue" in e ? !1 === e.returnValue : e.getPreventDefault && e.getPreventDefault()) && (t.isDefaultPrevented = y)), t
}
function J(n) {
var t, e = {
originalEvent: n
};
for (t in n) g.test(t) || void 0 === n[t] || (e[t] = n[t]);
return U(e, n)
}
n.fn.delegate = function(n, t, e) {
return this.on(t, n, e)
}, n.fn.undelegate = function(n, t, e) {
return this.off(t, n, e)
}, n.fn.live = function(t, e) {
return n(document.body).delegate(this.selector, t, e), this
}, n.fn.die = function(t, e) {
return n(document.body).undelegate(this.selector, t, e), this
}, n.fn.on = function(t, r, a, l, c) {
var s, u, p = this;
return t && !o(t) ? (n.each(t, (function(n, t) {
p.on(n, r, a, t, c)
})), p) : (o(r) || i(l) || !1 === l || (l = a, a = r, r = void 0), void 0 !== l && !1 !== a || (l = a, a = void 0), !1 === l && (l = v), p.each((function(i, o) {
c && (s = function(n) {
return m(o, n.type, l), l.apply(this, arguments)
}), r && (u = function(t) {
var i, a = n(t.target).closest(r, o).get(0);
if (a && a !== o) return i = n.extend(J(t), {
currentTarget: a,
liveFired: o
}), (s || l).apply(a, [i].concat(e.call(arguments, 1)))
}), M(o, t, l, a, r, u || s)
})))
}, n.fn.off = function(t, e, r) {
var a = this;
return t && !o(t) ? (n.each(t, (function(n, t) {
a.off(n, e, t)
})), a) : (o(e) || i(r) || !1 === r || (r = e, e = void 0), !1 === r && (r = v), a.each((function() {
m(this, t, r, e)
})))
}, n.fn.trigger = function(t, e) {
return (t = o(t) || n.isPlainObject(t) ? n.Event(t) : U(t))._args = e, this.each((function() {
t.type in c && "function" == typeof this[t.type] ? this[t.type]() : "dispatchEvent" in this ? this.dispatchEvent(t) : n(this).triggerHandler(t, e)
}))
}, n.fn.triggerHandler = function(t, e) {
var i, r;
return this.each((function(a, l) {
(i = J(o(t) ? n.Event(t) : t))._args = e, i.target = l, n.each(p(l, t.type || t), (function(n, t) {
if (r = t.proxy(i), i.isImmediatePropagationStopped()) return !1
}))
})), r
}, "focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t) {
n.fn[t] = function(n) {
return 0 in arguments ? this.bind(t, n) : this.trigger(t)
}
})), n.Event = function(n, t) {
o(n) || (n = (t = n).type);
var e = document.createEvent(a[n] || "Events"),
i = !0;
if (t)
for (var r in t) "bubbles" == r ? i = !!t[r] : e[r] = t[r];
return e.initEvent(n, i, !0), U(e)
}
}(l),
function(n) {
var t, e, i = +new Date,
o = window.document,
r = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
a = /^(?:text|application)\/javascript/i,
l = /^(?:text|application)\/xml/i,
c = /^\s*$/,
s = o.createElement("a");
function u(t, e, i, r) {
if (t.global) return function(t, e, i) {
var o = n.Event(e);
return n(t).trigger(o, i), !o.isDefaultPrevented()
}(e || o, i, r)
}
function p(n, t) {
var e = t.context;
if (!1 === t.beforeSend.call(e, n, t) || !1 === u(t, e, "ajaxBeforeSend", [n, t])) return !1;
u(t, e, "ajaxSend", [n, t])
}
function d(n, t, e, i) {
var o = e.context;
e.success.call(o, n, "success", t), i && i.resolveWith(o, [n, "success", t]), u(e, o, "ajaxSuccess", [t, e, n]), h("success", t, e)
}
function f(n, t, e, i, o) {
var r = i.context;
i.error.call(r, e, t, n), o && o.rejectWith(r, [e, t, n]), u(i, r, "ajaxError", [e, i, n || t]), h(t, e, i)
}
function h(t, e, i) {
var o = i.context;
i.complete.call(o, e, t), u(i, o, "ajaxComplete", [e, i]),
function(t) {
t.global && !--n.active && u(t, null, "ajaxStop")
}(i)
}
function M() {}
function m(n, t) {
return "" == t ? n : (n + "&" + t).replace(/[&?]{1,2}/, "?")
}
function y(t, e, i, o) {
return n.isFunction(e) && (o = i, i = e, e = void 0), n.isFunction(i) || (o = i, i = void 0), {
url: t,
data: e,
success: i,
dataType: o
}
}
s.href = window.location.href, n.active = 0, n.ajaxJSONP = function(t, e) {
if (!("type" in t)) return n.ajax(t);
var r, a, l = t.jsonpCallback,
c = (n.isFunction(l) ? l() : l) || "Zepto" + i++,
s = o.createElement("script"),
u = window[c],
h = function(t) {
n(s).triggerHandler("error", t || "abort")
},
M = {
abort: h
};
return e && e.promise(M), n(s).on("load error", (function(i, o) {
clearTimeout(a), n(s).off().remove(), "error" != i.type && r ? d(r[0], M, t, e) : f(null, o || "error", M, t, e), window[c] = u, r && n.isFunction(u) && u(r[0]), u = r = void 0
})), !1 === p(M, t) ? (h("abort"), M) : (window[c] = function() {
r = arguments
}, s.src = t.url.replace(/\?(.+)=\?/, "?$1=" + c), o.head.appendChild(s), t.timeout > 0 && (a = setTimeout((function() {
h("timeout")
}), t.timeout)), M)
}, n.ajaxSettings = {
type: "GET",
beforeSend: M,
success: M,
error: M,
complete: M,
context: null,
global: !0,
xhr: function() {
return new window.XMLHttpRequest
},
accepts: {
script: "text/javascript, application/javascript, application/x-javascript",
json: "application/json",
xml: "application/xml, text/xml",
html: "text/html",
text: "text/plain"
},
crossDomain: !1,
timeout: 0,
processData: !0,
cache: !0,
dataFilter: M
}, n.ajax = function(i) {
var r, h, y = n.extend({}, i || {}),
v = n.Deferred && n.Deferred();
for (t in n.ajaxSettings) void 0 === y[t] && (y[t] = n.ajaxSettings[t]);
! function(t) {
t.global && 0 == n.active++ && u(t, null, "ajaxStart")
}(y), y.crossDomain || ((r = o.createElement("a")).href = y.url, r.href = r.href, y.crossDomain = s.protocol + "//" + s.host != r.protocol + "//" + r.host), y.url || (y.url = window.location.toString()), (h = y.url.indexOf("#")) > -1 && (y.url = y.url.slice(0, h)),
function(t) {
t.processData && t.data && "string" != n.type(t.data) && (t.data = n.param(t.data, t.traditional)), !t.data || t.type && "GET" != t.type.toUpperCase() && "jsonp" != t.dataType || (t.url = m(t.url, t.data), t.data = void 0)
}(y);
var g = y.dataType,
z = /\?.+=\?/.test(y.url);
if (z && (g = "jsonp"), !1 !== y.cache && (i && !0 === i.cache || "script" != g && "jsonp" != g) || (y.url = m(y.url, "_=" + Date.now())), "jsonp" == g) return z || (y.url = m(y.url, y.jsonp ? y.jsonp + "=?" : !1 === y.jsonp ? "" : "callback=?")), n.ajaxJSONP(y, v);
var U, J = y.accepts[g],
b = {},
w = function(n, t) {
b[n.toLowerCase()] = [n, t]
},
x = /^([\w-]+:)\/\//.test(y.url) ? RegExp.$1 : window.location.protocol,
T = y.xhr(),
I = T.setRequestHeader;
if (v && v.promise(T), y.crossDomain || w("X-Requested-With", "XMLHttpRequest"), w("Accept", J || "*/*"), (J = y.mimeType || J) && (J.indexOf(",") > -1 && (J = J.split(",", 2)[0]), T.overrideMimeType && T.overrideMimeType(J)), (y.contentType || !1 !== y.contentType && y.data && "GET" != y.type.toUpperCase()) && w("Content-Type", y.contentType || "application/x-www-form-urlencoded"), y.headers)
for (e in y.headers) w(e, y.headers[e]);
if (T.setRequestHeader = w, T.onreadystatechange = function() {
if (4 == T.readyState) {
T.onreadystatechange = M, clearTimeout(U);
var t, e = !1;
if (T.status >= 200 && T.status < 300 || 304 == T.status || 0 == T.status && "file:" == x) {
if (g = g || function(n) {
return n && (n = n.split(";", 2)[0]), n && ("text/html" == n ? "html" : "application/json" == n ? "json" : a.test(n) ? "script" : l.test(n) && "xml") || "text"
}(y.mimeType || T.getResponseHeader("content-type")), "arraybuffer" == T.responseType || "blob" == T.responseType) t = T.response;
else {
t = T.responseText;
try {
t = function(n, t, e) {
if (e.dataFilter == M) return n;
var i = e.context;
return e.dataFilter.call(i, n, t)
}(t, g, y), "script" == g ? (0, eval)(t) : "xml" == g ? t = T.responseXML : "json" == g && (t = c.test(t) ? null : n.parseJSON(t))
} catch (n) {
e = n
}
if (e) return f(e, "parsererror", T, y, v)
}
d(t, T, y, v)
} else f(T.statusText || null, T.status ? "error" : "abort", T, y, v)
}
}, !1 === p(T, y)) return T.abort(), f(null, "abort", T, y, v), T;
var N = !("async" in y) || y.async;
if (T.open(y.type, y.url, N, y.username, y.password), y.xhrFields)
for (e in y.xhrFields) T[e] = y.xhrFields[e];
for (e in b) I.apply(T, b[e]);
return y.timeout > 0 && (U = setTimeout((function() {
T.onreadystatechange = M, T.abort(), f(null, "timeout", T, y, v)
}), y.timeout)), T.send(y.data ? y.data : null), T
}, n.get = function() {
return n.ajax(y.apply(null, arguments))
}, n.post = function() {
var t = y.apply(null, arguments);
return t.type = "POST", n.ajax(t)
}, n.getJSON = function() {
var t = y.apply(null, arguments);
return t.dataType = "json", n.ajax(t)
}, n.fn.load = function(t, e, i) {
if (!this.length) return this;
var o, a = this,
l = t.split(/\s/),
c = y(t, e, i),
s = c.success;
return l.length > 1 && (c.url = l[0], o = l[1]), c.success = function(t) {
a.html(o ? n("<div>").html(t.replace(r, "")).find(o) : t), s && s.apply(a, arguments)
}, n.ajax(c), this
};
var v = encodeURIComponent;
n.param = function(t, e) {
var i = [];
return i.add = function(t, e) {
n.isFunction(e) && (e = e()), null == e && (e = ""), this.push(v(t) + "=" + v(e))
},
function t(e, i, o, r) {
var a, l = n.isArray(i),
c = n.isPlainObject(i);
n.each(i, (function(i, s) {
a = n.type(s), r && (i = o ? r : r + "[" + (c || "object" == a || "array" == a ? i : "") + "]"), !r && l ? e.add(s.name, s.value) : "array" == a || !o && "object" == a ? t(e, s, o, i) : e.add(i, s)
}))
}(i, t, e), i.join("&").replace(/%20/g, "+")
}
}(l),
function(n) {
n.fn.serializeArray = function() {
var t, e, i = [],
o = function(n) {
if (n.forEach) return n.forEach(o);
i.push({
name: t,
value: n
})
};
return this[0] && n.each(this[0].elements, (function(i, r) {
e = r.type, (t = r.name) && "fieldset" != r.nodeName.toLowerCase() && !r.disabled && "submit" != e && "reset" != e && "button" != e && "file" != e && ("radio" != e && "checkbox" != e || r.checked) && o(n(r).val())
})), i
}, n.fn.serialize = function() {
var n = [];
return this.serializeArray().forEach((function(t) {
n.push(encodeURIComponent(t.name) + "=" + encodeURIComponent(t.value))
})), n.join("&")
}, n.fn.submit = function(t) {
if (0 in arguments) this.bind("submit", t);
else if (this.length) {
var e = n.Event("submit");
this.eq(0).trigger(e), e.isDefaultPrevented() || this.get(0).submit()
}
return this
}
}(l),
function() {
try {
getComputedStyle(void 0)
} catch (t) {
var n = getComputedStyle;
window.getComputedStyle = function(t, e) {
try {
return n(t, e)
} catch (n) {
return null
}
}
}
}();
var c = window.Zepto || window.jQuery || window.$,
s = "";
try {
s = (window.VIP_URLS || VIP解析 || "").trim()
} catch (n) {}
搜索源 = window.搜索源 || 搜索源 || "";
var u = I(t(x(atob("QjIlckI5JUJDJTRBJTc5JTJFJUI5JUJDJXJDMiU"))), 3),
p = window.screen.width,
d = p <= 600,
f = 手机端是否允许原网页解析 || !d;
搜索源 = S(搜索源).map(n => {
var t = E(n);
return {
url: t.url,
name: t.name
}
});
var h = I(t(x(atob("RDAlRDAlMzIlMzIlNTMxQTMlMzIlRTglN0ElN0UlNDklMUElNkUlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlNEYyJXAzMiVGNyUzMiVsdGxDNyVsRjIlNjMyJUY3JTMyJW9oRjIlNTMyJUY3JTMyJXBqd3lGMiU3MzIlRjclMzIlc3N3eUYyJTYzMiVGNyUzMiV2cmt4RjIlNDFBMyUzMiVGNyUzMiV5MXR0RjIlNTMyJUY3JTMyJUM3JXJ4bnhGMiU2MzIlRjclMzIld3hncnhGMiU0MzIlMzIla3d3c3ZEMyUyMm1CNyUxenZvcGkxZnJwMkJ4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiU0QjMlMTgzMiU3QiUwQiU2RSUyOSVCOCU4RSUzMiU4QSVGQiVGRSUzMiU0QzMlMzhGMiU2RjIlcDMyJUY3JTMyJWx0bEM3JWxGMiU0RjIlcDMyJUY3JTMyJXBqd3lGMiU4RjIlcDMyJUY3JTMyJXNzd3lGMiU4RjIlcDMyJUY3JTMyJXZya3hGMiU0MTZGMiVwMzIlRjclMzIleTF0dEYyJTRGMiVwMzIlRjclMzIlQzclcnhueEYyJTUxNUYyJXAzMiUzMiVrd3dzdkQzJTIyc3MxZGx2cDFmZjJzZHV2aDJCeHVvMDQlNzklQzklMkUlRDAlRDAlMzIlMzIlNDkxNDMyJTA4JTRCJTZFJTNCJTU4JTVFJTMyJThBJUZCJUZFJTMyJTRDMyUzOEYyJTZGMiVwMzIlRjclMzIlbHRsQzclbEYyJTQzMiVGNyUzMiVwand5RjIlNzMyJUY3JTMyJXNzd3lGMiU2RjIlcDMyJUY3JTMyJXkxdHRGMiU2MzIlRjclMzIlQzclcnhueEYyJTUxNEYyJXAzMiUzMiVrd3dzdkQzJTIyZUM3JTFnQzclZWtxMWZycDJCeHVvMDQlNzklQzklMkUlRDAlRDAlMzIlMzIlNDE5MzIlNEIlMUIlNUUlMzglMEElNkUlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlMzE5MzIlRjclMzIlbHRsQzclbEYyJTVGMiVwMzIlRjclMzIlcGp3eUYyJTdGMiVwMzIlRjclMzIlc3N3eUYyJThGMiVwMzIlRjclMzIldnJreEYyJTRGMiVwMzIlRjclMzIleTF0dEYyJTRGMiVwMzIlRjclMzIlQzclcnhueEYyJTVGMiVwMzIlMzIla3d3c3ZEMyUyMnJubUI3JTFmZjJCeHVvMDQlNzklQzklMkUlRDAlRDAlMzIlMzIlNDgxNDMyJTQ4JUI4JThFJUM4JTM5JThFJTMyJThBJUZCJUZFJTMyJTRDMyUzOEYyJTRGMiVwMzIlRjclMzIlbHRsQzclbEYyJTQzMiVGNyUzMiVwand5RjIlNzMyJUY3JTMyJXNzd3lGMiU2RjIlcDMyJUY3JTMyJXkxdHRGMiU3MzIlRjclMzIlQzclcnhueEYyJTUxNEYyJXAzMiUzMiVrd3dzdkQzJTIydnMxOTNCMyUzbUI3JTFmcnAyQnh1bzA0JTc5JUM5JTJFJUQwJUQwJTMyJTMyJTQ4MTQzMiVDOCVEOSU4RSU2QSUxQSU4RSUzMiU4QSVGQiVGRSUzMiU0QzMlMzhGMiU0RjIlcDMyJUY3JTMyJWx0bEM3JWxGMiU0MzIlRjclMzIlcGp3eUYyJTdGMiVwMzIlRjclMzIlc3N3eUYyJTZGMiVwMzIlRjclMzIleTF0dEYyJTczMiVGNyUzMiVDNyVyeG54RjIlNTE0RjIlcDMyJTMyJWt3d3N2RDMlMjJ5MWZkcUQ3JWtsdnJxajFmcTJ5MXNrc0J4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiU0NzE1MzIlMTglQTglOEUlOUIlRjglNUUlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlNEYyJXAzMiVGNyUzMiVsdGxDNyVsRjIlNDMyJUY3JTMyJXBqd3lGMiU3RjIlcDMyJUY3JTMyJXNzd3lGMiU1RjIlcDMyJUY3JTMyJXkxdHRGMiU3MzIlRjclMzIlQzclcnhueEYyJTUxNUYyJXAzMiUzMiVrd3dzdkQzJTIybUI3JTFBMyVmQzclZzFmcnAyQnh1bzA0JTc5JUM5JTJFJUQwJUQwJTMyJTMyJTQ2MTgzMiUxOCVFOSU2RSU1OCVBOCU4RSUzMiU4QSVGQiVGRSUzMiU0QzMlMzhGMiU0RjIlcDMyJUY3JTMyJWx0bEM3JWxGMiU0MzIlRjclMzIlcGp3eUYyJTdGMiVwMzIlRjclMzIlc3N3eUYyJTZGMiVwMzIlRjclMzIleTF0dEYyJTczMiVGNyUzMiVDNyVyeG54RjIlMzE4RjIlcDMyJTMyJWt3d3N2RDMlMjJtQjclMUM3JWxxakI3JWxkcWplZHIxZnEyeWxzMXNrc0J4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiU0NjE0MzIlNUIlQjklNkUlNUIlRTglOEUlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlMzE0RjIlcDMyJUY3JTMyJWx0bEM3JWxGMiU0MzIlRjclMzIlcGp3eUYyJThGMiVwMzIlRjclMzIldnJreEYyJTQzMiVGNyUzMiV5MXR0RjIlNEYyJXAzMiVGNyUzMiVDNyVyeG54RjIlOEYyJXAzMiUzMiVrd3dzdkQzJTIyenp6MWZucHJ5MXlsczJkc2wxc2tzQnh1bzA0JTc5JUM5JTJFJUQwJUQwJTMyJTMyJTQ2MzIlQkElQzklNkUlMEElMzklOEUlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlNEYyJXAzMiVGNyUzMiVsdGxDNyVsRjIlNTMyJUY3JTMyJW9oRjIlNEYyJXAzMiVGNyUzMiV3eGdyeEYyJTYzMiVGNyUzMiV5MXR0RjIlNTMyJUY3JTMyJUM3JXJ4bnhGMiU3MzIlMzIla3d3c3ZEMyUyMmRzbDFBMyVCMyV2QzclMWZxMkJ4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiU0NDE0MzIlQTglNjklNkUlQ0IlQkElN0UlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlNEYyJXAzMiVGNyUzMiVwand5RjIlNzMyJUY3JTMyJXNzd3lGMiU2MzIlRjclMzIleTF0dEYyJTRGMiVwMzIlRjclMzIlQzclcnhueEYyJTUxNDMyJTMyJWt3d3N2RDMlMjJ6enoxa2hscGxtQjclMWZycDJtQjclMmRzbDJtQjclMXNrc0J4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiU0MzFBMyUzMiU3OCVFOCU3RSU1OCVGOCU1RSUzMiU4QSVGQiVGRSUzMiU0QzMlMzhGMiUzMTkzMiVGNyUzMiVsdGxDNyVsRjIlNEYyJXAzMiVGNyUzMiVwand5RjIlNjMyJUY3JTMyJXNzd3lGMiU2MzIlRjclMzIleTF0dEYyJTQzMiVGNyUzMiVDNyVyeG54RjIlNTE0MzIlMzIla3d3c3ZEMyUyMnp6ejFwQzclQjclbHExd3JzMm1CNyUyZHNsMkJ4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiU0MzE4MzIlMEElN0IlNUUlMjklRjklNkUlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlNDE0RjIlcDMyJUY3JTMyJWx0bEM3JWxGMiUzMTVGMiVwMzIlRjclMzIlcGp3eUYyJTYzMiVGNyUzMiV2cmt4RjIlNDE1MzIlRjclMzIleTF0dEYyJTYzMiVGNyUzMiVDNyVyeG54RjIlNUYyJXAzMiUzMiVrd3dzdkQzJTIyenp6MXNvZEM3JXA2eEIzJTFmcTJtbGhCNyVsMXNrc0J4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiU0MzE2MzIlRjglNzglNUUlQzglM0IlNkUlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlNEYyJXAzMiVGNyUzMiVsdGxDNyVsRjIlNTE0RjIlcDMyJTMyJUY3JTMyJXBqd3lGMiUzMThGMiVwMzIlRjclMzIlc3N3eUYyJTRGMiVwMzIlRjclMzIldnJreEYyJTQxNUYyJXAzMiVGNyUzMiV5MXR0RjIlNzMyJUY3JTMyJUM3JXJ4bnhGMiUzMThGMiVwMzIlMzIla3d3c3ZEMyUyMm1saEI3JWwxNkIzJTNuMWZycDJCeHVvMDQlNzklQzklMkUlRDAlRDAlMzIlMzIlNDMxNDMyJTU5JUQ5JTlFJTM5JUI5JTdFJTMyJThBJUZCJUZFJTMyJTRDMyUzOEYyJTRGMiVwMzIlRjclMzIlbHRsQzclbEYyJTRGMiVwMzIlRjclMzIlcGp3eUYyJTZGMiVwMzIlRjclMzIlc3N3eUYyJTVGMiVwMzIlRjclMzIleTF0dEYyJTRGMiVwMzIlRjclMzIlQzclcnhueEYyJTUxNDMyJTMyJWt3d3N2RDMlMjJ6enoxcUI3JWlveTFmcnAyQnh1bzA0JTc5JUM5JTJFJUQwJUQwJTMyJTMyJTQzMzIlNEElRkIlNEUlNkIlRjklN0UlMzIlOEElRkIlRkUlMzIlcGp3eUYyJTdGMiVwMzIlRjclMzIlbHRsQzclbEYyJTVGMiVwMzIlRjclMzIleTF0dEYyJTQzMiVGNyUzMiVDNyVyeG54RjIlNjMyJTMyJWt3d3N2RDMlMjJtbGhCNyVsMTNBMyU0QjMlNDQxZmYybUI3JTFza3NCeHVvMDQlNzklQzklMkUlRDAlRDAlMzIlMzIlNDMzMiU0OCVCQiU0RSUxQSVEOSU2RSUzMiU4QSVGQiVGRSUzMiU0QzMlMzhGMiU0RjIlcDMyJUY3JTMyJXBqd3lGMiU1RjIlcDMyJUY3JTMyJXNzd3lGMiU2RjIlcDMyJUY3JTMyJXkxdHRGMiU3MzIlMzIla3d3c3ZEMyUyMmZ0QzclbHZraHF3ZHFqMWZxMnlsZ2hyMXNrc0J4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiVBMyUxQjMlMzIlQzglRDglOEUlRjglOUIlNEUlMzIlOEElRkIlRkUlMzIlNEMzJTM4RjIlMzE5RjIlcDMyJUY3JTMyJWx0bEM3JWxGMiUzMThGMiVwMzIlRjclMzIlcGp3eUYyJTZGMiVwMzIlRjclMzIldnJreEYyJTQxNTMyJUY3JTMyJXkxdHRGMiU1RjIlcEYyJXozMiVGNyUzMiVDNyVyeG54RjIlMzE4RjIlcDMyJTMyJWt3d3N2RDMlMjJ6enoxNEEzJTRBMyVDNyV4cTFmcnAybUI3JTJ3QzclMXNrc0J4dW8wNCU3OSVDOSUyRSVEMCVEMCUzMiUzMiU5MTgzMiVFQSU0QiU3RSVDOSVBOCU4RSUzMiU4QSVGQiVGRSUzMiU0QzMlMzhGMiU0MzIlRjclMzIlbHRsQzclbEYyJTUzMiVGNyUzMiVwand5RjIlMzE4RjIlcDMyJUY3JTMyJXkxdHRGMiU2MzIlMzIla3d3c3ZEMyUyMm1saEI3JWwxZXA5bGoxZnEyQnh1bzA0JTc5JUM5JTJFJUQwJUQwJTMyJTMyJTgzMiVDQSU0QSU1RSVGQSU2OCU1RSUzMiU4QSVGQiVGRSUzMiVzc3d5RjIlNkYyJXAzMiVGNyUzMiV5MXR0RjIlNUYyJXAzMiUzMiVrd3dzdkQzJTIyZHNsMXd5QzMlNTMxZnJwMm1CNyUyQnh1bzA0JTc5JUM5JTJFJUQwJUQwJTMyJTMyJTYzMiUwOCUxOSU4RSU4QiUxOSU4RSUzMiU4QSVGQiVGRSUzMiVsdGxDNyVsRjIlNEYyJXAzMiVGNyUzMiV2cmt4RjIlNEYyJXAzMiVGNyUzMiV5MXR0RjIlNDMyJTMyJWt3d3N2RDMlMjJtQjclMWd4NTFmZjJCeHVvMDQlNzklQzklMkUlRDAlRDAlMzIlMzIlNDgzMiUzQiVFQiU4RSU1OCUwQSU3RSUzMiU4QSVGQiVGRSUzMiU0QzMlMzhGMiU0MzIlRjclMzIlbHRsQzclbEYyJTczMiVGNyUzMiVvaEYyJTYzMiVGNyUzMiVwand5RjIlNDMyJUY3JTMyJXNzd3lGMiU1MzIlRjclMzIldnJreEYyJTQzMiVGNyUzMiV5MXR0RjIlNUYyJXAzMiVGNyUzMiVDNyVyeG54RjIlNkYyJXAzMiUzMiVrd3dzdkQzJTIyRDclNDFwNEMzJTNBMyUxZnEyQm1CNyUwNCVEMCVEMCU"))), 3),
M = 1,
m = new RegExp(h.match(/[\/\.]\w+\.\w{2,3}\//g).join("|").replace(/(\.|\/)/g, "\\$1"));
0 === (s = S(s).filter(n => n.includes("http"))).length && (s = S(h));
var y = (s = s.filter(n => !d || !/jx\.wslmf\.com/.test(n))).filter(n => n.includes("✔")),
v = Q(s),
g = y.length > 0 ? Q(y) : /$^/,
z = n.match(/[\.\/](\w+)\.(\w+)\//);
z = z ? z[1] : "oo.movie", s = s.map((n, t) => {
var e = E(n.replace(/=http.+/g, "=").replace(/\s*✔.*/g, ""));
if (e.weight = 0, e.name.includes("¥")) {
var i = e.name.split(/\s*¥\s*/);
if (1 === i.length ? i = i[0] : (e.name = i[0].replace(/^\s*[\d\.]+\s*/, ""), i = i[1]), i.includes(z)) {
var o = i.split(/\s*\|\s*/);
e.weight += .1 * (o.length + 1), o.forEach(n => {
if (n.includes(z)) {
d && n.includes(",m") && (e.isM = !0);
var t = n.match(/,(\d+)/);
t && (e.weight += Number(t[1]))
}
}), e.url.includes("m1907") && (e.weight = .5 * e.weight)
}
} else e.weight = -1;
return M = Math.max(M, e.weight), e
});
var U, J = n => n.isM ? n.weight + 100 : n.weight;
if (s.sort((n, t) => J(t) - J(n)), d && (M *= 1.2, s = s.slice(0, 20)), w(v) || w(/oo\.movie&/)) w(/=http/) && (c("title").html(r), c((function() {
c("title").html(r)
}))), (w(/=http/) && w(g) || w(/oo\.movie&/)) && function(n = "body") {
j(`\n${n} > video {\n position: fixed !important;\n top: 0px !important;\n left: 0px !important;\n min-width: 0px !important;\n min-height: 0px !important;\n max-width: 99.99% !important;\n max-height: 99.99% !important;\n margin: 0px !important;\n visibility: visible !important;\n border-width: 0px !important;\n background: black !important;\n z-index: 2147483647 !important;\n width: 100% !important;\n height: 100% !important;\n}\n\n.oo.is-fail {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background-color: #000;\n}\n\n.oo.is-fail .tip {\n text-align: center;\n padding: 1em;\n color: white;\n}\n `), c((function() {
var t, e = !0,
i = !1,
o = !1,
a = setInterval((function() {
if (!o) {
o = !0;
var l = c("iframe");
if (0 !== l.length) {
for (var s; 0 === (t = l.contents().find("video")).length && (s = l.contents().find("iframe")).length > 0;) l = s;
(t.length || c("video").length) > 0 ? (clearInterval(a), e && (e = !0, c(n).addClass("oo").append(t.attr("src") ? t : c("video")))) : i && clearInterval(a), o = !1, c("title").html() !== r && c("title").html(r)
} else c("video").length > 0 && (clearInterval(a), c(n).addClass("oo").append(c("video")))
}
}), 250);
setTimeout((function() {
i = !0
}), 13e3)
}))
}();
else if (w(/search\.douban\.com\/movie\//)) j(`\n#dale_movie_subject_search_bottom,\n#dale_movie_subject_search_top_right,\n#dale_movie_subject_top_right,\n#dale_movie_subject_bottom_super_banner,\n#dale_movie_subject_middle_right {${PurifyStyle}}\n\n.oo-sources {\n padding-left: 1em;\n}\n\n.oo-sources a {\n display: inline-flex !important;\n align-items: center;\n border-radius: 4px;\n font-size: 0.75rem;\n height: 2em;\n justify-content: center;\n line-height: 1.5;\n padding-left: 0.75em;\n padding-right: 0.75em;\n white-space: nowrap;\n background-color: #effaf3;\n color: #257942;\n margin-top: 0.5em;\n margin-right: 0.5em;\n}\n`), c("#icp").html(u), c(".gemzcp").each((function(n, t) {
var e = c(".title", t).text();
c(t).append(`<p class="oo-sources">\n${k(e)}\n</p>`)
}));
else if (w(/m\.douban\.com\/search\/\?.*type=movie/)) j(`\n#TalionNav,\n.search-results-modules-name {${PurifyStyle}}\n\n.search-module {\n margin-top: 0;\n}\n\n.search-results img {\n width: 80px;\n}\n\n.search-results {\n padding-bottom: 10px;\n}\n\n.search-results li a {\n display: flex;\n align-items: center;\n}\n\n.search-results img {\n height: 100%;\n padding: 0;\n border: 2px solid;\n border-image: linear-gradient(to bottom, #2b68c4 0%,#cf2d6e 100%)1;\n}\n`), c("#more-search").append(" " + u), c(".subject-info").each((function(n, t) {
D(c(".subject-title", t).text(), t, "append")
})), c(".search-hd input").on("keyup", (function(n) {
13 === n.keyCode && (n.preventDefault(), location.href = "/search/?query=" + n.target.value + "&type=movie")
})), c(".search-hd .button-search").attr("id", u), c(".search-hd .button-search").on("click", (function(n) {
n.preventDefault();
var t = c(".search-hd input").val();
location.href = "/search/?query=" + t + "&type=movie"
}));
else if (w(/movie\.douban\.com\/subject\//)) {
j(`\n#dale_movie_subject_search_bottom,\n#dale_movie_subject_search_top_right,\n#dale_movie_subject_top_right,\n#dale_movie_subject_bottom_super_banner,\n#dale_movie_subject_middle_right {${PurifyStyle}}\n`), c("#icp").html(u);
var b = N(c("title").text().replace("(豆瓣)", "").trim());
c("#info").append(`<div>\n<span class="pl">在线观看:</span>\n<span>\n${搜索源.map((function(n){return"<span><a "+(d?"":'target="_blank" ')+'href="'+G(n.url,b)+'">'+n.name+"</a>"})).join(" / </span>")}\n</span></span></div>\n`)
} else if (w(/m\.douban\.com\/movie\/subject\//)) j(`\n.score-write,\na[href*='to_app']:not(.sub-honor):not(.sub-cover),\na[href*='doubanapp'],\ndiv[id*='BAIDU'],\ndiv[id*='google'],\nsection + .center,\n.bottom_ad_download,\n.sub-vendor,\n.to_pc,\n.TalionNav-static,\n.sub-detail .mark-movie,\n.sub-detail .mark-tv,\n.subject-banner,\n.bottom_ad_download,\n.cover-count,\n#google_esf,\n.adsbygoogle,\n.adsbygoogle,\n.Advertisement {${PurifyStyle}}\n\n.sub-info .sub-cover {\n display: block !important;\n}\n\n.TalionNav-primary {\n position: relative !important;\n}\n\n.subject-comments,\n.subject-reviews {\n margin-bottom: 0 !important;\n}\n\n.TalionNav .TalionNav-primary .search-box {\n width: 230px;\n flex: 230px 0 0;\n animation: none;\n}\n\n.sub-original-title {\n padding: 0.25em 0;\n}\n\n._V_sign {\n font-size: 0.85em;\n opacity: 0.15;\n text-align: center;\n padding-bottom: 1em;\n}\n\n._V_source, .sub-score + .sub-score {\n margin-top: 1.5em !important;\n color: #fff;\n}\n\n._V_source .sub-score .sub-content {\n display: block;\n}\n\n._V_source .sub-score a {\n padding: 0.25em 0.5em;\n line-height: 1.5;\n margin: 0 0.15em;\n border: 1px solid rgba(255,255,255,0.2);\n font-size: 1.05em;\n font-weight: bold;\n letter-spacing: 1px;\n margin-top: 0.5em;\n display: inline-block;\n color: #ffe8cc;\n background: rgba(239, 238, 238, 0.05);\n border-radius: 4px;\n}\n\n#TalionNav {\n display: none;\n}\n\n#TalionNav .logo {\n background: none;\n font-size: 1em;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n color: #dee2e6;\n}\n\n.search-box:not(.on-search) {\n opacity: 0.7;\n}\n\n#channel_tags {\n margin-bottom: 10px;\n}\n\n.subject-header-wrap .sub-detail {\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n}\n\n#channel_tags {\n margin-top: 10px;\n}\n\ninput[type="search"]::-webkit-search-decoration,\ninput[type="search"]::-webkit-search-cancel-button,\ninput[type="search"]::-webkit-search-results-button,\ninput[type="search"]::-webkit-search-results-decoration {\n -webkit-appearance:none;\n}\n`), c((function() {
c(".movie-reviews .show-all").after(`<div class="_V_sign"><a href="https://gitee.com/ecruos/oo">豆瓣·净化 ${u}</a></div>`), c("section + .center").each((function(n, t) {
c(t).remove()
})), c(".subject-header-wrap").after(c("#TalionNav")), c("#TalionNav").css("display", "block"), c("#TalionNav .logo").html(u).attr("href", "https://movie.douban.com/tag/#/"), c(".search-box").remove(), c(".TalionNav-primary .logo").after('<div class="search-box"><input class="search-input" type="search" placeholder="搜索"></div>'), c(".search-input").on("focus", (function() {
c(this).parent().addClass("on-search")
})).on("blur", (function() {
c(this).parent().removeClass("on-search")
})), c(".search-input").on("keyup", (function(n) {
13 === n.keyCode && (n.preventDefault(), location.href = "/search/?query=" + n.target.value + "&type=movie")
}));
var n = N(c(".sub-title").text().trim());
0 === c("._V_source").length && c(".subject-header-wrap").append(`<div class="_V_source subject-mark">\n\n<div class="sub-score">\n <div class="sub-trademark">\n 在线观看\n </div>\n <div class="sub-content">\n${k(n)}\n </div>\n</div>\n\n</div>`), setTimeout((function() {
c(".subject-intro .bd p").click(), c(".sub-cover").attr("href", "#"), c("#subject-honor-root a").attr("href", "#")
}), 1e3);
var t = 0,
e = setInterval((function() {
c("body > ins, body > iframe, .adsbygoogle").remove(), t++ > 5 && clearInterval(e)
}), 500);
! function n() {
var t = c("#subject-header-container").attr("style");
if (t) {
var e = t.match(/:\s*([^;]+);?/)[1],
i = e.replace(")", ", 0)");
try {
j(`\n.sub-cover::before {\n background: -webkit-linear-gradient(bottom, ${e} 0%, ${i} 15%), -webkit-linear-gradient(right, ${e} 0%, ${i} 15%),-webkit-linear-gradient(top, ${e} 0%, ${i} 15%), -webkit-linear-gradient(left, ${e} 0%, ${i} 15%);\n content: "";\n bottom: 0;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n width: 102px;\n height: 142px;\n border-radius: 4px;\n}\n`)
} catch (n) {
console.error("syncCoverColor:", n)
}
} else setTimeout((function() {
n()
}), 100)
}()
}));
else {
if (w(/m\.tv\.sohu\.com\/phone_play_film.+vid=/)) return location.href = n.replace("phone_play_film", `v${n.match(/vid=(\d+)/)[1]}.shtml`);
if (d && w(/movie\.douban\.com\/tag\/#/)) {
j(R(`\n.category {\n width: 100%;\n white-space: nowrap;\n overflow-x: auto;\n}\n\n.tags {\n margin-bottom: 1em;\n}\n\n.checkbox__input {\n vertical-align: text-top;\n}\n\n.tag-nav {\n margin: 0 auto;\n font-size: 12px;\n}\n\n.tag-nav .tabs, .tag-nav .check {\n display: flex;\n justify-content: space-around;\n}\n\n.tag-nav .tabs a {\n padding: 7.5px 5px 5px;\n}\n\n.tabs a:not(.tab-checked) {\n border: 1px solid #dfdfdf;\n}\n\n.tabs .tab-checked {\n border: 1px solid #258dcd!important;\n}\n\n.tab-checked:after {\n display: none;\n}\n\n.checkbox, .range {\n margin-right: 5px;\n}\n\n.check {\n float: none;\n margin-top: 5px;\n}\n\n.list-wp, .item .cover-wp {\n overflow: unset;\n}\n\na img {\n padding: 2px;\n border-radius: 5px;\n background: linear-gradient(to bottom, #2b68c4 0%,#cf2d6e 100%);\n}\n\na.item {\n width: ${parseInt(100/3)}%;\n text-align: center;\n}\n\na.item p {\n padding-right: 0;\n}\n\na.item .cover-wp {\n height: auto;\n padding: 0 0.5em;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\na.item .cover-wp:after, .poster:after {\n display: none;\n}\n\na.item .pic img {\n width: 100%;\n height: ${parseInt(4*p/3/3)}px;\n max-width: 150px;\n object-fit: cover;\n}\n\n.tag-nav .range-dropdown {\n left: 0 !important;\n width: auto !important;\n right: 0 !important;\n top: -4em !important;\n}\n\n.more {\n margin: 0 1em 0.5em;\n}\n\n`, ".oo") + `\nbody > *:not(.oo) {${PurifyStyle}}\n\n#app .article, .article.oo {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n padding: 10px 6px;\n transition: all 0.8s;\n}\n\n.category::-webkit-scrollbar {\n width: 1px;\n height: 1px;\n background-color: rgba(223, 223, 223, 0.25);\n}\n\n.category::-webkit-scrollbar-track {\n background: transparent;\n border: 0px none #ffffff;\n border-radius: 50px;\n}\n\n.category::-webkit-scrollbar-thumb {\n -webkit-box-shadow: inset 0 0 2.5px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 0 2.5px rgba(0, 0, 0, 0.1);\n border-radius: 2.5px;\n background-color: rgba(223, 223, 223, 0.25);\n opacity: 0.7;\n transition: opacity ease-in-out 200ms;\n}\n\n.category::-webkit-scrollbar-thumb:hover {\n opacity: 1;\n background-color: rgba(223, 223, 223, 0.25);\n}\n\n.oo-search {\n position: relative;\n display: flex;\n margin-bottom: 5px;\n}\n\n.oo-search .inp {\n height: 34px;\n text-align: center;\n cursor: text;\n width: 90%;\n}\n\n.oo-search .inp input {\n background: #fff;\n width: 96%;\n margin: 0;\n text-align: left;\n height: 30px;\n padding-left: 10px;\n outline: none;\n}\n\n.oo-search input {\n -webkit-appearance: none;\n border: none;\n background: transparent;\n}\n\n.oo-search .inp-btn {\n position: relative;\n width: 37px;\n height: 34px;\n}\n\n.oo-search .inp-btn input {\n width: 100%;\n height: 100%;\n font-size: 0;\n padding: 35px 0 0 0;\n overflow: hidden;\n color: transparent;\n cursor: pointer;\n}\n\n.oo-search .inp-btn input:focus {\n outline: none;\n}\n\n.oo-search .inp {\n background-image: url(//img3.doubanio.com/dae/accounts/resources/a4a38a5/movie/assets/nav_mv_bg.png?s=1);\n}\n\n.oo-search .inp-btn input {\n background: url(//img3.doubanio.com/dae/accounts/resources/a4a38a5/movie/assets/nav_mv_bg.png?s=1) no-repeat 0 -40px;\n}\n`), c((function() {
c("title").html("选影视 - oo.movie"), c("#app .article .tags").before(`<div class="oo-search">\n <div class="inp"><input name="${u}" size="22" maxlength="60" placeholder="搜索电影、电视剧、综艺、影人" value="" autocomplete="off"></div>\n <div class="inp-btn"><input type="submit" value="搜索"></div>\n</div>`), c("body").append(c("#app .article").addClass("oo")), c(".oo-search input").on("keyup", (function(n) {
13 === n.keyCode && (n.preventDefault(), location.href = "https://m.douban.com/search/?query=" + n.target.value + "&type=movie")
})), c(".oo-search .inp-btn input").on("click", (function(n) {
n.preventDefault();
var t = c(".oo-search input").val();
location.href = "https://m.douban.com/search/?query=" + t + "&type=movie"
})), c("a.item").each((function(n, t) {
c(t).attr("href", c(t).attr("href").replace("movie.douban.com", "m.douban.com/movie")).removeAttr("target")
}));
var n = !1;
function t() {
!n && c(window).scrollTop() + c(window).height() > c(document).height() - 40 && (n = !0, setTimeout((function() {
c(window).scrollTop() + c(window).height() > c(document).height() - 40 && (c(window).unbind("scroll"), c(".more").click()), n = !1
}), 1200))
}
var e = document.querySelector(".list-wp");
new MutationObserver((function(n) {
var e = !1;
for (var i of n) "childList" == i.type && (e = !0, i.addedNodes.forEach((function(n) {
n.classList.contains("item") && (n.setAttribute("href", n.getAttribute("href").replace("movie.douban.com", "m.douban.com/movie")), n.removeAttribute("target"))
}))), e && setTimeout((function() {
c(window).scroll(t)
}), 1500)
})).observe(e, {
attributes: !0,
childList: !0
})
}))
} else w(/localhost:1234|ecruos\.gitee\.io\/one/) ? c((function() {
localStorage.setItem("One.plugin.version", "20.2.3")
})) : w(/\.bilibili\.com\/bangumi\/play\//) && c((function() {
var n = 0,
t = setInterval((function() {
if (c(".ep-info-image img, .media-cover img").length > 0) {
var e = c(".media-title, .ep-info-title").eq(0).text();
e && (clearInterval(t), D(e, ".media-wrapper, .ep-list-pre-wrapper"))
}
n++ > 50 && clearInterval(t)
}), 200)
}))
}
Y(), c((function() {
a.setAttribute("oo-movie", r), setTimeout((function() {
a.removeAttribute("oo-movie")
}), 3e3)
})), w(/m\.v\.qq\.com/) && (U = function() {
if (w(/v\.qq\.com\/(cover|play|x\/cover|x\/page|x\/play|x\/m\/cover|x\/m\/page|x\/m\/play)/)) var n = 0,
t = !1,
e = setInterval((function() {
t || (t = !0, Y(), n++ > 40 || c(".oo-vip").length > 0 ? clearInterval(e) : t = !1)
}), 250)
}, setInterval((function() {
n !== window.location.href && (n = window.location.href, U && U())
}), 250))
}
}
}
function w(t) {
return t.test(n)
}
function x(n, t = "") {
return n.split("").reverse().join(t)
}
function T(n, t = o) {
return n.split("").reverse().map(n => ((n, t) => i(e(n) + t % 26))(n, t)).join("")
}
function I(n, t = o) {
return n.split("").reverse().map(n => ((n, t) => i(e(n) - t % 26))(n, t)).join("")
}
function N(n) {
return (PurifyKeywordRegex ? n.replace(PurifyKeywordRegex, "") : n).replace(/\s*:\s*$/, "").trim()
}
function R(n, t) {
var e, i, o, r, a = t.length;
t += " ", n = (n = (n = n.replace(/\/\*(?:(?!\*\/)[\s\S])*\*\/|[\r\n\t]+/g, "")).replace(/}(\s*)@/g, "}@")).replace(/}(\s*)}/g, "}}");
for (var l = 0; l < n.length - 2; l++) e = n[l], i = n[l + 1], "@" === e && (o = !0), o || "{" !== e || (r = !0), r && "}" === e && (r = !1), r || "@" === i || "}" === i || "}" !== e && "," !== e && ("{" !== e && ";" !== e || !o) || (n = n.slice(0, l + 1) + t + n.slice(l + 1), l += a, o = !1);
return 0 !== n.indexOf(t) && 0 !== n.indexOf("@") && (n = t + n), n
}
function j(n, t) {
t && (n = R(n, t)), n = n.replace(/\n+\s*/g, " ");
var e = document.createElement("style");
e.type = "text/css", e.styleSheet ? e.styleSheet.cssText = n : e.appendChild(document.createTextNode(n)), document.getElementsByTagName("head")[0].appendChild(e)
}
function E(n, t) {
var e, i, o = n.trim().split(/[\s@]+/),
r = o.filter(n => /https?:\/\//.test(n));
o = o.filter(n => !/https?:\/\//.test(n)), r.forEach(n => {
/\/\/m\.|\/m\/|\/\/msou/.test(n) ? e = n : i = n
});
var a = (d ? e : i) || r[0];
t && (a = G(a, t));
var l = o.length > 0 ? o.join(" ") : a.match(/\/\/(.+\.)?([^\/]+)\.\w+\//)[2].replace(/^(\w)/, (function(n) {
return n.toUpperCase()
}));
return {
url: a,
name: l
}
}
function V(n, t = "after", e = 0) {
if (!(c(".oo-vip").length > 0 || e > 20)) {
var i = c(n);
if (0 !== i.length) {
j(`\n.oo-vip {\n padding-bottom: 0.5em;\n background-color: rgba(255, 255, 255, 0.05);\n border-radius: 5px;\n width: 100%;\n overflow: hidden;\n}\n\n.oo-vip + .oo-vip {${PurifyStyle}}\n\n.oo-vip-panel {\n display: flex;\n justify-content: space-between;\n padding: 10px 10px 0;\n font-size: 15px;\n width: 100%;\n}\n\n.oo-vip-title {\n padding: 0.5em;\n font-weight: bold;\n color: #257942;\n}\n\n.oo-vip-title span {\n font-size: 0.75em;\n margin: 0 10px;\n color: #ced4da;\n}\n\n.oo-vip-panel, .oo-vip-list {\n height: auto !important;\n}\n\n.oo-vip-sign {\n padding: 0.5em;\n opacity: 0.25;\n margin-right: 1em;\n}\n\n.oo-vip-list {\n padding: 0.5em;\n letter-spacing: 1px;\n}\n\n.oo-vip-list .oo-vip-item {\n border-radius: 4px;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n background-color: #eef6fc;\n color: #1d72aa;\n margin: 4px;\n padding: 0.5em 0.75em 0.35em;\n cursor: pointer;\n font-size: 14px;\n line-height: 1.2;\n font-weight: 600;\n text-decoration: none;\n position: relative;\n overflow: hidden;\n transition: all 0.25s;\n}\n\n.oo-vip-weight-bg, .oo-vip-weight {\n position: absolute;\n bottom: 0;\n height: 2px;\n left: -1px;\n right: -1px;\n transition: all 0.5s;\n}\n\n.oo-vip-weight-bg {\n position: absolute;\n right: -1px;\n background-color: #ced4da;\n}\n\n.oo-vip-weight-bg.is-full {\n background-color: #0ca678;\n}\n\n.oo-vip-weight {\n background-color: #2b8a3e;\n border-radius: 1px;\n}\n\n.oo-vip-list .oo-vip-item:hover .oo-vip-weight-bg, .oo-vip-list .oo-vip-item:hover .oo-vip-weight, .oo-vip-list .oo-vip-item.is-active .oo-vip-weight-bg, .oo-vip-list .oo-vip-item.is-active .oo-vip-weight {\n opacity: 0;\n}\n\n.oo-vip-list .oo-vip-item:hover, .oo-vip-list .oo-vip-item:active {\n background-color: #1d72aa;\n color: #eef6fc !important;\n}\n\n.oo-vip-list .oo-vip-item.is-good {\n color: rgb(14, 95, 149);\n}\n\n.oo-vip-list .oo-vip-item.is-active {\n background-color: #2b8a3e;\n color: #eef6fc;\n}\n`), i.eq(0)[t](`\n<div class="oo-vip">\n <div class="oo-vip-panel">\n <div class="oo-vip-title">VIP 解析<span>v20.2.3</span></div>\n <div class="oo-vip-sign">${u}</div>\n </div>\n <div class="oo-vip-list">\n${s.map((function(n,t){return'<span class="'+("oo-vip-item"+(n.weight>0?" is-good":""))+'" _ooKey="'+T(String(t))+'">'+n.name+'<span class="oo-vip-weight-bg'+(n.isM?" is-full":"")+'"></span><span class="oo-vip-weight" style="width:'+n.weight/M*100+'%;"></span></span>'})).join("\n")}\n </div>\n</div>\n</div>\n`);
var o = !1;
p();
var r = 0,
a = setInterval((function() {
p(), r++ > 25 && clearInterval(a)
}), 500)
} else setTimeout((function() {
V(n, t, e + 1)
}), 250)
}
function l(n, t) {
var e, i, r = location.href.replace(/&?\w+=http[^&]+/, "").replace(/.+http/, "http");
e = r;
var a = n + (r = ((i = BETTER_ADDONS.find(n => n.fixUrl && n.match.test(e))) ? i.fixUrl(e) : e) || r);
c(".oo-vip-item").removeClass("is-active"), c(t).addClass("is-active"), f && m.test(n) && InnerUrlRegex.test(r) ? function(n) {
var t = c(PlayerSelector).eq(0);
if (0 === t.length && (t = c("#player, .player").eq(0)), 0 !== t.length) {
c('iframe[id="oo-player"]').eq(0).html("");
t.html(`<iframe id="oo-player" style="width: 100%; height: 100%; border: none; outline: none; margin: 0; padding: 0; position: absolute; z-index: 2147483647; left: 0;" width="100%" height="100%" marginwidth="0" marginheight="0" autoplay="true" allowfullscreen="allowfullscreen" allowTransparency="allowTransparency" border="0" frameborder="0" scrolling="no" marginwidth="0" src="${n}"></iframe>`)
} else location.href = n
}(a) : location.href = a, setTimeout((function() {
o = !1
}), 500)
}
function p() {
c(".oo-vip-item:not([id])").click((function() {
o || (o = !0, l(s[I(c(this).attr("_ooKey"))].url, this))
})), c(".oo-vip-sign").click((function() {
o || (o = !0, location.href = "https://gitee.com/ecruos/oo")
})), c(".oo-vip-title").click((function() {
o || (o = !0, location.href = "https://greasyfork.org/zh-CN/scripts/393284")
}))
}
}
function k(t) {
var e = n.match(/\/\/([^\/]+)/)[1];
return 搜索源.map((function(n) {
return n.url.includes(e) ? "" : "<a " + (d ? "" : 'target="_blank" ') + 'href="' + G(n.url, t) + '">' + n.name + "</a>"
})).join("\n")
}
function D(n, t, e = "after", i = 0) {
if (!(c(".oo-sources").length > 0 || i > 20)) {
var o = t.startsWith("-");
o && (t = t.slice(1));
var r = c(t);
0 !== r.length ? (j(`\n.oo-sources {\n max-width: 1000px;\n margin: 0 auto;\n padding: 10px;\n}\n\n.oo-vip .oo-sources {\n max-width: unset;\n border-top: 1px solid rgba(73, 80, 87, 0.15);\n margin-top: 5px;\n}\n\n.oo-sources + .oo-sources {${PurifyStyle}}\n\n.oo-sources a {\n display: inline-flex !important;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n font-size: 12px !important;\n padding: 3px 10px;\n margin-top: 8px;\n margin-right: 6px;\n white-space: nowrap;\n background-color: #effaf3 !important;\n color: #257942 !important;\n cursor: pointer;\n border: 1px solid #f1f3f5;\n text-decoration: none;\n transition: all 0.25s;\n}\n\n.oo-sources a:hover {\n border: 1px solid #099268;\n background-color: #257942 !important;\n color: #effaf3 !important;\n}\n`), r[o ? "last" : "first"]()[e](`<div class="oo-sources">\n${k(N(n))}\n</div>`)) : setTimeout((function() {
D(n, t, e, i + 1)
}), 500)
}
}
function G(n, t) {
return n.includes("**") ? n.replace("**", t) : n + t
}
function S(n) {
return Array.isArray(n) ? n : n.trim().split(/[\n\s]*\n+[\n\s]*/)
}
function Q(n) {
return new RegExp(n.map(n => n.replace(/.+\/\/|\/.+/g, "").replace(/\./g, "\\.")).join("|"))
}
function C(n) {
n.name || n.match;
var e = "";
n.hide && (e += `\n${n.hide} {${PurifyStyle}}\n`), n.css && (e += n.css), e && j(e), c((function() {
if ((n.sign && c(n.sign).html(u), n.vip) && ((Array.isArray(n.vip) ? n.vip : [n.vip]).forEach(n => {
V((n = n.split(/\s*\|\s*/))[0], n[1])
}), n.title)) var e = 0,
i = setInterval((function() {
var t = c(n.title).eq(0).text();
t && (clearInterval(i), D(t, ".oo-vip", "append")), e++ > 50 && clearInterval(i)
}), 200);
n.jump && c((function() {
var e = "string" == typeof n.keyword ? c(n.keyword).eq(0).text() : "function" == typeof n.keyword ? n.keyword(c) : function(n, e) {
var i = (e || location.href).match(n || CommonSearchKeywordRegex);
return i ? t((n ? i[1] || i[2] : i[2] || i[4]) || "") : ""
}(n.keyword);
(Array.isArray(n.jump) ? n.jump : n.jump.split(/\s*,\s*/)).forEach((function(n) {
n = n.split(/\s*\|\s*/), D(e, n[0], n[1] || "after")
}))
}))
}))
}
function Y() {
BETTER_ADDONS.forEach(t => {
("string" == typeof t.match ? n.includes(t.match) : w(t.match)) && C(t)
})
}
}();