Skip to content

Instantly share code, notes, and snippets.

@pganti
Created November 2, 2018 18:09
Show Gist options
  • Save pganti/08389d941c688bba1d6aa0a14a7fbd7b to your computer and use it in GitHub Desktop.
Save pganti/08389d941c688bba1d6aa0a14a7fbd7b to your computer and use it in GitHub Desktop.
cnet
/*!
* jQuery JavaScript Library v1.8.3
* http://jquery.com/
*
* Includes Sizzle.js
* http://sizzlejs.com/
*
* Copyright 2012 jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
*/
;/*7P1RCD3H9R0M*/
var I10C;
var I11C;
(function(I10C) {
I10C.ScriptBegin || (I10C.ScriptBegin = function() {}
);
I10C.ScriptEnd || (I10C.ScriptEnd = function() {}
);
I10C.PostMessage || (I10C.PostMessage = function() {
return this.postMessage.apply(this, arguments);
}
);
I10C.Location || (I10C.Location = function i10cloc(ba$e, isWrite, op) {
var locat1onPresent = Object.getOwnPropertyNames(ba$e).indexOf('locat1on') !== -1;
return (!isWrite) ? (locat1onPresent ? ba$e.locat1on : (ba$e.location || ba$e.locat1on)) : (locat1onPresent ? {
set href(v) {
ba$e.locat1on.href = v;
},
get href() {
return i10cloc(ba$e, false, op);
}
} : {
set href(v) {
ba$e.location = v;
},
get href() {
return i10cloc(ba$e, false, op);
}
});
}
);
I11C.PreLocationContextProxy || (I11C.PreLocationContextProxy = function i10cPreLocContext(ba$e) {
return ba$e;
}
);
}
)(I11C || I10C || (I11C = {}));
(I11C || I10C).ScriptBegin();
/*!
* Sizzle CSS Selector Engine
* Copyright 2012 jQuery Foundation and other contributors
* Released under the MIT license
* http://sizzlejs.com/
*/
/*!
* jQuery Cookie Plugin v1.2
* https://github.com/carhartl/jquery-cookie
*
* Copyright 2011, Klaus Hartl
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://www.opensource.org/licenses/mit-license.php
* http://www.opensource.org/licenses/GPL-2.0
*/
/*
* Modified verion of uuid.js
*
* Copyright (c) 2010-2012 Robert Kieffer
* MIT License - http://opensource.org/licenses/mit-license.php
*/
/*! jQuery UI - v1.9.2 - 2012-12-11
* http://jqueryui.com
* Includes: jquery.ui.widget.js
* Copyright (c) 2012 jQuery Foundation and other contributors Licensed MIT */
//
// usertiming.js
//
// A polyfill for UserTiming (http://www.w3.org/TR/user-timing/)
//
// Copyright 2013 Nic Jansma
// http://nicj.net
//
// https://github.com/nicjansma/usertiming.js
//
// Licensed under the MIT license
//
define("managers/page-vars", [], function() {
return window.CnetPageVars.tracking.data = window.utag_data,
window.CnetPageVars
}),
function(e, t) {
function n(e) {
var t = ge[e] = {};
return K.each(e.split(te), function(e, n) {
t[n] = !0
}),
t
}
function i(e, n, i) {
if (i === t && 1 === e.nodeType) {
var r = "data-" + n.replace(me, "-$1").toLowerCase();
if ("string" == typeof (i = e.getAttribute(r))) {
try {
i = "true" === i || "false" !== i && ("null" === i ? null : +i + "" === i ? +i : he.test(i) ? K.parseJSON(i) : i)
} catch (e) {}
K.data(e, n, i)
} else
i = t
}
return i
}
function r(e) {
var t;
for (t in e)
if (("data" !== t || !K.isEmptyObject(e[t])) && "toJSON" !== t)
return !1;
return !0
}
function o() {
return !1
}
function a() {
return !0
}
function s(e) {
return !e || !e.parentNode || 11 === e.parentNode.nodeType
}
function l(e, t) {
do {
e = e[t]
} while (e && 1 !== e.nodeType);return e
}
function d(e, t, n) {
if (t = t || 0,
K.isFunction(t))
return K.grep(e, function(e, i) {
return !!t.call(e, i, e) === n
});
if (t.nodeType)
return K.grep(e, function(e, i) {
return e === t === n
});
if ("string" == typeof t) {
var i = K.grep(e, function(e) {
return 1 === e.nodeType
});
if (Oe.test(t))
return K.filter(t, i, !n);
t = K.filter(t, i)
}
return K.grep(e, function(e, i) {
return K.inArray(e, t) >= 0 === n
})
}
function c(e) {
var t = Re.split("|")
, n = e.createDocumentFragment();
if (n.createElement)
for (; t.length; )
n.createElement(t.pop());
return n
}
function u(e, t) {
return e.getElementsByTagName(t)[0] || e.appendChild(e.ownerDocument.createElement(t))
}
function p(e, t) {
if (1 === t.nodeType && K.hasData(e)) {
var n, i, r, o = K._data(e), a = K._data(t, o), s = o.events;
if (s) {
delete a.handle,
a.events = {};
for (n in s)
for (i = 0,
r = s[n].length; i < r; i++)
K.event.add(t, n, s[n][i])
}
a.data && (a.data = K.extend({}, a.data))
}
}
function f(e, t) {
var n;
1 === t.nodeType && (t.clearAttributes && t.clearAttributes(),
t.mergeAttributes && t.mergeAttributes(e),
n = t.nodeName.toLowerCase(),
"object" === n ? (t.parentNode && (t.outerHTML = e.outerHTML),
K.support.html5Clone && e.innerHTML && !K.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : "input" === n && Je.test(e.type) ? (t.defaultChecked = t.checked = e.checked,
t.value !== e.value && (t.value = e.value)) : "option" === n ? t.selected = e.defaultSelected : "input" === n || "textarea" === n ? t.defaultValue = e.defaultValue : "script" === n && t.text !== e.text && (t.text = e.text),
t.removeAttribute(K.expando))
}
function g(e) {
return void 0 !== e.getElementsByTagName ? e.getElementsByTagName("*") : void 0 !== e.querySelectorAll ? e.querySelectorAll("*") : []
}
function h(e) {
Je.test(e.type) && (e.defaultChecked = e.checked)
}
function m(e, t) {
if (t in e)
return t;
for (var n = t.charAt(0).toUpperCase() + t.slice(1), i = t, r = yt.length; r--; )
if ((t = yt[r] + n)in e)
return t;
return i
}
function y(e, t) {
return e = t || e,
"none" === K.css(e, "display") || !K.contains(e.ownerDocument, e)
}
function v(e, t) {
for (var n, i, r = [], o = 0, a = e.length; o < a; o++)
n = e[o],
n.style && (r[o] = K._data(n, "olddisplay"),
t ? (r[o] || "none" !== n.style.display || (n.style.display = ""),
"" === n.style.display && y(n) && (r[o] = K._data(n, "olddisplay", x(n.nodeName)))) : (i = nt(n, "display"),
r[o] || "none" === i || K._data(n, "olddisplay", i)));
for (o = 0; o < a; o++)
n = e[o],
n.style && (t && "none" !== n.style.display && "" !== n.style.display || (n.style.display = t ? r[o] || "" : "none"));
return e
}
function b(e, t, n) {
var i = ct.exec(t);
return i ? Math.max(0, i[1] - (n || 0)) + (i[2] || "px") : t
}
function w(e, t, n, i) {
for (var r = n === (i ? "border" : "content") ? 4 : "width" === t ? 1 : 0, o = 0; r < 4; r += 2)
"margin" === n && (o += K.css(e, n + mt[r], !0)),
i ? ("content" === n && (o -= parseFloat(nt(e, "padding" + mt[r])) || 0),
"margin" !== n && (o -= parseFloat(nt(e, "border" + mt[r] + "Width")) || 0)) : (o += parseFloat(nt(e, "padding" + mt[r])) || 0,
"padding" !== n && (o += parseFloat(nt(e, "border" + mt[r] + "Width")) || 0));
return o
}
function k(e, t, n) {
var i = "width" === t ? e.offsetWidth : e.offsetHeight
, r = !0
, o = K.support.boxSizing && "border-box" === K.css(e, "boxSizing");
if (i <= 0 || null == i) {
if (i = nt(e, t),
(i < 0 || null == i) && (i = e.style[t]),
ut.test(i))
return i;
r = o && (K.support.boxSizingReliable || i === e.style[t]),
i = parseFloat(i) || 0
}
return i + w(e, t, n || (o ? "border" : "content"), r) + "px"
}
function x(e) {
if (ft[e])
return ft[e];
var t = K("<" + e + ">").appendTo(F.body)
, n = t.css("display");
return t.remove(),
"none" !== n && "" !== n || (it = F.body.appendChild(it || K.extend(F.createElement("iframe"), {
frameBorder: 0,
width: 0,
height: 0
})),
rt && it.createElement || (rt = (it.contentWindow || it.contentDocument).document,
rt.write("<!doctype html><html><body>"),
rt.close()),
t = rt.body.appendChild(rt.createElement(e)),
n = nt(t, "display"),
F.body.removeChild(it)),
ft[e] = n,
n
}
function C(e, t, n, i) {
var r;
if (K.isArray(t))
K.each(t, function(t, r) {
n || wt.test(e) ? i(e, r) : C(e + "[" + ("object" == typeof r ? t : "") + "]", r, n, i)
});
else if (n || "object" !== K.type(t))
i(e, t);
else
for (r in t)
C(e + "[" + r + "]", t[r], n, i)
}
function _(e) {
return function(t, n) {
"string" != typeof t && (n = t,
t = "*");
var i, r, o, a = t.toLowerCase().split(te), s = 0, l = a.length;
if (K.isFunction(n))
for (; s < l; s++)
i = a[s],
o = /^\+/.test(i),
o && (i = i.substr(1) || "*"),
r = e[i] = e[i] || [],
r[o ? "unshift" : "push"](n)
}
}
function T(e, n, i, r, o, a) {
o = o || n.dataTypes[0],
a = a || {},
a[o] = !0;
for (var s, l = e[o], d = 0, c = l ? l.length : 0, u = e === Ot; d < c && (u || !s); d++)
"string" == typeof (s = l[d](n, i, r)) && (!u || a[s] ? s = t : (n.dataTypes.unshift(s),
s = T(e, n, i, r, s, a)));
return !u && s || a["*"] || (s = T(e, n, i, r, "*", a)),
s
}
function A(e, n) {
var i, r, o = K.ajaxSettings.flatOptions || {};
for (i in n)
n[i] !== t && ((o[i] ? e : r || (r = {}))[i] = n[i]);
r && K.extend(!0, e, r)
}
function S(e, n, i) {
var r, o, a, s, l = e.contents, d = e.dataTypes, c = e.responseFields;
for (o in c)
o in i && (n[c[o]] = i[o]);
for (; "*" === d[0]; )
d.shift(),
r === t && (r = e.mimeType || n.getResponseHeader("content-type"));
if (r)
for (o in l)
if (l[o] && l[o].test(r)) {
d.unshift(o);
break
}
if (d[0]in i)
a = d[0];
else {
for (o in i) {
if (!d[0] || e.converters[o + " " + d[0]]) {
a = o;
break
}
s || (s = o)
}
a = a || s
}
if (a)
return a !== d[0] && d.unshift(a),
i[a]
}
function j(e, t) {
var n, i, r, o, a = e.dataTypes.slice(), s = a[0], l = {}, d = 0;
if (e.dataFilter && (t = e.dataFilter(t, e.dataType)),
a[1])
for (n in e.converters)
l[n.toLowerCase()] = e.converters[n];
for (; r = a[++d]; )
if ("*" !== r) {
if ("*" !== s && s !== r) {
if (!(n = l[s + " " + r] || l["* " + r]))
for (i in l)
if (o = i.split(" "),
o[1] === r && (n = l[s + " " + o[0]] || l["* " + o[0]])) {
!0 === n ? n = l[i] : !0 !== l[i] && (r = o[0],
a.splice(d--, 0, r));
break
}
if (!0 !== n)
if (n && e.throws)
t = n(t);
else
try {
t = n(t)
} catch (e) {
return {
state: "parsererror",
error: n ? e : "No conversion from " + s + " to " + r
}
}
}
s = r
}
return {
state: "success",
data: t
}
}
function N() {
try {
return new e.XMLHttpRequest
} catch (e) {}
}
function E() {
try {
return new e.ActiveXObject("Microsoft.XMLHTTP")
} catch (e) {}
}
function D() {
return setTimeout(function() {
Wt = t
}, 0),
Wt = K.now()
}
function P(e, t) {
K.each(t, function(t, n) {
for (var i = (Kt[t] || []).concat(Kt["*"]), r = 0, o = i.length; r < o; r++)
if (i[r].call(e, t, n))
return
})
}
function I(e, t, n) {
var i, r = 0, o = Qt.length, a = K.Deferred().always(function() {
delete s.elem
}), s = function() {
for (var t = Wt || D(), n = Math.max(0, l.startTime + l.duration - t), i = n / l.duration || 0, r = 1 - i, o = 0, s = l.tweens.length; o < s; o++)
l.tweens[o].run(r);
return a.notifyWith(e, [l, r, n]),
r < 1 && s ? n : (a.resolveWith(e, [l]),
!1)
}, l = a.promise({
elem: e,
props: K.extend({}, t),
opts: K.extend(!0, {
specialEasing: {}
}, n),
originalProperties: t,
originalOptions: n,
startTime: Wt || D(),
duration: n.duration,
tweens: [],
createTween: function(t, n, i) {
var r = K.Tween(e, l.opts, t, n, l.opts.specialEasing[t] || l.opts.easing);
return l.tweens.push(r),
r
},
stop: function(t) {
for (var n = 0, i = t ? l.tweens.length : 0; n < i; n++)
l.tweens[n].run(1);
return t ? a.resolveWith(e, [l, t]) : a.rejectWith(e, [l, t]),
this
}
}), d = l.props;
for (L(d, l.opts.specialEasing); r < o; r++)
if (i = Qt[r].call(l, e, d, l.opts))
return i;
return P(l, d),
K.isFunction(l.opts.start) && l.opts.start.call(e, l),
K.fx.timer(K.extend(s, {
anim: l,
queue: l.opts.queue,
elem: e
})),
l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always)
}
function L(e, t) {
var n, i, r, o, a;
for (n in e)
if (i = K.camelCase(n),
r = t[i],
o = e[n],
K.isArray(o) && (r = o[1],
o = e[n] = o[0]),
n !== i && (e[i] = o,
delete e[n]),
(a = K.cssHooks[i]) && "expand"in a) {
o = a.expand(o),
delete e[i];
for (n in o)
n in e || (e[n] = o[n],
t[n] = r)
} else
t[i] = r
}
function M(e, t, n) {
var i, r, o, a, s, l, d, c, u, p = this, f = e.style, g = {}, h = [], m = e.nodeType && y(e);
n.queue || (c = K._queueHooks(e, "fx"),
null == c.unqueued && (c.unqueued = 0,
u = c.empty.fire,
c.empty.fire = function() {
c.unqueued || u()
}
),
c.unqueued++,
p.always(function() {
p.always(function() {
c.unqueued--,
K.queue(e, "fx").length || c.empty.fire()
})
})),
1 === e.nodeType && ("height"in t || "width"in t) && (n.overflow = [f.overflow, f.overflowX, f.overflowY],
"inline" === K.css(e, "display") && "none" === K.css(e, "float") && (K.support.inlineBlockNeedsLayout && "inline" !== x(e.nodeName) ? f.zoom = 1 : f.display = "inline-block")),
n.overflow && (f.overflow = "hidden",
K.support.shrinkWrapBlocks || p.done(function() {
f.overflow = n.overflow[0],
f.overflowX = n.overflow[1],
f.overflowY = n.overflow[2]
}));
for (i in t)
if (o = t[i],
Xt.exec(o)) {
if (delete t[i],
l = l || "toggle" === o,
o === (m ? "hide" : "show"))
continue;
h.push(i)
}
if (a = h.length) {
s = K._data(e, "fxshow") || K._data(e, "fxshow", {}),
"hidden"in s && (m = s.hidden),
l && (s.hidden = !m),
m ? K(e).show() : p.done(function() {
K(e).hide()
}),
p.done(function() {
var t;
K.removeData(e, "fxshow", !0);
for (t in g)
K.style(e, t, g[t])
});
for (i = 0; i < a; i++)
r = h[i],
d = p.createTween(r, m ? s[r] : 0),
g[r] = s[r] || K.style(e, r),
r in s || (s[r] = d.start,
m && (d.end = d.start,
d.start = "width" === r || "height" === r ? 1 : 0))
}
}
function O(e, t, n, i, r) {
return new O.prototype.init(e,t,n,i,r)
}
function q(e, t) {
var n, i = {
height: e
}, r = 0;
for (t = t ? 1 : 0; r < 4; r += 2 - t)
n = mt[r],
i["margin" + n] = i["padding" + n] = e;
return t && (i.opacity = i.width = e),
i
}
function B(e) {
return K.isWindow(e) ? e : 9 === e.nodeType && (e.defaultView || e.parentWindow)
}
var R, $, F = e.document, H = ((I11C || I10C).PreLocationContextProxy)(e).locat1on, U = e.navigator, z = e.jQuery, V = e.$, W = Array.prototype.push, G = Array.prototype.slice, X = Array.prototype.indexOf, J = Object.prototype.toString, Y = Object.prototype.hasOwnProperty, Q = String.prototype.trim, K = function(e, t) {
return new K.fn.init(e,t,R)
}, Z = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, ee = /\S/, te = /\s+/, ne = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ie = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, re = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, oe = /^[\],:{}\s]*$/, ae = /(?:^|:|,)(?:\s*\[)+/g, se = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, le = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, de = /^-ms-/, ce = /-([\da-z])/gi, ue = function(e, t) {
return (t + "").toUpperCase()
}, pe = function() {
F.addEventListener ? (F.removeEventListener("DOMContentLoaded", pe, !1),
K.ready()) : "complete" === F.readyState && (F.detachEvent("onreadystatechange", pe),
K.ready())
}, fe = {};
K.fn = K.prototype = {
constructor: K,
init: function(e, n, i) {
var r, o, a;
if (!e)
return this;
if (e.nodeType)
return this.context = this[0] = e,
this.length = 1,
this;
if ("string" == typeof e) {
if (!(r = "<" === e.charAt(0) && ">" === e.charAt(e.length - 1) && e.length >= 3 ? [null, e, null] : ie.exec(e)) || !r[1] && n)
return !n || n.jquery ? (n || i).find(e) : this.constructor(n).find(e);
if (r[1])
return n = n instanceof K ? n[0] : n,
a = n && n.nodeType ? n.ownerDocument || n : F,
e = K.parseHTML(r[1], a, !0),
re.test(r[1]) && K.isPlainObject(n) && this.attr.call(e, n, !0),
K.merge(this, e);
if ((o = F.getElementById(r[2])) && o.parentNode) {
if (o.id !== r[2])
return i.find(e);
this.length = 1,
this[0] = o
}
return this.context = F,
this.selector = e,
this
}
return K.isFunction(e) ? i.ready(e) : (e.selector !== t && (this.selector = e.selector,
this.context = e.context),
K.makeArray(e, this))
},
selector: "",
jquery: "1.8.3",
length: 0,
size: function() {
return this.length
},
toArray: function() {
return G.call(this)
},
get: function(e) {
return null == e ? this.toArray() : e < 0 ? this[this.length + e] : this[e]
},
pushStack: function(e, t, n) {
var i = K.merge(this.constructor(), e);
return i.prevObject = this,
i.context = this.context,
"find" === t ? i.selector = this.selector + (this.selector ? " " : "") + n : t && (i.selector = this.selector + "." + t + "(" + n + ")"),
i
},
each: function(e, t) {
return K.each(this, e, t)
},
ready: function(e) {
return K.ready.promise().done(e),
this
},
eq: function(e) {
return e = +e,
-1 === e ? this.slice(e) : this.slice(e, e + 1)
},
first: function() {
return this.eq(0)
},
last: function() {
return this.eq(-1)
},
slice: function() {
return this.pushStack(G.apply(this, arguments), "slice", G.call(arguments).join(","))
},
map: function(e) {
return this.pushStack(K.map(this, function(t, n) {
return e.call(t, n, t)
}))
},
end: function() {
return this.prevObject || this.constructor(null)
},
push: W,
sort: [].sort,
splice: [].splice
},
K.fn.init.prototype = K.fn,
K.extend = K.fn.extend = function() {
var e, n, i, r, o, a, s = arguments[0] || {}, l = 1, d = arguments.length, c = !1;
for ("boolean" == typeof s && (c = s,
s = arguments[1] || {},
l = 2),
"object" == typeof s || K.isFunction(s) || (s = {}),
d === l && (s = this,
--l); l < d; l++)
if (null != (e = arguments[l]))
for (n in e)
i = s[n],
r = e[n],
s !== r && (c && r && (K.isPlainObject(r) || (o = K.isArray(r))) ? (o ? (o = !1,
a = i && K.isArray(i) ? i : []) : a = i && K.isPlainObject(i) ? i : {},
s[n] = K.extend(c, a, r)) : r !== t && (s[n] = r));
return s
}
,
K.extend({
noConflict: function(t) {
return e.$ === K && (e.$ = V),
t && e.jQuery === K && (e.jQuery = z),
K
},
isReady: !1,
readyWait: 1,
holdReady: function(e) {
e ? K.readyWait++ : K.ready(!0)
},
ready: function(e) {
if (!0 === e ? !--K.readyWait : !K.isReady) {
if (!F.body)
return setTimeout(K.ready, 1);
K.isReady = !0,
!0 !== e && --K.readyWait > 0 || ($.resolveWith(F, [K]),
K.fn.trigger && K(F).trigger("ready").off("ready"))
}
},
isFunction: function(e) {
return "function" === K.type(e)
},
isArray: Array.isArray || function(e) {
return "array" === K.type(e)
}
,
isWindow: function(e) {
return null != e && e == e.window
},
isNumeric: function(e) {
return !isNaN(parseFloat(e)) && isFinite(e)
},
type: function(e) {
return null == e ? String(e) : fe[J.call(e)] || "object"
},
isPlainObject: function(e) {
if (!e || "object" !== K.type(e) || e.nodeType || K.isWindow(e))
return !1;
try {
if (e.constructor && !Y.call(e, "constructor") && !Y.call(e.constructor.prototype, "isPrototypeOf"))
return !1
} catch (e) {
return !1
}
var n;
for (n in e)
;
return n === t || Y.call(e, n)
},
isEmptyObject: function(e) {
var t;
for (t in e)
return !1;
return !0
},
error: function(e) {
throw new Error(e)
},
parseHTML: function(e, t, n) {
var i;
return e && "string" == typeof e ? ("boolean" == typeof t && (n = t,
t = 0),
t = t || F,
(i = re.exec(e)) ? [t.createElement(i[1])] : (i = K.buildFragment([e], t, n ? null : []),
K.merge([], (i.cacheable ? K.clone(i.fragment) : i.fragment).childNodes))) : null
},
parseJSON: function(t) {
return t && "string" == typeof t ? (t = K.trim(t),
e.JSON && e.JSON.parse ? e.JSON.parse(t) : oe.test(t.replace(se, "@").replace(le, "]").replace(ae, "")) ? new Function("return " + t)() : void K.error("Invalid JSON: " + t)) : null
},
parseXML: function(n) {
var i, r;
if (!n || "string" != typeof n)
return null;
try {
e.DOMParser ? (r = new DOMParser,
i = r.parseFromString(n, "text/xml")) : (i = new ActiveXObject("Microsoft.XMLDOM"),
i.async = "false",
i.loadXML(n))
} catch (e) {
i = t
}
return i && i.documentElement && !i.getElementsByTagName("parsererror").length || K.error("Invalid XML: " + n),
i
},
noop: function() {},
globalEval: function(t) {
t && ee.test(t) && (e.execScript || function(t) {
e.eval.call(e, t)
}
)(t)
},
camelCase: function(e) {
return e.replace(de, "ms-").replace(ce, ue)
},
nodeName: function(e, t) {
return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase()
},
each: function(e, n, i) {
var r, o = 0, a = e.length, s = a === t || K.isFunction(e);
if (i)
if (s) {
for (r in e)
if (!1 === n.apply(e[r], i))
break
} else
for (; o < a && !1 !== n.apply(e[o++], i); )
;
else if (s) {
for (r in e)
if (!1 === n.call(e[r], r, e[r]))
break
} else
for (; o < a && !1 !== n.call(e[o], o, e[o++]); )
;
return e
},
trim: Q && !Q.call("\ufeff ") ? function(e) {
return null == e ? "" : Q.call(e)
}
: function(e) {
return null == e ? "" : (e + "").replace(ne, "")
}
,
makeArray: function(e, t) {
var n, i = t || [];
return null != e && (n = K.type(e),
null == e.length || "string" === n || "function" === n || "regexp" === n || K.isWindow(e) ? W.call(i, e) : K.merge(i, e)),
i
},
inArray: function(e, t, n) {
var i;
if (t) {
if (X)
return X.call(t, e, n);
for (i = t.length,
n = n ? n < 0 ? Math.max(0, i + n) : n : 0; n < i; n++)
if (n in t && t[n] === e)
return n
}
return -1
},
merge: function(e, n) {
var i = n.length
, r = e.length
, o = 0;
if ("number" == typeof i)
for (; o < i; o++)
e[r++] = n[o];
else
for (; n[o] !== t; )
e[r++] = n[o++];
return e.length = r,
e
},
grep: function(e, t, n) {
var i, r = [], o = 0, a = e.length;
for (n = !!n; o < a; o++)
i = !!t(e[o], o),
n !== i && r.push(e[o]);
return r
},
map: function(e, n, i) {
var r, o, a = [], s = 0, l = e.length;
if (e instanceof K || l !== t && "number" == typeof l && (l > 0 && e[0] && e[l - 1] || 0 === l || K.isArray(e)))
for (; s < l; s++)
null != (r = n(e[s], s, i)) && (a[a.length] = r);
else
for (o in e)
null != (r = n(e[o], o, i)) && (a[a.length] = r);
return a.concat.apply([], a)
},
guid: 1,
proxy: function(e, n) {
var i, r, o;
return "string" == typeof n && (i = e[n],
n = e,
e = i),
K.isFunction(e) ? (r = G.call(arguments, 2),
o = function() {
return e.apply(n, r.concat(G.call(arguments)))
}
,
o.guid = e.guid = e.guid || K.guid++,
o) : t
},
access: function(e, n, i, r, o, a, s) {
var l, d = null == i, c = 0, u = e.length;
if (i && "object" == typeof i) {
for (c in i)
K.access(e, n, c, i[c], 1, a, r);
o = 1
} else if (r !== t) {
if (l = s === t && K.isFunction(r),
d && (l ? (l = n,
n = function(e, t, n) {
return l.call(K(e), n)
}
) : (n.call(e, r),
n = null)),
n)
for (; c < u; c++)
n(e[c], i, l ? r.call(e[c], c, n(e[c], i)) : r, s);
o = 1
}
return o ? e : d ? n.call(e) : u ? n(e[0], i) : a
},
now: function() {
return (new Date).getTime()
}
}),
K.ready.promise = function(t) {
if (!$)
if ($ = K.Deferred(),
"complete" === F.readyState)
setTimeout(K.ready, 1);
else if (F.addEventListener)
F.addEventListener("DOMContentLoaded", pe, !1),
e.addEventListener("load", K.ready, !1);
else {
F.attachEvent("onreadystatechange", pe),
e.attachEvent("onload", K.ready);
var n = !1;
try {
n = null == e.frameElement && F.documentElement
} catch (e) {}
n && n.doScroll && function e() {
if (!K.isReady) {
try {
n.doScroll("left")
} catch (t) {
return setTimeout(e, 50)
}
K.ready()
}
}()
}
return $.promise(t)
}
,
K.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(e, t) {
fe["[object " + t + "]"] = t.toLowerCase()
}),
R = K(F);
var ge = {};
K.Callbacks = function(e) {
e = "string" == typeof e ? ge[e] || n(e) : K.extend({}, e);
var i, r, o, a, s, l, d = [], c = !e.once && [], u = function(t) {
for (i = e.memory && t,
r = !0,
l = a || 0,
a = 0,
s = d.length,
o = !0; d && l < s; l++)
if (!1 === d[l].apply(t[0], t[1]) && e.stopOnFalse) {
i = !1;
break
}
o = !1,
d && (c ? c.length && u(c.shift()) : i ? d = [] : p.disable())
}, p = {
add: function() {
if (d) {
var t = d.length;
!function t(n) {
K.each(n, function(n, i) {
var r = K.type(i);
"function" === r ? e.unique && p.has(i) || d.push(i) : i && i.length && "string" !== r && t(i)
})
}(arguments),
o ? s = d.length : i && (a = t,
u(i))
}
return this
},
remove: function() {
return d && K.each(arguments, function(e, t) {
for (var n; (n = K.inArray(t, d, n)) > -1; )
d.splice(n, 1),
o && (n <= s && s--,
n <= l && l--)
}),
this
},
has: function(e) {
return K.inArray(e, d) > -1
},
empty: function() {
return d = [],
this
},
disable: function() {
return d = c = i = t,
this
},
disabled: function() {
return !d
},
lock: function() {
return c = t,
i || p.disable(),
this
},
locked: function() {
return !c
},
fireWith: function(e, t) {
return t = t || [],
t = [e, t.slice ? t.slice() : t],
!d || r && !c || (o ? c.push(t) : u(t)),
this
},
fire: function() {
return p.fireWith(this, arguments),
this
},
fired: function() {
return !!r
}
};
return p
}
,
K.extend({
Deferred: function(e) {
var t = [["resolve", "done", K.Callbacks("once memory"), "resolved"], ["reject", "fail", K.Callbacks("once memory"), "rejected"], ["notify", "progress", K.Callbacks("memory")]]
, n = "pending"
, i = {
state: function() {
return n
},
always: function() {
return r.done(arguments).fail(arguments),
this
},
then: function() {
var e = arguments;
return K.Deferred(function(n) {
K.each(t, function(t, i) {
var o = i[0]
, a = e[t];
r[i[1]](K.isFunction(a) ? function() {
var e = a.apply(this, arguments);
e && K.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[o + "With"](this === r ? n : this, [e])
}
: n[o])
}),
e = null
}).promise()
},
promise: function(e) {
return null != e ? K.extend(e, i) : i
}
}
, r = {};
return i.pipe = i.then,
K.each(t, function(e, o) {
var a = o[2]
, s = o[3];
i[o[1]] = a.add,
s && a.add(function() {
n = s
}, t[1 ^ e][2].disable, t[2][2].lock),
r[o[0]] = a.fire,
r[o[0] + "With"] = a.fireWith
}),
i.promise(r),
e && e.call(r, r),
r
},
when: function(e) {
var t, n, i, r = 0, o = G.call(arguments), a = o.length, s = 1 !== a || e && K.isFunction(e.promise) ? a : 0, l = 1 === s ? e : K.Deferred(), d = function(e, n, i) {
return function(r) {
n[e] = this,
i[e] = arguments.length > 1 ? G.call(arguments) : r,
i === t ? l.notifyWith(n, i) : --s || l.resolveWith(n, i)
}
};
if (a > 1)
for (t = new Array(a),
n = new Array(a),
i = new Array(a); r < a; r++)
o[r] && K.isFunction(o[r].promise) ? o[r].promise().done(d(r, i, o)).fail(l.reject).progress(d(r, n, t)) : --s;
return s || l.resolveWith(i, o),
l.promise()
}
}),
K.support = function() {
var t, n, i, r, o, a, s, l, d, c, u, p = F.createElement("div");
if (p.setAttribute("className", "t"),
p.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",
n = p.getElementsByTagName("*"),
i = p.getElementsByTagName("a")[0],
!n || !i || !n.length)
return {};
r = F.createElement("select"),
o = r.appendChild(F.createElement("option")),
a = p.getElementsByTagName("input")[0],
i.style.cssText = "top:1px;float:left;opacity:.5",
t = {
leadingWhitespace: 3 === p.firstChild.nodeType,
tbody: !p.getElementsByTagName("tbody").length,
htmlSerialize: !!p.getElementsByTagName("link").length,
style: /top/.test(i.getAttribute("style")),
hrefNormalized: "/a" === i.getAttribute("href"),
opacity: /^0.5/.test(i.style.opacity),
cssFloat: !!i.style.cssFloat,
checkOn: "on" === a.value,
optSelected: o.selected,
getSetAttribute: "t" !== p.className,
enctype: !!F.createElement("form").enctype,
html5Clone: "<:nav></:nav>" !== F.createElement("nav").cloneNode(!0).outerHTML,
boxModel: "CSS1Compat" === F.compatMode,
submitBubbles: !0,
changeBubbles: !0,
focusinBubbles: !1,
deleteExpando: !0,
noCloneEvent: !0,
inlineBlockNeedsLayout: !1,
shrinkWrapBlocks: !1,
reliableMarginRight: !0,
boxSizingReliable: !0,
pixelPosition: !1
},
a.checked = !0,
t.noCloneChecked = a.cloneNode(!0).checked,
r.disabled = !0,
t.optDisabled = !o.disabled;
try {
delete p.test
} catch (e) {
t.deleteExpando = !1
}
if (!p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent("onclick", u = function() {
t.noCloneEvent = !1
}
),
p.cloneNode(!0).fireEvent("onclick"),
p.detachEvent("onclick", u)),
a = F.createElement("input"),
a.value = "t",
a.setAttribute("type", "radio"),
t.radioValue = "t" === a.value,
a.setAttribute("checked", "checked"),
a.setAttribute("name", "t"),
p.appendChild(a),
s = F.createDocumentFragment(),
s.appendChild(p.lastChild),
t.checkClone = s.cloneNode(!0).cloneNode(!0).lastChild.checked,
t.appendChecked = a.checked,
s.removeChild(a),
s.appendChild(p),
p.attachEvent)
for (d in {
submit: !0,
change: !0,
focusin: !0
})
l = "on" + d,
c = l in p,
c || (p.setAttribute(l, "return;"),
c = "function" == typeof p[l]),
t[d + "Bubbles"] = c;
return K(function() {
var n, i, r, o, a = "padding:0;margin:0;border:0;display:block;overflow:hidden;", s = F.getElementsByTagName("body")[0];
s && (n = F.createElement("div"),
n.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",
s.insertBefore(n, s.firstChild),
i = F.createElement("div"),
n.appendChild(i),
i.innerHTML = "<table><tr><td></td><td>t</td></tr></table>",
r = i.getElementsByTagName("td"),
r[0].style.cssText = "padding:0;margin:0;border:0;display:none",
c = 0 === r[0].offsetHeight,
r[0].style.display = "",
r[1].style.display = "none",
t.reliableHiddenOffsets = c && 0 === r[0].offsetHeight,
i.innerHTML = "",
i.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",
t.boxSizing = 4 === i.offsetWidth,
t.doesNotIncludeMarginInBodyOffset = 1 !== s.offsetTop,
e.getComputedStyle && (t.pixelPosition = "1%" !== (e.getComputedStyle(i, null) || {}).top,
t.boxSizingReliable = "4px" === (e.getComputedStyle(i, null) || {
width: "4px"
}).width,
o = F.createElement("div"),
o.style.cssText = i.style.cssText = a,
o.style.marginRight = o.style.width = "0",
i.style.width = "1px",
i.appendChild(o),
t.reliableMarginRight = !parseFloat((e.getComputedStyle(o, null) || {}).marginRight)),
void 0 !== i.style.zoom && (i.innerHTML = "",
i.style.cssText = a + "width:1px;padding:1px;display:inline;zoom:1",
t.inlineBlockNeedsLayout = 3 === i.offsetWidth,
i.style.display = "block",
i.style.overflow = "visible",
i.innerHTML = "<div></div>",
i.firstChild.style.width = "5px",
t.shrinkWrapBlocks = 3 !== i.offsetWidth,
n.style.zoom = 1),
s.removeChild(n),
n = i = r = o = null)
}),
s.removeChild(p),
n = i = r = o = a = s = p = null,
t
}();
var he = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/
, me = /([A-Z])/g;
K.extend({
cache: {},
deletedIds: [],
uuid: 0,
expando: "jQuery" + (K.fn.jquery + Math.random()).replace(/\D/g, ""),
noData: {
embed: !0,
object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
applet: !0
},
hasData: function(e) {
return !!(e = e.nodeType ? K.cache[e[K.expando]] : e[K.expando]) && !r(e)
},
data: function(e, n, i, r) {
if (K.acceptData(e)) {
var o, a, s = K.expando, l = "string" == typeof n, d = e.nodeType, c = d ? K.cache : e, u = d ? e[s] : e[s] && s;
if (u && c[u] && (r || c[u].data) || !l || i !== t)
return u || (d ? e[s] = u = K.deletedIds.pop() || K.guid++ : u = s),
c[u] || (c[u] = {},
d || (c[u].toJSON = K.noop)),
"object" != typeof n && "function" != typeof n || (r ? c[u] = K.extend(c[u], n) : c[u].data = K.extend(c[u].data, n)),
o = c[u],
r || (o.data || (o.data = {}),
o = o.data),
i !== t && (o[K.camelCase(n)] = i),
l ? null == (a = o[n]) && (a = o[K.camelCase(n)]) : a = o,
a
}
},
removeData: function(e, t, n) {
if (K.acceptData(e)) {
var i, o, a, s = e.nodeType, l = s ? K.cache : e, d = s ? e[K.expando] : K.expando;
if (l[d]) {
if (t && (i = n ? l[d] : l[d].data)) {
K.isArray(t) || (t in i ? t = [t] : (t = K.camelCase(t),
t = t in i ? [t] : t.split(" ")));
for (o = 0,
a = t.length; o < a; o++)
delete i[t[o]];
if (!(n ? r : K.isEmptyObject)(i))
return
}
(n || (delete l[d].data,
r(l[d]))) && (s ? K.cleanData([e], !0) : K.support.deleteExpando || l != l.window ? delete l[d] : l[d] = null)
}
}
},
_data: function(e, t, n) {
return K.data(e, t, n, !0)
},
acceptData: function(e) {
var t = e.nodeName && K.noData[e.nodeName.toLowerCase()];
return !t || !0 !== t && e.getAttribute("classid") === t
}
}),
K.fn.extend({
data: function(e, n) {
var r, o, a, s, l, d = this[0], c = 0, u = null;
if (e === t) {
if (this.length && (u = K.data(d),
1 === d.nodeType && !K._data(d, "parsedAttrs"))) {
for (a = d.attributes,
l = a.length; c < l; c++)
s = a[c].name,
s.indexOf("data-") || (s = K.camelCase(s.substring(5)),
i(d, s, u[s]));
K._data(d, "parsedAttrs", !0)
}
return u
}
return "object" == typeof e ? this.each(function() {
K.data(this, e)
}) : (r = e.split(".", 2),
r[1] = r[1] ? "." + r[1] : "",
o = r[1] + "!",
K.access(this, function(n) {
if (n === t)
return u = this.triggerHandler("getData" + o, [r[0]]),
u === t && d && (u = K.data(d, e),
u = i(d, e, u)),
u === t && r[1] ? this.data(r[0]) : u;
r[1] = n,
this.each(function() {
var t = K(this);
t.triggerHandler("setData" + o, r),
K.data(this, e, n),
t.triggerHandler("changeData" + o, r)
})
}, null, n, arguments.length > 1, null, !1))
},
removeData: function(e) {
return this.each(function() {
K.removeData(this, e)
})
}
}),
K.extend({
queue: function(e, t, n) {
var i;
if (e)
return t = (t || "fx") + "queue",
i = K._data(e, t),
n && (!i || K.isArray(n) ? i = K._data(e, t, K.makeArray(n)) : i.push(n)),
i || []
},
dequeue: function(e, t) {
t = t || "fx";
var n = K.queue(e, t)
, i = n.length
, r = n.shift()
, o = K._queueHooks(e, t)
, a = function() {
K.dequeue(e, t)
};
"inprogress" === r && (r = n.shift(),
i--),
r && ("fx" === t && n.unshift("inprogress"),
delete o.stop,
r.call(e, a, o)),
!i && o && o.empty.fire()
},
_queueHooks: function(e, t) {
var n = t + "queueHooks";
return K._data(e, n) || K._data(e, n, {
empty: K.Callbacks("once memory").add(function() {
K.removeData(e, t + "queue", !0),
K.removeData(e, n, !0)
})
})
}
}),
K.fn.extend({
queue: function(e, n) {
var i = 2;
return "string" != typeof e && (n = e,
e = "fx",
i--),
arguments.length < i ? K.queue(this[0], e) : n === t ? this : this.each(function() {
var t = K.queue(this, e, n);
K._queueHooks(this, e),
"fx" === e && "inprogress" !== t[0] && K.dequeue(this, e)
})
},
dequeue: function(e) {
return this.each(function() {
K.dequeue(this, e)
})
},
delay: function(e, t) {
return e = K.fx ? K.fx.speeds[e] || e : e,
t = t || "fx",
this.queue(t, function(t, n) {
var i = setTimeout(t, e);
n.stop = function() {
clearTimeout(i)
}
})
},
clearQueue: function(e) {
return this.queue(e || "fx", [])
},
promise: function(e, n) {
var i, r = 1, o = K.Deferred(), a = this, s = this.length, l = function() {
--r || o.resolveWith(a, [a])
};
for ("string" != typeof e && (n = e,
e = t),
e = e || "fx"; s--; )
(i = K._data(a[s], e + "queueHooks")) && i.empty && (r++,
i.empty.add(l));
return l(),
o.promise(n)
}
});
var ye, ve, be, we = /[\t\r\n]/g, ke = /\r/g, xe = /^(?:button|input)$/i, Ce = /^(?:button|input|object|select|textarea)$/i, _e = /^a(?:rea|)$/i, Te = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, Ae = K.support.getSetAttribute;
K.fn.extend({
attr: function(e, t) {
return K.access(this, K.attr, e, t, arguments.length > 1)
},
removeAttr: function(e) {
return this.each(function() {
K.removeAttr(this, e)
})
},
prop: function(e, t) {
return K.access(this, K.prop, e, t, arguments.length > 1)
},
removeProp: function(e) {
return e = K.propFix[e] || e,
this.each(function() {
try {
this[e] = t,
delete this[e]
} catch (e) {}
})
},
addClass: function(e) {
var t, n, i, r, o, a, s;
if (K.isFunction(e))
return this.each(function(t) {
K(this).addClass(e.call(this, t, this.className))
});
if (e && "string" == typeof e)
for (t = e.split(te),
n = 0,
i = this.length; n < i; n++)
if (r = this[n],
1 === r.nodeType)
if (r.className || 1 !== t.length) {
for (o = " " + r.className + " ",
a = 0,
s = t.length; a < s; a++)
o.indexOf(" " + t[a] + " ") < 0 && (o += t[a] + " ");
r.className = K.trim(o)
} else
r.className = e;
return this
},
removeClass: function(e) {
var n, i, r, o, a, s, l;
if (K.isFunction(e))
return this.each(function(t) {
K(this).removeClass(e.call(this, t, this.className))
});
if (e && "string" == typeof e || e === t)
for (n = (e || "").split(te),
s = 0,
l = this.length; s < l; s++)
if (r = this[s],
1 === r.nodeType && r.className) {
for (i = (" " + r.className + " ").replace(we, " "),
o = 0,
a = n.length; o < a; o++)
for (; i.indexOf(" " + n[o] + " ") >= 0; )
i = i.replace(" " + n[o] + " ", " ");
r.className = e ? K.trim(i) : ""
}
return this
},
toggleClass: function(e, t) {
var n = typeof e
, i = "boolean" == typeof t;
return K.isFunction(e) ? this.each(function(n) {
K(this).toggleClass(e.call(this, n, this.className, t), t)
}) : this.each(function() {
if ("string" === n)
for (var r, o = 0, a = K(this), s = t, l = e.split(te); r = l[o++]; )
s = i ? s : !a.hasClass(r),
a[s ? "addClass" : "removeClass"](r);
else
"undefined" !== n && "boolean" !== n || (this.className && K._data(this, "__className__", this.className),
this.className = this.className || !1 === e ? "" : K._data(this, "__className__") || "")
})
},
hasClass: function(e) {
for (var t = " " + e + " ", n = 0, i = this.length; n < i; n++)
if (1 === this[n].nodeType && (" " + this[n].className + " ").replace(we, " ").indexOf(t) >= 0)
return !0;
return !1
},
val: function(e) {
var n, i, r, o = this[0];
{
if (arguments.length)
return r = K.isFunction(e),
this.each(function(i) {
var o, a = K(this);
1 === this.nodeType && (o = r ? e.call(this, i, a.val()) : e,
null == o ? o = "" : "number" == typeof o ? o += "" : K.isArray(o) && (o = K.map(o, function(e) {
return null == e ? "" : e + ""
})),
(n = K.valHooks[this.type] || K.valHooks[this.nodeName.toLowerCase()]) && "set"in n && n.set(this, o, "value") !== t || (this.value = o))
});
if (o)
return (n = K.valHooks[o.type] || K.valHooks[o.nodeName.toLowerCase()]) && "get"in n && (i = n.get(o, "value")) !== t ? i : (i = o.value,
"string" == typeof i ? i.replace(ke, "") : null == i ? "" : i)
}
}
}),
K.extend({
valHooks: {
option: {
get: function(e) {
var t = e.attributes.value;
return !t || t.specified ? e.value : e.text
}
},
select: {
get: function(e) {
for (var t, n, i = e.options, r = e.selectedIndex, o = "select-one" === e.type || r < 0, a = o ? null : [], s = o ? r + 1 : i.length, l = r < 0 ? s : o ? r : 0; l < s; l++)
if (n = i[l],
(n.selected || l === r) && (K.support.optDisabled ? !n.disabled : null === n.getAttribute("disabled")) && (!n.parentNode.disabled || !K.nodeName(n.parentNode, "optgroup"))) {
if (t = K(n).val(),
o)
return t;
a.push(t)
}
return a
},
set: function(e, t) {
var n = K.makeArray(t);
return K(e).find("option").each(function() {
this.selected = K.inArray(K(this).val(), n) >= 0
}),
n.length || (e.selectedIndex = -1),
n
}
}
},
attrFn: {},
attr: function(e, n, i, r) {
var o, a, s, l = e.nodeType;
if (e && 3 !== l && 8 !== l && 2 !== l)
return r && K.isFunction(K.fn[n]) ? K(e)[n](i) : void 0 === e.getAttribute ? K.prop(e, n, i) : (s = 1 !== l || !K.isXMLDoc(e),
s && (n = n.toLowerCase(),
a = K.attrHooks[n] || (Te.test(n) ? ve : ye)),
i !== t ? null === i ? void K.removeAttr(e, n) : a && "set"in a && s && (o = a.set(e, i, n)) !== t ? o : (e.setAttribute(n, i + ""),
i) : a && "get"in a && s && null !== (o = a.get(e, n)) ? o : (o = e.getAttribute(n),
null === o ? t : o))
},
removeAttr: function(e, t) {
var n, i, r, o, a = 0;
if (t && 1 === e.nodeType)
for (i = t.split(te); a < i.length; a++)
(r = i[a]) && (n = K.propFix[r] || r,
o = Te.test(r),
o || K.attr(e, r, ""),
e.removeAttribute(Ae ? r : n),
o && n in e && (e[n] = !1))
},
attrHooks: {
type: {
set: function(e, t) {
if (xe.test(e.nodeName) && e.parentNode)
K.error("type property can't be changed");
else if (!K.support.radioValue && "radio" === t && K.nodeName(e, "input")) {
var n = e.value;
return e.setAttribute("type", t),
n && (e.value = n),
t
}
}
},
value: {
get: function(e, t) {
return ye && K.nodeName(e, "button") ? ye.get(e, t) : t in e ? e.value : null
},
set: function(e, t, n) {
if (ye && K.nodeName(e, "button"))
return ye.set(e, t, n);
e.value = t
}
}
},
propFix: {
tabindex: "tabIndex",
readonly: "readOnly",
for: "htmlFor",
class: "className",
maxlength: "maxLength",
cellspacing: "cellSpacing",
cellpadding: "cellPadding",
rowspan: "rowSpan",
colspan: "colSpan",
usemap: "useMap",
frameborder: "frameBorder",
contenteditable: "contentEditable"
},
prop: function(e, n, i) {
var r, o, a, s = e.nodeType;
if (e && 3 !== s && 8 !== s && 2 !== s)
return a = 1 !== s || !K.isXMLDoc(e),
a && (n = K.propFix[n] || n,
o = K.propHooks[n]),
i !== t ? o && "set"in o && (r = o.set(e, i, n)) !== t ? r : e[n] = i : o && "get"in o && null !== (r = o.get(e, n)) ? r : e[n]
},
propHooks: {
tabIndex: {
get: function(e) {
var n = e.getAttributeNode("tabindex");
return n && n.specified ? parseInt(n.value, 10) : Ce.test(e.nodeName) || _e.test(e.nodeName) && e.href ? 0 : t
}
}
}
}),
ve = {
get: function(e, n) {
var i, r = K.prop(e, n);
return !0 === r || "boolean" != typeof r && (i = e.getAttributeNode(n)) && !1 !== i.nodeValue ? n.toLowerCase() : t
},
set: function(e, t, n) {
var i;
return !1 === t ? K.removeAttr(e, n) : (i = K.propFix[n] || n,
i in e && (e[i] = !0),
e.setAttribute(n, n.toLowerCase())),
n
}
},
Ae || (be = {
name: !0,
id: !0,
coords: !0
},
ye = K.valHooks.button = {
get: function(e, n) {
var i;
return i = e.getAttributeNode(n),
i && (be[n] ? "" !== i.value : i.specified) ? i.value : t
},
set: function(e, t, n) {
var i = e.getAttributeNode(n);
return i || (i = F.createAttribute(n),
e.setAttributeNode(i)),
i.value = t + ""
}
},
K.each(["width", "height"], function(e, t) {
K.attrHooks[t] = K.extend(K.attrHooks[t], {
set: function(e, n) {
if ("" === n)
return e.setAttribute(t, "auto"),
n
}
})
}),
K.attrHooks.contenteditable = {
get: ye.get,
set: function(e, t, n) {
"" === t && (t = "false"),
ye.set(e, t, n)
}
}),
K.support.hrefNormalized || K.each(["href", "src", "width", "height"], function(e, n) {
K.attrHooks[n] = K.extend(K.attrHooks[n], {
get: function(e) {
var i = e.getAttribute(n, 2);
return null === i ? t : i
}
})
}),
K.support.style || (K.attrHooks.style = {
get: function(e) {
return e.style.cssText.toLowerCase() || t
},
set: function(e, t) {
return e.style.cssText = t + ""
}
}),
K.support.optSelected || (K.propHooks.selected = K.extend(K.propHooks.selected, {
get: function(e) {
var t = e.parentNode;
return t && (t.selectedIndex,
t.parentNode && t.parentNode.selectedIndex),
null
}
})),
K.support.enctype || (K.propFix.enctype = "encoding"),
K.support.checkOn || K.each(["radio", "checkbox"], function() {
K.valHooks[this] = {
get: function(e) {
return null === e.getAttribute("value") ? "on" : e.value
}
}
}),
K.each(["radio", "checkbox"], function() {
K.valHooks[this] = K.extend(K.valHooks[this], {
set: function(e, t) {
if (K.isArray(t))
return e.checked = K.inArray(K(e).val(), t) >= 0
}
})
});
var Se = /^(?:textarea|input|select)$/i
, je = /^([^\.]*|)(?:\.(.+)|)$/
, Ne = /(?:^|\s)hover(\.\S+|)\b/
, Ee = /^key/
, De = /^(?:mouse|contextmenu)|click/
, Pe = /^(?:focusinfocus|focusoutblur)$/
, Ie = function(e) {
return K.event.special.hover ? e : e.replace(Ne, "mouseenter$1 mouseleave$1")
};
K.event = {
add: function(e, n, i, r, o) {
var a, s, l, d, c, u, p, f, g, h, m;
if (3 !== e.nodeType && 8 !== e.nodeType && n && i && (a = K._data(e))) {
for (i.handler && (g = i,
i = g.handler,
o = g.selector),
i.guid || (i.guid = K.guid++),
l = a.events,
l || (a.events = l = {}),
s = a.handle,
s || (a.handle = s = function(e) {
return void 0 === K || e && K.event.triggered === e.type ? t : K.event.dispatch.apply(s.elem, arguments)
}
,
s.elem = e),
n = K.trim(Ie(n)).split(" "),
d = 0; d < n.length; d++)
c = je.exec(n[d]) || [],
u = c[1],
p = (c[2] || "").split(".").sort(),
m = K.event.special[u] || {},
u = (o ? m.delegateType : m.bindType) || u,
m = K.event.special[u] || {},
f = K.extend({
type: u,
origType: c[1],
data: r,
handler: i,
guid: i.guid,
selector: o,
needsContext: o && K.expr.match.needsContext.test(o),
namespace: p.join(".")
}, g),
h = l[u],
h || (h = l[u] = [],
h.delegateCount = 0,
m.setup && !1 !== m.setup.call(e, r, p, s) || (e.addEventListener ? e.addEventListener(u, s, !1) : e.attachEvent && e.attachEvent("on" + u, s))),
m.add && (m.add.call(e, f),
f.handler.guid || (f.handler.guid = i.guid)),
o ? h.splice(h.delegateCount++, 0, f) : h.push(f),
K.event.global[u] = !0;
e = null
}
},
global: {},
remove: function(e, t, n, i, r) {
var o, a, s, l, d, c, u, p, f, g, h, m = K.hasData(e) && K._data(e);
if (m && (p = m.events)) {
for (t = K.trim(Ie(t || "")).split(" "),
o = 0; o < t.length; o++)
if (a = je.exec(t[o]) || [],
s = l = a[1],
d = a[2],
s) {
for (f = K.event.special[s] || {},
s = (i ? f.delegateType : f.bindType) || s,
g = p[s] || [],
c = g.length,
d = d ? new RegExp("(^|\\.)" + d.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null,
u = 0; u < g.length; u++)
h = g[u],
!r && l !== h.origType || n && n.guid !== h.guid || d && !d.test(h.namespace) || i && i !== h.selector && ("**" !== i || !h.selector) || (g.splice(u--, 1),
h.selector && g.delegateCount--,
f.remove && f.remove.call(e, h));
0 === g.length && c !== g.length && (f.teardown && !1 !== f.teardown.call(e, d, m.handle) || K.removeEvent(e, s, m.handle),
delete p[s])
} else
for (s in p)
K.event.remove(e, s + t[o], n, i, !0);
K.isEmptyObject(p) && (delete m.handle,
K.removeData(e, "events", !0))
}
},
customEvent: {
getData: !0,
setData: !0,
changeData: !0
},
trigger: function(n, i, r, o) {
if (!r || 3 !== r.nodeType && 8 !== r.nodeType) {
var a, s, l, d, c, u, p, f, g, h, m = n.type || n, y = [];
if (!Pe.test(m + K.event.triggered) && (m.indexOf("!") >= 0 && (m = m.slice(0, -1),
s = !0),
m.indexOf(".") >= 0 && (y = m.split("."),
m = y.shift(),
y.sort()),
r && !K.event.customEvent[m] || K.event.global[m]))
if (n = "object" == typeof n ? n[K.expando] ? n : new K.Event(m,n) : new K.Event(m),
n.type = m,
n.isTrigger = !0,
n.exclusive = s,
n.namespace = y.join("."),
n.namespace_re = n.namespace ? new RegExp("(^|\\.)" + y.join("\\.(?:.*\\.|)") + "(\\.|$)") : null,
u = m.indexOf(":") < 0 ? "on" + m : "",
r) {
if (n.result = t,
n.target || (n.target = r),
i = null != i ? K.makeArray(i) : [],
i.unshift(n),
p = K.event.special[m] || {},
!p.trigger || !1 !== p.trigger.apply(r, i)) {
if (g = [[r, p.bindType || m]],
!o && !p.noBubble && !K.isWindow(r)) {
for (h = p.delegateType || m,
d = Pe.test(h + m) ? r : r.parentNode,
c = r; d; d = d.parentNode)
g.push([d, h]),
c = d;
c === (r.ownerDocument || F) && g.push([c.defaultView || c.parentWindow || e, h])
}
for (l = 0; l < g.length && !n.isPropagationStopped(); l++)
d = g[l][0],
n.type = g[l][1],
f = (K._data(d, "events") || {})[n.type] && K._data(d, "handle"),
f && f.apply(d, i),
(f = u && d[u]) && K.acceptData(d) && f.apply && !1 === f.apply(d, i) && n.preventDefault();
return n.type = m,
o || n.isDefaultPrevented() || p._default && !1 !== p._default.apply(r.ownerDocument, i) || "click" === m && K.nodeName(r, "a") || !K.acceptData(r) || u && r[m] && ("focus" !== m && "blur" !== m || 0 !== n.target.offsetWidth) && !K.isWindow(r) && (c = r[u],
c && (r[u] = null),
K.event.triggered = m,
r[m](),
K.event.triggered = t,
c && (r[u] = c)),
n.result
}
} else {
a = K.cache;
for (l in a)
a[l].events && a[l].events[m] && K.event.trigger(n, i, a[l].handle.elem, !0)
}
}
},
dispatch: function(n) {
n = K.event.fix(n || e.event);
var i, r, o, a, s, l, d, c, u, p = (K._data(this, "events") || {})[n.type] || [], f = p.delegateCount, g = G.call(arguments), h = !n.exclusive && !n.namespace, m = K.event.special[n.type] || {}, y = [];
if (g[0] = n,
n.delegateTarget = this,
!m.preDispatch || !1 !== m.preDispatch.call(this, n)) {
if (f && (!n.button || "click" !== n.type))
for (o = n.target; o != this; o = o.parentNode || this)
if (!0 !== o.disabled || "click" !== n.type) {
for (s = {},
d = [],
i = 0; i < f; i++)
c = p[i],
u = c.selector,
s[u] === t && (s[u] = c.needsContext ? K(u, this).index(o) >= 0 : K.find(u, this, null, [o]).length),
s[u] && d.push(c);
d.length && y.push({
elem: o,
matches: d
})
}
for (p.length > f && y.push({
elem: this,
matches: p.slice(f)
}),
i = 0; i < y.length && !n.isPropagationStopped(); i++)
for (l = y[i],
n.currentTarget = l.elem,
r = 0; r < l.matches.length && !n.isImmediatePropagationStopped(); r++)
c = l.matches[r],
(h || !n.namespace && !c.namespace || n.namespace_re && n.namespace_re.test(c.namespace)) && (n.data = c.data,
n.handleObj = c,
(a = ((K.event.special[c.origType] || {}).handle || c.handler).apply(l.elem, g)) !== t && (n.result = a,
!1 === a && (n.preventDefault(),
n.stopPropagation())));
return m.postDispatch && m.postDispatch.call(this, n),
n.result
}
},
props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
fixHooks: {},
keyHooks: {
props: "char charCode key keyCode".split(" "),
filter: function(e, t) {
return null == e.which && (e.which = null != t.charCode ? t.charCode : t.keyCode),
e
}
},
mouseHooks: {
props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
filter: function(e, n) {
var i, r, o, a = n.button, s = n.fromElement;
return null == e.pageX && null != n.clientX && (i = e.target.ownerDocument || F,
r = i.documentElement,
o = i.body,
e.pageX = n.clientX + (r && r.scrollLeft || o && o.scrollLeft || 0) - (r && r.clientLeft || o && o.clientLeft || 0),
e.pageY = n.clientY + (r && r.scrollTop || o && o.scrollTop || 0) - (r && r.clientTop || o && o.clientTop || 0)),
!e.relatedTarget && s && (e.relatedTarget = s === e.target ? n.toElement : s),
e.which || a === t || (e.which = 1 & a ? 1 : 2 & a ? 3 : 4 & a ? 2 : 0),
e
}
},
fix: function(e) {
if (e[K.expando])
return e;
var t, n, i = e, r = K.event.fixHooks[e.type] || {}, o = r.props ? this.props.concat(r.props) : this.props;
for (e = K.Event(i),
t = o.length; t; )
n = o[--t],
e[n] = i[n];
return e.target || (e.target = i.srcElement || F),
3 === e.target.nodeType && (e.target = e.target.parentNode),
e.metaKey = !!e.metaKey,
r.filter ? r.filter(e, i) : e
},
special: {
load: {
noBubble: !0
},
focus: {
delegateType: "focusin"
},
blur: {
delegateType: "focusout"
},
beforeunload: {
setup: function(e, t, n) {
K.isWindow(this) && (this.onbeforeunload = n)
},
teardown: function(e, t) {
this.onbeforeunload === t && (this.onbeforeunload = null)
}
}
},
simulate: function(e, t, n, i) {
var r = K.extend(new K.Event, n, {
type: e,
isSimulated: !0,
originalEvent: {}
});
i ? K.event.trigger(r, null, t) : K.event.dispatch.call(t, r),
r.isDefaultPrevented() && n.preventDefault()
}
},
K.event.handle = K.event.dispatch,
K.removeEvent = F.removeEventListener ? function(e, t, n) {
e.removeEventListener && e.removeEventListener(t, n, !1)
}
: function(e, t, n) {
var i = "on" + t;
e.detachEvent && (void 0 === e[i] && (e[i] = null),
e.detachEvent(i, n))
}
,
K.Event = function(e, t) {
if (!(this instanceof K.Event))
return new K.Event(e,t);
e && e.type ? (this.originalEvent = e,
this.type = e.type,
this.isDefaultPrevented = e.defaultPrevented || !1 === e.returnValue || e.getPreventDefault && e.getPreventDefault() ? a : o) : this.type = e,
t && K.extend(this, t),
this.timeStamp = e && e.timeStamp || K.now(),
this[K.expando] = !0
}
,
K.Event.prototype = {
preventDefault: function() {
this.isDefaultPrevented = a;
var e = this.originalEvent;
e && (e.preventDefault ? e.preventDefault() : e.returnValue = !1)
},
stopPropagation: function() {
this.isPropagationStopped = a;
var e = this.originalEvent;
e && (e.stopPropagation && e.stopPropagation(),
e.cancelBubble = !0)
},
stopImmediatePropagation: function() {
this.isImmediatePropagationStopped = a,
this.stopPropagation()
},
isDefaultPrevented: o,
isPropagationStopped: o,
isImmediatePropagationStopped: o
},
K.each({
mouseenter: "mouseover",
mouseleave: "mouseout"
}, function(e, t) {
K.event.special[e] = {
delegateType: t,
bindType: t,
handle: function(e) {
var n, i = this, r = e.relatedTarget, o = e.handleObj;
o.selector;
return r && (r === i || K.contains(i, r)) || (e.type = o.origType,
n = o.handler.apply(this, arguments),
e.type = t),
n
}
}
}),
K.support.submitBubbles || (K.event.special.submit = {
setup: function() {
if (K.nodeName(this, "form"))
return !1;
K.event.add(this, "click._submit keypress._submit", function(e) {
var n = e.target
, i = K.nodeName(n, "input") || K.nodeName(n, "button") ? n.form : t;
i && !K._data(i, "_submit_attached") && (K.event.add(i, "submit._submit", function(e) {
e._submit_bubble = !0
}),
K._data(i, "_submit_attached", !0))
})
},
postDispatch: function(e) {
e._submit_bubble && (delete e._submit_bubble,
this.parentNode && !e.isTrigger && K.event.simulate("submit", this.parentNode, e, !0))
},
teardown: function() {
if (K.nodeName(this, "form"))
return !1;
K.event.remove(this, "._submit")
}
}),
K.support.changeBubbles || (K.event.special.change = {
setup: function() {
if (Se.test(this.nodeName))
return "checkbox" !== this.type && "radio" !== this.type || (K.event.add(this, "propertychange._change", function(e) {
"checked" === e.originalEvent.propertyName && (this._just_changed = !0)
}),
K.event.add(this, "click._change", function(e) {
this._just_changed && !e.isTrigger && (this._just_changed = !1),
K.event.simulate("change", this, e, !0)
})),
!1;
K.event.add(this, "beforeactivate._change", function(e) {
var t = e.target;
Se.test(t.nodeName) && !K._data(t, "_change_attached") && (K.event.add(t, "change._change", function(e) {
!this.parentNode || e.isSimulated || e.isTrigger || K.event.simulate("change", this.parentNode, e, !0)
}),
K._data(t, "_change_attached", !0))
})
},
handle: function(e) {
var t = e.target;
if (this !== t || e.isSimulated || e.isTrigger || "radio" !== t.type && "checkbox" !== t.type)
return e.handleObj.handler.apply(this, arguments)
},
teardown: function() {
return K.event.remove(this, "._change"),
!Se.test(this.nodeName)
}
}),
K.support.focusinBubbles || K.each({
focus: "focusin",
blur: "focusout"
}, function(e, t) {
var n = 0
, i = function(e) {
K.event.simulate(t, e.target, K.event.fix(e), !0)
};
K.event.special[t] = {
setup: function() {
0 == n++ && F.addEventListener(e, i, !0)
},
teardown: function() {
0 == --n && F.removeEventListener(e, i, !0)
}
}
}),
K.fn.extend({
on: function(e, n, i, r, a) {
var s, l;
if ("object" == typeof e) {
"string" != typeof n && (i = i || n,
n = t);
for (l in e)
this.on(l, n, i, e[l], a);
return this
}
if (null == i && null == r ? (r = n,
i = n = t) : null == r && ("string" == typeof n ? (r = i,
i = t) : (r = i,
i = n,
n = t)),
!1 === r)
r = o;
else if (!r)
return this;
return 1 === a && (s = r,
r = function(e) {
return K().off(e),
s.apply(this, arguments)
}
,
r.guid = s.guid || (s.guid = K.guid++)),
this.each(function() {
K.event.add(this, e, r, i, n)
})
},
one: function(e, t, n, i) {
return this.on(e, t, n, i, 1)
},
off: function(e, n, i) {
var r, a;
if (e && e.preventDefault && e.handleObj)
return r = e.handleObj,
K(e.delegateTarget).off(r.namespace ? r.origType + "." + r.namespace : r.origType, r.selector, r.handler),
this;
if ("object" == typeof e) {
for (a in e)
this.off(a, n, e[a]);
return this
}
return !1 !== n && "function" != typeof n || (i = n,
n = t),
!1 === i && (i = o),
this.each(function() {
K.event.remove(this, e, i, n)
})
},
bind: function(e, t, n) {
return this.on(e, null, t, n)
},
unbind: function(e, t) {
return this.off(e, null, t)
},
live: function(e, t, n) {
return K(this.context).on(e, this.selector, t, n),
this
},
die: function(e, t) {
return K(this.context).off(e, this.selector || "**", t),
this
},
delegate: function(e, t, n, i) {
return this.on(t, e, n, i)
},
undelegate: function(e, t, n) {
return 1 === arguments.length ? this.off(e, "**") : this.off(t, e || "**", n)
},
trigger: function(e, t) {
return this.each(function() {
K.event.trigger(e, t, this)
})
},
triggerHandler: function(e, t) {
if (this[0])
return K.event.trigger(e, t, this[0], !0)
},
toggle: function(e) {
var t = arguments
, n = e.guid || K.guid++
, i = 0
, r = function(n) {
var r = (K._data(this, "lastToggle" + e.guid) || 0) % i;
return K._data(this, "lastToggle" + e.guid, r + 1),
n.preventDefault(),
t[r].apply(this, arguments) || !1
};
for (r.guid = n; i < t.length; )
t[i++].guid = n;
return this.click(r)
},
hover: function(e, t) {
return this.mouseenter(e).mouseleave(t || e)
}
}),
K.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "), function(e, t) {
K.fn[t] = function(e, n) {
return null == n && (n = e,
e = null),
arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t)
}
,
Ee.test(t) && (K.event.fixHooks[t] = K.event.keyHooks),
De.test(t) && (K.event.fixHooks[t] = K.event.mouseHooks)
}),
function(e, t) {
function n(e, t, n, i) {
n = n || [],
t = t || E;
var r, o, a, s, l = t.nodeType;
if (!e || "string" != typeof e)
return n;
if (1 !== l && 9 !== l)
return [];
if (!(a = k(t)) && !i && (r = ee.exec(e)))
if (s = r[1]) {
if (9 === l) {
if (!(o = t.getElementById(s)) || !o.parentNode)
return n;
if (o.id === s)
return n.push(o),
n
} else if (t.ownerDocument && (o = t.ownerDocument.getElementById(s)) && x(t, o) && o.id === s)
return n.push(o),
n
} else {
if (r[2])
return M.apply(n, O.call(t.getElementsByTagName(e), 0)),
n;
if ((s = r[3]) && ce && t.getElementsByClassName)
return M.apply(n, O.call(t.getElementsByClassName(s), 0)),
n
}
return h(e.replace(J, "$1"), t, n, i, a)
}
function i(e) {
return function(t) {
return "input" === t.nodeName.toLowerCase() && t.type === e
}
}
function r(e) {
return function(t) {
var n = t.nodeName.toLowerCase();
return ("input" === n || "button" === n) && t.type === e
}
}
function o(e) {
return B(function(t) {
return t = +t,
B(function(n, i) {
for (var r, o = e([], n.length, t), a = o.length; a--; )
n[r = o[a]] && (n[r] = !(i[r] = n[r]))
})
})
}
function a(e, t, n) {
if (e === t)
return n;
for (var i = e.nextSibling; i; ) {
if (i === t)
return -1;
i = i.nextSibling
}
return 1
}
function s(e, t) {
var i, r, o, a, s, l, d, c = F[j][e + " "];
if (c)
return t ? 0 : c.slice(0);
for (s = e,
l = [],
d = b.preFilter; s; ) {
i && !(r = Y.exec(s)) || (r && (s = s.slice(r[0].length) || s),
l.push(o = [])),
i = !1,
(r = Q.exec(s)) && (o.push(i = new N(r.shift())),
s = s.slice(i.length),
i.type = r[0].replace(J, " "));
for (a in b.filter)
!(r = oe[a].exec(s)) || d[a] && !(r = d[a](r)) || (o.push(i = new N(r.shift())),
s = s.slice(i.length),
i.type = a,
i.matches = r);
if (!i)
break
}
return t ? s.length : s ? n.error(e) : F(e, l).slice(0)
}
function l(e, t, n) {
var i = t.dir
, r = n && "parentNode" === t.dir
, o = I++;
return t.first ? function(t, n, o) {
for (; t = t[i]; )
if (r || 1 === t.nodeType)
return e(t, n, o)
}
: function(t, n, a) {
if (a) {
for (; t = t[i]; )
if ((r || 1 === t.nodeType) && e(t, n, a))
return t
} else
for (var s, l = P + " " + o + " ", d = l + y; t = t[i]; )
if (r || 1 === t.nodeType) {
if ((s = t[j]) === d)
return t.sizset;
if ("string" == typeof s && 0 === s.indexOf(l)) {
if (t.sizset)
return t
} else {
if (t[j] = d,
e(t, n, a))
return t.sizset = !0,
t;
t.sizset = !1
}
}
}
}
function d(e) {
return e.length > 1 ? function(t, n, i) {
for (var r = e.length; r--; )
if (!e[r](t, n, i))
return !1;
return !0
}
: e[0]
}
function c(e, t, n, i, r) {
for (var o, a = [], s = 0, l = e.length, d = null != t; s < l; s++)
(o = e[s]) && (n && !n(o, i, r) || (a.push(o),
d && t.push(s)));
return a
}
function u(e, t, n, i, r, o) {
return i && !i[j] && (i = u(i)),
r && !r[j] && (r = u(r, o)),
B(function(o, a, s, l) {
var d, u, p, f = [], h = [], m = a.length, y = o || g(t || "*", s.nodeType ? [s] : s, []), v = !e || !o && t ? y : c(y, f, e, s, l), b = n ? r || (o ? e : m || i) ? [] : a : v;
if (n && n(v, b, s, l),
i)
for (d = c(b, h),
i(d, [], s, l),
u = d.length; u--; )
(p = d[u]) && (b[h[u]] = !(v[h[u]] = p));
if (o) {
if (r || e) {
if (r) {
for (d = [],
u = b.length; u--; )
(p = b[u]) && d.push(v[u] = p);
r(null, b = [], d, l)
}
for (u = b.length; u--; )
(p = b[u]) && (d = r ? q.call(o, p) : f[u]) > -1 && (o[d] = !(a[d] = p))
}
} else
b = c(b === a ? b.splice(m, b.length) : b),
r ? r(null, a, b, l) : M.apply(a, b)
})
}
function p(e) {
for (var t, n, i, r = e.length, o = b.relative[e[0].type], a = o || b.relative[" "], s = o ? 1 : 0, c = l(function(e) {
return e === t
}, a, !0), f = l(function(e) {
return q.call(t, e) > -1
}, a, !0), g = [function(e, n, i) {
return !o && (i || n !== A) || ((t = n).nodeType ? c(e, n, i) : f(e, n, i))
}
]; s < r; s++)
if (n = b.relative[e[s].type])
g = [l(d(g), n)];
else {
if (n = b.filter[e[s].type].apply(null, e[s].matches),
n[j]) {
for (i = ++s; i < r && !b.relative[e[i].type]; i++)
;
return u(s > 1 && d(g), s > 1 && e.slice(0, s - 1).join("").replace(J, "$1"), n, s < i && p(e.slice(s, i)), i < r && p(e = e.slice(i)), i < r && e.join(""))
}
g.push(n)
}
return d(g)
}
function f(e, t) {
var i = t.length > 0
, r = e.length > 0
, o = function(a, s, l, d, u) {
var p, f, g, h = [], m = 0, v = "0", w = a && [], k = null != u, x = A, C = a || r && b.find.TAG("*", u && s.parentNode || s), _ = P += null == x ? 1 : Math.E;
for (k && (A = s !== E && s,
y = o.el); null != (p = C[v]); v++) {
if (r && p) {
for (f = 0; g = e[f]; f++)
if (g(p, s, l)) {
d.push(p);
break
}
k && (P = _,
y = ++o.el)
}
i && ((p = !g && p) && m--,
a && w.push(p))
}
if (m += v,
i && v !== m) {
for (f = 0; g = t[f]; f++)
g(w, h, s, l);
if (a) {
if (m > 0)
for (; v--; )
w[v] || h[v] || (h[v] = L.call(d));
h = c(h)
}
M.apply(d, h),
k && !a && h.length > 0 && m + t.length > 1 && n.uniqueSort(d)
}
return k && (P = _,
A = x),
w
};
return o.el = 0,
i ? B(o) : o
}
function g(e, t, i) {
for (var r = 0, o = t.length; r < o; r++)
n(e, t[r], i);
return i
}
function h(e, t, n, i, r) {
var o, a, l, d, c, u = s(e);
u.length;
if (!i && 1 === u.length) {
if (a = u[0] = u[0].slice(0),
a.length > 2 && "ID" === (l = a[0]).type && 9 === t.nodeType && !r && b.relative[a[1].type]) {
if (!(t = b.find.ID(l.matches[0].replace(re, ""), t, r)[0]))
return n;
e = e.slice(a.shift().length)
}
for (o = oe.POS.test(e) ? -1 : a.length - 1; o >= 0 && (l = a[o],
!b.relative[d = l.type]); o--)
if ((c = b.find[d]) && (i = c(l.matches[0].replace(re, ""), te.test(a[0].type) && t.parentNode || t, r))) {
if (a.splice(o, 1),
!(e = i.length && a.join("")))
return M.apply(n, O.call(i, 0)),
n;
break
}
}
return C(e, u)(i, t, r, n, te.test(e)),
n
}
function m() {}
var y, v, b, w, k, x, C, _, T, A, S = !0, j = ("sizcache" + Math.random()).replace(".", ""), N = String, E = e.document, D = E.documentElement, P = 0, I = 0, L = [].pop, M = [].push, O = [].slice, q = [].indexOf || function(e) {
for (var t = 0, n = this.length; t < n; t++)
if (this[t] === e)
return t;
return -1
}
, B = function(e, t) {
return e[j] = null == t || t,
e
}, R = function() {
var e = {}
, t = [];
return B(function(n, i) {
return t.push(n) > b.cacheLength && delete e[t.shift()],
e[n + " "] = i
}, e)
}, $ = R(), F = R(), H = R(), U = "[\\x20\\t\\r\\n\\f]", z = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", V = z.replace("w", "w#"), W = "\\[" + U + "*(" + z + ")" + U + "*(?:([*^$|!~]?=)" + U + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + V + ")|)|)" + U + "*\\]", G = ":(" + z + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + W + ")|[^:]|\\\\.)*|.*))\\)|)", X = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + U + "*((?:-\\d)?\\d*)" + U + "*\\)|)(?=[^-]|$)", J = new RegExp("^" + U + "+|((?:^|[^\\\\])(?:\\\\.)*)" + U + "+$","g"), Y = new RegExp("^" + U + "*," + U + "*"), Q = new RegExp("^" + U + "*([\\x20\\t\\r\\n\\f>+~])" + U + "*"), Z = new RegExp(G), ee = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, te = /[\x20\t\r\n\f]*[+~]/, ne = /h\d/i, ie = /input|select|textarea|button/i, re = /\\(?!\\)/g, oe = {
ID: new RegExp("^#(" + z + ")"),
CLASS: new RegExp("^\\.(" + z + ")"),
NAME: new RegExp("^\\[name=['\"]?(" + z + ")['\"]?\\]"),
TAG: new RegExp("^(" + z.replace("w", "w*") + ")"),
ATTR: new RegExp("^" + W),
PSEUDO: new RegExp("^" + G),
POS: new RegExp(X,"i"),
CHILD: new RegExp("^:(only|nth|first|last)-child(?:\\(" + U + "*(even|odd|(([+-]|)(\\d*)n|)" + U + "*(?:([+-]|)" + U + "*(\\d+)|))" + U + "*\\)|)","i"),
needsContext: new RegExp("^" + U + "*[>+~]|" + X,"i")
}, ae = function(e) {
var t = E.createElement("div");
try {
return e(t)
} catch (e) {
return !1
} finally {
t = null
}
}, se = ae(function(e) {
return e.appendChild(E.createComment("")),
!e.getElementsByTagName("*").length
}), le = ae(function(e) {
return e.innerHTML = "<a href='#'></a>",
e.firstChild && void 0 !== e.firstChild.getAttribute && "#" === e.firstChild.getAttribute("href")
}), de = ae(function(e) {
e.innerHTML = "<select></select>";
var t = typeof e.lastChild.getAttribute("multiple");
return "boolean" !== t && "string" !== t
}), ce = ae(function(e) {
return e.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>",
!(!e.getElementsByClassName || !e.getElementsByClassName("e").length) && (e.lastChild.className = "e",
2 === e.getElementsByClassName("e").length)
}), ue = ae(function(e) {
e.id = j + 0,
e.innerHTML = "<a name='" + j + "'></a><div name='" + j + "'></div>",
D.insertBefore(e, D.firstChild);
var t = E.getElementsByName && E.getElementsByName(j).length === 2 + E.getElementsByName(j + 0).length;
return v = !E.getElementById(j),
D.removeChild(e),
t
});
try {
O.call(D.childNodes, 0)[0].nodeType
} catch (e) {
O = function(e) {
for (var t, n = []; t = this[e]; e++)
n.push(t);
return n
}
}
n.matches = function(e, t) {
return n(e, null, null, t)
}
,
n.matchesSelector = function(e, t) {
return n(t, null, null, [e]).length > 0
}
,
w = n.getText = function(e) {
var t, n = "", i = 0, r = e.nodeType;
if (r) {
if (1 === r || 9 === r || 11 === r) {
if ("string" == typeof e.textContent)
return e.textContent;
for (e = e.firstChild; e; e = e.nextSibling)
n += w(e)
} else if (3 === r || 4 === r)
return e.nodeValue
} else
for (; t = e[i]; i++)
n += w(t);
return n
}
,
k = n.isXML = function(e) {
var t = e && (e.ownerDocument || e).documentElement;
return !!t && "HTML" !== t.nodeName
}
,
x = n.contains = D.contains ? function(e, t) {
var n = 9 === e.nodeType ? e.documentElement : e
, i = t && t.parentNode;
return e === i || !!(i && 1 === i.nodeType && n.contains && n.contains(i))
}
: D.compareDocumentPosition ? function(e, t) {
return t && !!(16 & e.compareDocumentPosition(t))
}
: function(e, t) {
for (; t = t.parentNode; )
if (t === e)
return !0;
return !1
}
,
n.attr = function(e, t) {
var n, i = k(e);
return i || (t = t.toLowerCase()),
(n = b.attrHandle[t]) ? n(e) : i || de ? e.getAttribute(t) : (n = e.getAttributeNode(t),
n ? "boolean" == typeof e[t] ? e[t] ? t : null : n.specified ? n.value : null : null)
}
,
b = n.selectors = {
cacheLength: 50,
createPseudo: B,
match: oe,
attrHandle: le ? {} : {
href: function(e) {
return e.getAttribute("href", 2)
},
type: function(e) {
return e.getAttribute("type")
}
},
find: {
ID: v ? function(e, t, n) {
if (void 0 !== t.getElementById && !n) {
var i = t.getElementById(e);
return i && i.parentNode ? [i] : []
}
}
: function(e, t, n) {
if (void 0 !== t.getElementById && !n) {
var i = t.getElementById(e);
return i ? i.id === e || void 0 !== i.getAttributeNode && i.getAttributeNode("id").value === e ? [i] : void 0 : []
}
}
,
TAG: se ? function(e, t) {
if (void 0 !== t.getElementsByTagName)
return t.getElementsByTagName(e)
}
: function(e, t) {
var n = t.getElementsByTagName(e);
if ("*" === e) {
for (var i, r = [], o = 0; i = n[o]; o++)
1 === i.nodeType && r.push(i);
return r
}
return n
}
,
NAME: ue && function(e, t) {
if (void 0 !== t.getElementsByName)
return t.getElementsByName(name)
}
,
CLASS: ce && function(e, t, n) {
if (void 0 !== t.getElementsByClassName && !n)
return t.getElementsByClassName(e)
}
},
relative: {
">": {
dir: "parentNode",
first: !0
},
" ": {
dir: "parentNode"
},
"+": {
dir: "previousSibling",
first: !0
},
"~": {
dir: "previousSibling"
}
},
preFilter: {
ATTR: function(e) {
return e[1] = e[1].replace(re, ""),
e[3] = (e[4] || e[5] || "").replace(re, ""),
"~=" === e[2] && (e[3] = " " + e[3] + " "),
e.slice(0, 4)
},
CHILD: function(e) {
return e[1] = e[1].toLowerCase(),
"nth" === e[1] ? (e[2] || n.error(e[0]),
e[3] = +(e[3] ? e[4] + (e[5] || 1) : 2 * ("even" === e[2] || "odd" === e[2])),
e[4] = +(e[6] + e[7] || "odd" === e[2])) : e[2] && n.error(e[0]),
e
},
PSEUDO: function(e) {
var t, n;
return oe.CHILD.test(e[0]) ? null : (e[3] ? e[2] = e[3] : (t = e[4]) && (Z.test(t) && (n = s(t, !0)) && (n = t.indexOf(")", t.length - n) - t.length) && (t = t.slice(0, n),
e[0] = e[0].slice(0, n)),
e[2] = t),
e.slice(0, 3))
}
},
filter: {
ID: v ? function(e) {
return e = e.replace(re, ""),
function(t) {
return t.getAttribute("id") === e
}
}
: function(e) {
return e = e.replace(re, ""),
function(t) {
var n = void 0 !== t.getAttributeNode && t.getAttributeNode("id");
return n && n.value === e
}
}
,
TAG: function(e) {
return "*" === e ? function() {
return !0
}
: (e = e.replace(re, "").toLowerCase(),
function(t) {
return t.nodeName && t.nodeName.toLowerCase() === e
}
)
},
CLASS: function(e) {
var t = $[j][e + " "];
return t || (t = new RegExp("(^|" + U + ")" + e + "(" + U + "|$)")) && $(e, function(e) {
return t.test(e.className || void 0 !== e.getAttribute && e.getAttribute("class") || "")
})
},
ATTR: function(e, t, i) {
return function(r, o) {
var a = n.attr(r, e);
return null == a ? "!=" === t : !t || (a += "",
"=" === t ? a === i : "!=" === t ? a !== i : "^=" === t ? i && 0 === a.indexOf(i) : "*=" === t ? i && a.indexOf(i) > -1 : "$=" === t ? i && a.substr(a.length - i.length) === i : "~=" === t ? (" " + a + " ").indexOf(i) > -1 : "|=" === t && (a === i || a.substr(0, i.length + 1) === i + "-"))
}
},
CHILD: function(e, t, n, i) {
return "nth" === e ? function(e) {
var t, r, o = e.parentNode;
if (1 === n && 0 === i)
return !0;
if (o)
for (r = 0,
t = o.firstChild; t && (1 !== t.nodeType || (r++,
e !== t)); t = t.nextSibling)
;
return (r -= i) === n || r % n == 0 && r / n >= 0
}
: function(t) {
var n = t;
switch (e) {
case "only":
case "first":
for (; n = n.previousSibling; )
if (1 === n.nodeType)
return !1;
if ("first" === e)
return !0;
n = t;
case "last":
for (; n = n.nextSibling; )
if (1 === n.nodeType)
return !1;
return !0
}
}
},
PSEUDO: function(e, t) {
var i, r = b.pseudos[e] || b.setFilters[e.toLowerCase()] || n.error("unsupported pseudo: " + e);
return r[j] ? r(t) : r.length > 1 ? (i = [e, e, "", t],
b.setFilters.hasOwnProperty(e.toLowerCase()) ? B(function(e, n) {
for (var i, o = r(e, t), a = o.length; a--; )
i = q.call(e, o[a]),
e[i] = !(n[i] = o[a])
}) : function(e) {
return r(e, 0, i)
}
) : r
}
},
pseudos: {
not: B(function(e) {
var t = []
, n = []
, i = C(e.replace(J, "$1"));
return i[j] ? B(function(e, t, n, r) {
for (var o, a = i(e, null, r, []), s = e.length; s--; )
(o = a[s]) && (e[s] = !(t[s] = o))
}) : function(e, r, o) {
return t[0] = e,
i(t, null, o, n),
!n.pop()
}
}),
has: B(function(e) {
return function(t) {
return n(e, t).length > 0
}
}),
contains: B(function(e) {
return function(t) {
return (t.textContent || t.innerText || w(t)).indexOf(e) > -1
}
}),
enabled: function(e) {
return !1 === e.disabled
},
disabled: function(e) {
return !0 === e.disabled
},
checked: function(e) {
var t = e.nodeName.toLowerCase();
return "input" === t && !!e.checked || "option" === t && !!e.selected
},
selected: function(e) {
return e.parentNode && e.parentNode.selectedIndex,
!0 === e.selected
},
parent: function(e) {
return !b.pseudos.empty(e)
},
empty: function(e) {
var t;
for (e = e.firstChild; e; ) {
if (e.nodeName > "@" || 3 === (t = e.nodeType) || 4 === t)
return !1;
e = e.nextSibling
}
return !0
},
header: function(e) {
return ne.test(e.nodeName)
},
text: function(e) {
var t, n;
return "input" === e.nodeName.toLowerCase() && "text" === (t = e.type) && (null == (n = e.getAttribute("type")) || n.toLowerCase() === t)
},
radio: i("radio"),
checkbox: i("checkbox"),
file: i("file"),
password: i("password"),
image: i("image"),
submit: r("submit"),
reset: r("reset"),
button: function(e) {
var t = e.nodeName.toLowerCase();
return "input" === t && "button" === e.type || "button" === t
},
input: function(e) {
return ie.test(e.nodeName)
},
focus: function(e) {
var t = e.ownerDocument;
return e === t.activeElement && (!t.hasFocus || t.hasFocus()) && !!(e.type || e.href || ~e.tabIndex)
},
active: function(e) {
return e === e.ownerDocument.activeElement
},
first: o(function() {
return [0]
}),
last: o(function(e, t) {
return [t - 1]
}),
eq: o(function(e, t, n) {
return [n < 0 ? n + t : n]
}),
even: o(function(e, t) {
for (var n = 0; n < t; n += 2)
e.push(n);
return e
}),
odd: o(function(e, t) {
for (var n = 1; n < t; n += 2)
e.push(n);
return e
}),
lt: o(function(e, t, n) {
for (var i = n < 0 ? n + t : n; --i >= 0; )
e.push(i);
return e
}),
gt: o(function(e, t, n) {
for (var i = n < 0 ? n + t : n; ++i < t; )
e.push(i);
return e
})
}
},
_ = D.compareDocumentPosition ? function(e, t) {
return e === t ? (T = !0,
0) : (e.compareDocumentPosition && t.compareDocumentPosition ? 4 & e.compareDocumentPosition(t) : e.compareDocumentPosition) ? -1 : 1
}
: function(e, t) {
if (e === t)
return T = !0,
0;
if (e.sourceIndex && t.sourceIndex)
return e.sourceIndex - t.sourceIndex;
var n, i, r = [], o = [], s = e.parentNode, l = t.parentNode, d = s;
if (s === l)
return a(e, t);
if (!s)
return -1;
if (!l)
return 1;
for (; d; )
r.unshift(d),
d = d.parentNode;
for (d = l; d; )
o.unshift(d),
d = d.parentNode;
n = r.length,
i = o.length;
for (var c = 0; c < n && c < i; c++)
if (r[c] !== o[c])
return a(r[c], o[c]);
return c === n ? a(e, o[c], -1) : a(r[c], t, 1)
}
,
[0, 0].sort(_),
S = !T,
n.uniqueSort = function(e) {
var t, n = [], i = 1, r = 0;
if (T = S,
e.sort(_),
T) {
for (; t = e[i]; i++)
t === e[i - 1] && (r = n.push(i));
for (; r--; )
e.splice(n[r], 1)
}
return e
}
,
n.error = function(e) {
throw new Error("Syntax error, unrecognized expression: " + e)
}
,
C = n.compile = function(e, t) {
var n, i = [], r = [], o = H[j][e + " "];
if (!o) {
for (t || (t = s(e)),
n = t.length; n--; )
o = p(t[n]),
o[j] ? i.push(o) : r.push(o);
o = H(e, f(r, i))
}
return o
}
,
E.querySelectorAll && function() {
var e, t = h, i = /'|\\/g, r = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, o = [":focus"], a = [":active"], l = D.matchesSelector || D.mozMatchesSelector || D.webkitMatchesSelector || D.oMatchesSelector || D.msMatchesSelector;
ae(function(e) {
e.innerHTML = "<select><option selected=''></option></select>",
e.querySelectorAll("[selected]").length || o.push("\\[" + U + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),
e.querySelectorAll(":checked").length || o.push(":checked")
}),
ae(function(e) {
e.innerHTML = "<p test=''></p>",
e.querySelectorAll("[test^='']").length && o.push("[*^$]=" + U + "*(?:\"\"|'')"),
e.innerHTML = "<input type='hidden'/>",
e.querySelectorAll(":enabled").length || o.push(":enabled", ":disabled")
}),
o = new RegExp(o.join("|")),
h = function(e, n, r, a, l) {
if (!a && !l && !o.test(e)) {
var d, c, u = !0, p = j, f = n, g = 9 === n.nodeType && e;
if (1 === n.nodeType && "object" !== n.nodeName.toLowerCase()) {
for (d = s(e),
(u = n.getAttribute("id")) ? p = u.replace(i, "\\$&") : n.setAttribute("id", p),
p = "[id='" + p + "'] ",
c = d.length; c--; )
d[c] = p + d[c].join("");
f = te.test(e) && n.parentNode || n,
g = d.join(",")
}
if (g)
try {
return M.apply(r, O.call(f.querySelectorAll(g), 0)),
r
} catch (e) {} finally {
u || n.removeAttribute("id")
}
}
return t(e, n, r, a, l)
}
,
l && (ae(function(t) {
e = l.call(t, "div");
try {
l.call(t, "[test!='']:sizzle"),
a.push("!=", G)
} catch (e) {}
}),
a = new RegExp(a.join("|")),
n.matchesSelector = function(t, i) {
if (i = i.replace(r, "='$1']"),
!k(t) && !a.test(i) && !o.test(i))
try {
var s = l.call(t, i);
if (s || e || t.document && 11 !== t.document.nodeType)
return s
} catch (e) {}
return n(i, null, null, [t]).length > 0
}
)
}(),
b.pseudos.nth = b.pseudos.eq,
b.filters = m.prototype = b.pseudos,
b.setFilters = new m,
n.attr = K.attr,
K.find = n,
K.expr = n.selectors,
K.expr[":"] = K.expr.pseudos,
K.unique = n.uniqueSort,
K.text = n.getText,
K.isXMLDoc = n.isXML,
K.contains = n.contains
}(e);
var Le = /Until$/
, Me = /^(?:parents|prev(?:Until|All))/
, Oe = /^.[^:#\[\.,]*$/
, qe = K.expr.match.needsContext
, Be = {
children: !0,
contents: !0,
next: !0,
prev: !0
};
K.fn.extend({
find: function(e) {
var t, n, i, r, o, a, s = this;
if ("string" != typeof e)
return K(e).filter(function() {
for (t = 0,
n = s.length; t < n; t++)
if (K.contains(s[t], this))
return !0
});
for (a = this.pushStack("", "find", e),
t = 0,
n = this.length; t < n; t++)
if (i = a.length,
K.find(e, this[t], a),
t > 0)
for (r = i; r < a.length; r++)
for (o = 0; o < i; o++)
if (a[o] === a[r]) {
a.splice(r--, 1);
break
}
return a
},
has: function(e) {
var t, n = K(e, this), i = n.length;
return this.filter(function() {
for (t = 0; t < i; t++)
if (K.contains(this, n[t]))
return !0
})
},
not: function(e) {
return this.pushStack(d(this, e, !1), "not", e)
},
filter: function(e) {
return this.pushStack(d(this, e, !0), "filter", e)
},
is: function(e) {
return !!e && ("string" == typeof e ? qe.test(e) ? K(e, this.context).index(this[0]) >= 0 : K.filter(e, this).length > 0 : this.filter(e).length > 0)
},
closest: function(e, t) {
for (var n, i = 0, r = this.length, o = [], a = qe.test(e) || "string" != typeof e ? K(e, t || this.context) : 0; i < r; i++)
for (n = this[i]; n && n.ownerDocument && n !== t && 11 !== n.nodeType; ) {
if (a ? a.index(n) > -1 : K.find.matchesSelector(n, e)) {
o.push(n);
break
}
n = n.parentNode
}
return o = o.length > 1 ? K.unique(o) : o,
this.pushStack(o, "closest", e)
},
index: function(e) {
return e ? "string" == typeof e ? K.inArray(this[0], K(e)) : K.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1
},
add: function(e, t) {
var n = "string" == typeof e ? K(e, t) : K.makeArray(e && e.nodeType ? [e] : e)
, i = K.merge(this.get(), n);
return this.pushStack(s(n[0]) || s(i[0]) ? i : K.unique(i))
},
addBack: function(e) {
return this.add(null == e ? this.prevObject : this.prevObject.filter(e))
}
}),
K.fn.andSelf = K.fn.addBack,
K.each({
parent: function(e) {
var t = e.parentNode;
return t && 11 !== t.nodeType ? t : null
},
parents: function(e) {
return K.dir(e, "parentNode")
},
parentsUntil: function(e, t, n) {
return K.dir(e, "parentNode", n)
},
next: function(e) {
return l(e, "nextSibling")
},
prev: function(e) {
return l(e, "previousSibling")
},
nextAll: function(e) {
return K.dir(e, "nextSibling")
},
prevAll: function(e) {
return K.dir(e, "previousSibling")
},
nextUntil: function(e, t, n) {
return K.dir(e, "nextSibling", n)
},
prevUntil: function(e, t, n) {
return K.dir(e, "previousSibling", n)
},
siblings: function(e) {
return K.sibling((e.parentNode || {}).firstChild, e)
},
children: function(e) {
return K.sibling(e.firstChild)
},
contents: function(e) {
return K.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : K.merge([], e.childNodes)
}
}, function(e, t) {
K.fn[e] = function(n, i) {
var r = K.map(this, t, n);
return Le.test(e) || (i = n),
i && "string" == typeof i && (r = K.filter(i, r)),
r = this.length > 1 && !Be[e] ? K.unique(r) : r,
this.length > 1 && Me.test(e) && (r = r.reverse()),
this.pushStack(r, e, G.call(arguments).join(","))
}
}),
K.extend({
filter: function(e, t, n) {
return n && (e = ":not(" + e + ")"),
1 === t.length ? K.find.matchesSelector(t[0], e) ? [t[0]] : [] : K.find.matches(e, t)
},
dir: function(e, n, i) {
for (var r = [], o = e[n]; o && 9 !== o.nodeType && (i === t || 1 !== o.nodeType || !K(o).is(i)); )
1 === o.nodeType && r.push(o),
o = o[n];
return r
},
sibling: function(e, t) {
for (var n = []; e; e = e.nextSibling)
1 === e.nodeType && e !== t && n.push(e);
return n
}
});
var Re = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video"
, $e = / jQuery\d+="(?:null|\d+)"/g
, Fe = /^\s+/
, He = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi
, Ue = /<([\w:]+)/
, ze = /<tbody/i
, Ve = /<|&#?\w+;/
, We = /<(?:script|style|link)/i
, Ge = /<(?:script|object|embed|option|style)/i
, Xe = new RegExp("<(?:" + Re + ")[\\s/>]","i")
, Je = /^(?:checkbox|radio)$/
, Ye = /checked\s*(?:[^=]|=\s*.checked.)/i
, Qe = /\/(java|ecma)script/i
, Ke = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g
, Ze = {
option: [1, "<select multiple='multiple'>", "</select>"],
legend: [1, "<fieldset>", "</fieldset>"],
thead: [1, "<table>", "</table>"],
tr: [2, "<table><tbody>", "</tbody></table>"],
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
col: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"],
area: [1, "<map>", "</map>"],
_default: [0, "", ""]
}
, et = c(F)
, tt = et.appendChild(F.createElement("div"));
Ze.optgroup = Ze.option,
Ze.tbody = Ze.tfoot = Ze.colgroup = Ze.caption = Ze.thead,
Ze.th = Ze.td,
K.support.htmlSerialize || (Ze._default = [1, "X<div>", "</div>"]),
K.fn.extend({
text: function(e) {
return K.access(this, function(e) {
return e === t ? K.text(this) : this.empty().append((this[0] && this[0].ownerDocument || F).createTextNode(e))
}, null, e, arguments.length)
},
wrapAll: function(e) {
if (K.isFunction(e))
return this.each(function(t) {
K(this).wrapAll(e.call(this, t))
});
if (this[0]) {
var t = K(e, this[0].ownerDocument).eq(0).clone(!0);
this[0].parentNode && t.insertBefore(this[0]),
t.map(function() {
for (var e = this; e.firstChild && 1 === e.firstChild.nodeType; )
e = e.firstChild;
return e
}).append(this)
}
return this
},
wrapInner: function(e) {
return K.isFunction(e) ? this.each(function(t) {
K(this).wrapInner(e.call(this, t))
}) : this.each(function() {
var t = K(this)
, n = t.contents();
n.length ? n.wrapAll(e) : t.append(e)
})
},
wrap: function(e) {
var t = K.isFunction(e);
return this.each(function(n) {
K(this).wrapAll(t ? e.call(this, n) : e)
})
},
unwrap: function() {
return this.parent().each(function() {
K.nodeName(this, "body") || K(this).replaceWith(this.childNodes)
}).end()
},
append: function() {
return this.domManip(arguments, !0, function(e) {
1 !== this.nodeType && 11 !== this.nodeType || this.appendChild(e)
})
},
prepend: function() {
return this.domManip(arguments, !0, function(e) {
1 !== this.nodeType && 11 !== this.nodeType || this.insertBefore(e, this.firstChild)
})
},
before: function() {
if (!s(this[0]))
return this.domManip(arguments, !1, function(e) {
this.parentNode.insertBefore(e, this)
});
if (arguments.length) {
var e = K.clean(arguments);
return this.pushStack(K.merge(e, this), "before", this.selector)
}
},
after: function() {
if (!s(this[0]))
return this.domManip(arguments, !1, function(e) {
this.parentNode.insertBefore(e, this.nextSibling)
});
if (arguments.length) {
var e = K.clean(arguments);
return this.pushStack(K.merge(this, e), "after", this.selector)
}
},
remove: function(e, t) {
for (var n, i = 0; null != (n = this[i]); i++)
e && !K.filter(e, [n]).length || (t || 1 !== n.nodeType || (K.cleanData(n.getElementsByTagName("*")),
K.cleanData([n])),
n.parentNode && n.parentNode.removeChild(n));
return this
},
empty: function() {
for (var e, t = 0; null != (e = this[t]); t++)
for (1 === e.nodeType && K.cleanData(e.getElementsByTagName("*")); e.firstChild; )
e.removeChild(e.firstChild);
return this
},
clone: function(e, t) {
return e = null != e && e,
t = null == t ? e : t,
this.map(function() {
return K.clone(this, e, t)
})
},
html: function(e) {
return K.access(this, function(e) {
var n = this[0] || {}
, i = 0
, r = this.length;
if (e === t)
return 1 === n.nodeType ? n.innerHTML.replace($e, "") : t;
if ("string" == typeof e && !We.test(e) && (K.support.htmlSerialize || !Xe.test(e)) && (K.support.leadingWhitespace || !Fe.test(e)) && !Ze[(Ue.exec(e) || ["", ""])[1].toLowerCase()]) {
e = e.replace(He, "<$1></$2>");
try {
for (; i < r; i++)
n = this[i] || {},
1 === n.nodeType && (K.cleanData(n.getElementsByTagName("*")),
n.innerHTML = e);
n = 0
} catch (e) {}
}
n && this.empty().append(e)
}, null, e, arguments.length)
},
replaceWith: function(e) {
return s(this[0]) ? this.length ? this.pushStack(K(K.isFunction(e) ? e() : e), "replaceWith", e) : this : K.isFunction(e) ? this.each(function(t) {
var n = K(this)
, i = n.html();
n.replaceWith(e.call(this, t, i))
}) : ("string" != typeof e && (e = K(e).detach()),
this.each(function() {
var t = this.nextSibling
, n = this.parentNode;
K(this).remove(),
t ? K(t).before(e) : K(n).append(e)
}))
},
detach: function(e) {
return this.remove(e, !0)
},
domManip: function(e, n, i) {
e = [].concat.apply([], e);
var r, o, a, s, l = 0, d = e[0], c = [], p = this.length;
if (!K.support.checkClone && p > 1 && "string" == typeof d && Ye.test(d))
return this.each(function() {
K(this).domManip(e, n, i)
});
if (K.isFunction(d))
return this.each(function(r) {
var o = K(this);
e[0] = d.call(this, r, n ? o.html() : t),
o.domManip(e, n, i)
});
if (this[0]) {
if (r = K.buildFragment(e, this, c),
a = r.fragment,
o = a.firstChild,
1 === a.childNodes.length && (a = o),
o)
for (n = n && K.nodeName(o, "tr"),
s = r.cacheable || p - 1; l < p; l++)
i.call(n && K.nodeName(this[l], "table") ? u(this[l], "tbody") : this[l], l === s ? a : K.clone(a, !0, !0));
a = o = null,
c.length && K.each(c, function(e, t) {
t.src ? K.ajax ? K.ajax({
url: t.src,
type: "GET",
dataType: "script",
async: !1,
global: !1,
throws: !0
}) : K.error("no ajax") : K.globalEval((t.text || t.textContent || t.innerHTML || "").replace(Ke, "")),
t.parentNode && t.parentNode.removeChild(t)
})
}
return this
}
}),
K.buildFragment = function(e, n, i) {
var r, o, a, s = e[0];
return n = n || F,
n = !n.nodeType && n[0] || n,
n = n.ownerDocument || n,
!(1 === e.length && "string" == typeof s && s.length < 512 && n === F && "<" === s.charAt(0)) || Ge.test(s) || !K.support.checkClone && Ye.test(s) || !K.support.html5Clone && Xe.test(s) || (o = !0,
r = K.fragments[s],
a = r !== t),
r || (r = n.createDocumentFragment(),
K.clean(e, n, r, i),
o && (K.fragments[s] = a && r)),
{
fragment: r,
cacheable: o
}
}
,
K.fragments = {},
K.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function(e, t) {
K.fn[e] = function(n) {
var i, r = 0, o = [], a = K(n), s = a.length, l = 1 === this.length && this[0].parentNode;
if ((null == l || l && 11 === l.nodeType && 1 === l.childNodes.length) && 1 === s)
return a[t](this[0]),
this;
for (; r < s; r++)
i = (r > 0 ? this.clone(!0) : this).get(),
K(a[r])[t](i),
o = o.concat(i);
return this.pushStack(o, e, a.selector)
}
}),
K.extend({
clone: function(e, t, n) {
var i, r, o, a;
if (K.support.html5Clone || K.isXMLDoc(e) || !Xe.test("<" + e.nodeName + ">") ? a = e.cloneNode(!0) : (tt.innerHTML = e.outerHTML,
tt.removeChild(a = tt.firstChild)),
!(K.support.noCloneEvent && K.support.noCloneChecked || 1 !== e.nodeType && 11 !== e.nodeType || K.isXMLDoc(e)))
for (f(e, a),
i = g(e),
r = g(a),
o = 0; i[o]; ++o)
r[o] && f(i[o], r[o]);
if (t && (p(e, a),
n))
for (i = g(e),
r = g(a),
o = 0; i[o]; ++o)
p(i[o], r[o]);
return i = r = null,
a
},
clean: function(e, t, n, i) {
var r, o, a, s, l, d, u, p, f, g, m, y = t === F && et, v = [];
for (t && void 0 !== t.createDocumentFragment || (t = F),
r = 0; null != (a = e[r]); r++)
if ("number" == typeof a && (a += ""),
a) {
if ("string" == typeof a)
if (Ve.test(a)) {
for (y = y || c(t),
u = t.createElement("div"),
y.appendChild(u),
a = a.replace(He, "<$1></$2>"),
s = (Ue.exec(a) || ["", ""])[1].toLowerCase(),
l = Ze[s] || Ze._default,
d = l[0],
u.innerHTML = l[1] + a + l[2]; d--; )
u = u.lastChild;
if (!K.support.tbody)
for (p = ze.test(a),
f = "table" !== s || p ? "<table>" !== l[1] || p ? [] : u.childNodes : u.firstChild && u.firstChild.childNodes,
o = f.length - 1; o >= 0; --o)
K.nodeName(f[o], "tbody") && !f[o].childNodes.length && f[o].parentNode.removeChild(f[o]);
!K.support.leadingWhitespace && Fe.test(a) && u.insertBefore(t.createTextNode(Fe.exec(a)[0]), u.firstChild),
a = u.childNodes,
u.parentNode.removeChild(u)
} else
a = t.createTextNode(a);
a.nodeType ? v.push(a) : K.merge(v, a)
}
if (u && (a = u = y = null),
!K.support.appendChecked)
for (r = 0; null != (a = v[r]); r++)
K.nodeName(a, "input") ? h(a) : void 0 !== a.getElementsByTagName && K.grep(a.getElementsByTagName("input"), h);
if (n)
for (g = function(e) {
if (!e.type || Qe.test(e.type))
return i ? i.push(e.parentNode ? e.parentNode.removeChild(e) : e) : n.appendChild(e)
}
,
r = 0; null != (a = v[r]); r++)
K.nodeName(a, "script") && g(a) || (n.appendChild(a),
void 0 !== a.getElementsByTagName && (m = K.grep(K.merge([], a.getElementsByTagName("script")), g),
v.splice.apply(v, [r + 1, 0].concat(m)),
r += m.length));
return v
},
cleanData: function(e, t) {
for (var n, i, r, o, a = 0, s = K.expando, l = K.cache, d = K.support.deleteExpando, c = K.event.special; null != (r = e[a]); a++)
if ((t || K.acceptData(r)) && (i = r[s],
n = i && l[i])) {
if (n.events)
for (o in n.events)
c[o] ? K.event.remove(r, o) : K.removeEvent(r, o, n.handle);
l[i] && (delete l[i],
d ? delete r[s] : r.removeAttribute ? r.removeAttribute(s) : r[s] = null,
K.deletedIds.push(i))
}
}
}),
function() {
var e, t;
K.uaMatch = function(e) {
e = e.toLowerCase();
var t = /(chrome)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || e.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e) || [];
return {
browser: t[1] || "",
version: t[2] || "0"
}
}
,
e = K.uaMatch(U.userAgent),
t = {},
e.browser && (t[e.browser] = !0,
t.version = e.version),
t.chrome ? t.webkit = !0 : t.webkit && (t.safari = !0),
K.browser = t,
K.sub = function() {
function e(t, n) {
return new e.fn.init(t,n)
}
K.extend(!0, e, this),
e.superclass = this,
e.fn = e.prototype = this(),
e.fn.constructor = e,
e.sub = this.sub,
e.fn.init = function(n, i) {
return i && i instanceof K && !(i instanceof e) && (i = e(i)),
K.fn.init.call(this, n, i, t)
}
,
e.fn.init.prototype = e.fn;
var t = e(F);
return e
}
}();
var nt, it, rt, ot = /alpha\([^)]*\)/i, at = /opacity=([^)]*)/, st = /^(top|right|bottom|left)$/, lt = /^(none|table(?!-c[ea]).+)/, dt = /^margin/, ct = new RegExp("^(" + Z + ")(.*)$","i"), ut = new RegExp("^(" + Z + ")(?!px)[a-z%]+$","i"), pt = new RegExp("^([-+])=(" + Z + ")","i"), ft = {
BODY: "block"
}, gt = {
position: "absolute",
visibility: "hidden",
display: "block"
}, ht = {
letterSpacing: 0,
fontWeight: 400
}, mt = ["Top", "Right", "Bottom", "Left"], yt = ["Webkit", "O", "Moz", "ms"], vt = K.fn.toggle;
K.fn.extend({
css: function(e, n) {
return K.access(this, function(e, n, i) {
return i !== t ? K.style(e, n, i) : K.css(e, n)
}, e, n, arguments.length > 1)
},
show: function() {
return v(this, !0)
},
hide: function() {
return v(this)
},
toggle: function(e, t) {
var n = "boolean" == typeof e;
return K.isFunction(e) && K.isFunction(t) ? vt.apply(this, arguments) : this.each(function() {
(n ? e : y(this)) ? K(this).show() : K(this).hide()
})
}
}),
K.extend({
cssHooks: {
opacity: {
get: function(e, t) {
if (t) {
var n = nt(e, "opacity");
return "" === n ? "1" : n
}
}
}
},
cssNumber: {
fillOpacity: !0,
fontWeight: !0,
lineHeight: !0,
opacity: !0,
orphans: !0,
widows: !0,
zIndex: !0,
zoom: !0
},
cssProps: {
float: K.support.cssFloat ? "cssFloat" : "styleFloat"
},
style: function(e, n, i, r) {
if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {
var o, a, s, l = K.camelCase(n), d = e.style;
if (n = K.cssProps[l] || (K.cssProps[l] = m(d, l)),
s = K.cssHooks[n] || K.cssHooks[l],
i === t)
return s && "get"in s && (o = s.get(e, !1, r)) !== t ? o : d[n];
if (!(a = typeof i,
"string" === a && (o = pt.exec(i)) && (i = (o[1] + 1) * o[2] + parseFloat(K.css(e, n)),
a = "number"),
null == i || "number" === a && isNaN(i) || ("number" !== a || K.cssNumber[l] || (i += "px"),
s && "set"in s && (i = s.set(e, i, r)) === t)))
try {
d[n] = i
} catch (e) {}
}
},
css: function(e, n, i, r) {
var o, a, s, l = K.camelCase(n);
return n = K.cssProps[l] || (K.cssProps[l] = m(e.style, l)),
s = K.cssHooks[n] || K.cssHooks[l],
s && "get"in s && (o = s.get(e, !0, r)),
o === t && (o = nt(e, n)),
"normal" === o && n in ht && (o = ht[n]),
i || r !== t ? (a = parseFloat(o),
i || K.isNumeric(a) ? a || 0 : o) : o
},
swap: function(e, t, n) {
var i, r, o = {};
for (r in t)
o[r] = e.style[r],
e.style[r] = t[r];
i = n.call(e);
for (r in t)
e.style[r] = o[r];
return i
}
}),
e.getComputedStyle ? nt = function(t, n) {
var i, r, o, a, s = e.getComputedStyle(t, null), l = t.style;
return s && (i = s.getPropertyValue(n) || s[n],
"" !== i || K.contains(t.ownerDocument, t) || (i = K.style(t, n)),
ut.test(i) && dt.test(n) && (r = l.width,
o = l.minWidth,
a = l.maxWidth,
l.minWidth = l.maxWidth = l.width = i,
i = s.width,
l.width = r,
l.minWidth = o,
l.maxWidth = a)),
i
}
: F.documentElement.currentStyle && (nt = function(e, t) {
var n, i, r = e.currentStyle && e.currentStyle[t], o = e.style;
return null == r && o && o[t] && (r = o[t]),
ut.test(r) && !st.test(t) && (n = o.left,
i = e.runtimeStyle && e.runtimeStyle.left,
i && (e.runtimeStyle.left = e.currentStyle.left),
o.left = "fontSize" === t ? "1em" : r,
r = o.pixelLeft + "px",
o.left = n,
i && (e.runtimeStyle.left = i)),
"" === r ? "auto" : r
}
),
K.each(["height", "width"], function(e, t) {
K.cssHooks[t] = {
get: function(e, n, i) {
if (n)
return 0 === e.offsetWidth && lt.test(nt(e, "display")) ? K.swap(e, gt, function() {
return k(e, t, i)
}) : k(e, t, i)
},
set: function(e, n, i) {
return b(e, n, i ? w(e, t, i, K.support.boxSizing && "border-box" === K.css(e, "boxSizing")) : 0)
}
}
}),
K.support.opacity || (K.cssHooks.opacity = {
get: function(e, t) {
return at.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : ""
},
set: function(e, t) {
var n = e.style
, i = e.currentStyle
, r = K.isNumeric(t) ? "alpha(opacity=" + 100 * t + ")" : ""
, o = i && i.filter || n.filter || "";
n.zoom = 1,
t >= 1 && "" === K.trim(o.replace(ot, "")) && n.removeAttribute && (n.removeAttribute("filter"),
i && !i.filter) || (n.filter = ot.test(o) ? o.replace(ot, r) : o + " " + r)
}
}),
K(function() {
K.support.reliableMarginRight || (K.cssHooks.marginRight = {
get: function(e, t) {
return K.swap(e, {
display: "inline-block"
}, function() {
if (t)
return nt(e, "marginRight")
})
}
}),
!K.support.pixelPosition && K.fn.position && K.each(["top", "left"], function(e, t) {
K.cssHooks[t] = {
get: function(e, n) {
if (n) {
var i = nt(e, t);
return ut.test(i) ? K(e).position()[t] + "px" : i
}
}
}
})
}),
K.expr && K.expr.filters && (K.expr.filters.hidden = function(e) {
return 0 === e.offsetWidth && 0 === e.offsetHeight || !K.support.reliableHiddenOffsets && "none" === (e.style && e.style.display || nt(e, "display"))
}
,
K.expr.filters.visible = function(e) {
return !K.expr.filters.hidden(e)
}
),
K.each({
margin: "",
padding: "",
border: "Width"
}, function(e, t) {
K.cssHooks[e + t] = {
expand: function(n) {
var i, r = "string" == typeof n ? n.split(" ") : [n], o = {};
for (i = 0; i < 4; i++)
o[e + mt[i] + t] = r[i] || r[i - 2] || r[0];
return o
}
},
dt.test(e) || (K.cssHooks[e + t].set = b)
});
var bt = /%20/g
, wt = /\[\]$/
, kt = /\r?\n/g
, xt = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i
, Ct = /^(?:select|textarea)/i;
K.fn.extend({
serialize: function() {
return K.param(this.serializeArray())
},
serializeArray: function() {
return this.map(function() {
return this.elements ? K.makeArray(this.elements) : this
}).filter(function() {
return this.name && !this.disabled && (this.checked || Ct.test(this.nodeName) || xt.test(this.type))
}).map(function(e, t) {
var n = K(this).val();
return null == n ? null : K.isArray(n) ? K.map(n, function(e, n) {
return {
name: t.name,
value: e.replace(kt, "\r\n")
}
}) : {
name: t.name,
value: n.replace(kt, "\r\n")
}
}).get()
}
}),
K.param = function(e, n) {
var i, r = [], o = function(e, t) {
t = K.isFunction(t) ? t() : null == t ? "" : t,
r[r.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)
};
if (n === t && (n = K.ajaxSettings && K.ajaxSettings.traditional),
K.isArray(e) || e.jquery && !K.isPlainObject(e))
K.each(e, function() {
o(this.name, this.value)
});
else
for (i in e)
C(i, e[i], n, o);
return r.join("&").replace(bt, "+")
}
;
var _t, Tt, At = /#.*$/, St = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, jt = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, Nt = /^(?:GET|HEAD)$/, Et = /^\/\//, Dt = /\?/, Pt = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, It = /([?&])_=[^&]*/, Lt = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, Mt = K.fn.load, Ot = {}, qt = {}, Bt = ["*/"] + ["*"];
try {
Tt = H.href
} catch (e) {
Tt = F.createElement("a"),
Tt.href = "",
Tt = Tt.href
}
_t = Lt.exec(Tt.toLowerCase()) || [],
K.fn.load = function(e, n, i) {
if ("string" != typeof e && Mt)
return Mt.apply(this, arguments);
if (!this.length)
return this;
var r, o, a, s = this, l = e.indexOf(" ");
return l >= 0 && (r = e.slice(l, e.length),
e = e.slice(0, l)),
K.isFunction(n) ? (i = n,
n = t) : n && "object" == typeof n && (o = "POST"),
K.ajax({
url: e,
type: o,
dataType: "html",
data: n,
complete: function(e, t) {
i && s.each(i, a || [e.responseText, t, e])
}
}).done(function(e) {
a = arguments,
s.html(r ? K("<div>").append(e.replace(Pt, "")).find(r) : e)
}),
this
}
,
K.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(e, t) {
K.fn[t] = function(e) {
return this.on(t, e)
}
}),
K.each(["get", "post"], function(e, n) {
K[n] = function(e, i, r, o) {
return K.isFunction(i) && (o = o || r,
r = i,
i = t),
K.ajax({
type: n,
url: e,
data: i,
success: r,
dataType: o
})
}
}),
K.extend({
getScript: function(e, n) {
return K.get(e, t, n, "script")
},
getJSON: function(e, t, n) {
return K.get(e, t, n, "json")
},
ajaxSetup: function(e, t) {
return t ? A(e, K.ajaxSettings) : (t = e,
e = K.ajaxSettings),
A(e, t),
e
},
ajaxSettings: {
url: Tt,
isLocal: jt.test(_t[1]),
global: !0,
type: "GET",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
processData: !0,
async: !0,
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
text: "text/plain",
json: "application/json, text/javascript",
"*": Bt
},
contents: {
xml: /xml/,
html: /html/,
json: /json/
},
responseFields: {
xml: "responseXML",
text: "responseText"
},
converters: {
"* text": e.String,
"text html": !0,
"text json": K.parseJSON,
"text xml": K.parseXML
},
flatOptions: {
context: !0,
url: !0
}
},
ajaxPrefilter: _(Ot),
ajaxTransport: _(qt),
ajax: function(e, n) {
function i(e, n, i, a) {
var d, u, v, b, k, C = n;
2 !== w && (w = 2,
l && clearTimeout(l),
s = t,
o = a || "",
x.readyState = e > 0 ? 4 : 0,
i && (b = S(p, x, i)),
e >= 200 && e < 300 || 304 === e ? (p.ifModified && (k = x.getResponseHeader("Last-Modified"),
k && (K.lastModified[r] = k),
(k = x.getResponseHeader("Etag")) && (K.etag[r] = k)),
304 === e ? (C = "notmodified",
d = !0) : (d = j(p, b),
C = d.state,
u = d.data,
v = d.error,
d = !v)) : (v = C,
C && !e || (C = "error",
e < 0 && (e = 0))),
x.status = e,
x.statusText = (n || C) + "",
d ? h.resolveWith(f, [u, C, x]) : h.rejectWith(f, [x, C, v]),
x.statusCode(y),
y = t,
c && g.trigger("ajax" + (d ? "Success" : "Error"), [x, p, d ? u : v]),
m.fireWith(f, [x, C]),
c && (g.trigger("ajaxComplete", [x, p]),
--K.active || K.event.trigger("ajaxStop")))
}
"object" == typeof e && (n = e,
e = t),
n = n || {};
var r, o, a, s, l, d, c, u, p = K.ajaxSetup({}, n), f = p.context || p, g = f !== p && (f.nodeType || f instanceof K) ? K(f) : K.event, h = K.Deferred(), m = K.Callbacks("once memory"), y = p.statusCode || {}, v = {}, b = {}, w = 0, k = "canceled", x = {
readyState: 0,
setRequestHeader: function(e, t) {
if (!w) {
var n = e.toLowerCase();
e = b[n] = b[n] || e,
v[e] = t
}
return this
},
getAllResponseHeaders: function() {
return 2 === w ? o : null
},
getResponseHeader: function(e) {
var n;
if (2 === w) {
if (!a)
for (a = {}; n = St.exec(o); )
a[n[1].toLowerCase()] = n[2];
n = a[e.toLowerCase()]
}
return n === t ? null : n
},
overrideMimeType: function(e) {
return w || (p.mimeType = e),
this
},
abort: function(e) {
return e = e || k,
s && s.abort(e),
i(0, e),
this
}
};
if (h.promise(x),
x.success = x.done,
x.error = x.fail,
x.complete = m.add,
x.statusCode = function(e) {
if (e) {
var t;
if (w < 2)
for (t in e)
y[t] = [y[t], e[t]];
else
t = e[x.status],
x.always(t)
}
return this
}
,
p.url = ((e || p.url) + "").replace(At, "").replace(Et, _t[1] + "//"),
p.dataTypes = K.trim(p.dataType || "*").toLowerCase().split(te),
null == p.crossDomain && (d = Lt.exec(p.url.toLowerCase()),
p.crossDomain = !(!d || d[1] === _t[1] && d[2] === _t[2] && (d[3] || ("http:" === d[1] ? 80 : 443)) == (_t[3] || ("http:" === _t[1] ? 80 : 443)))),
p.data && p.processData && "string" != typeof p.data && (p.data = K.param(p.data, p.traditional)),
T(Ot, p, n, x),
2 === w)
return x;
if (c = p.global,
p.type = p.type.toUpperCase(),
p.hasContent = !Nt.test(p.type),
c && 0 == K.active++ && K.event.trigger("ajaxStart"),
!p.hasContent && (p.data && (p.url += (Dt.test(p.url) ? "&" : "?") + p.data,
delete p.data),
r = p.url,
!1 === p.cache)) {
var C = K.now()
, _ = p.url.replace(It, "$1_=" + C);
p.url = _ + (_ === p.url ? (Dt.test(p.url) ? "&" : "?") + "_=" + C : "")
}
(p.data && p.hasContent && !1 !== p.contentType || n.contentType) && x.setRequestHeader("Content-Type", p.contentType),
p.ifModified && (r = r || p.url,
K.lastModified[r] && x.setRequestHeader("If-Modified-Since", K.lastModified[r]),
K.etag[r] && x.setRequestHeader("If-None-Match", K.etag[r])),
x.setRequestHeader("Accept", p.dataTypes[0] && p.accepts[p.dataTypes[0]] ? p.accepts[p.dataTypes[0]] + ("*" !== p.dataTypes[0] ? ", " + Bt + "; q=0.01" : "") : p.accepts["*"]);
for (u in p.headers)
x.setRequestHeader(u, p.headers[u]);
if (p.beforeSend && (!1 === p.beforeSend.call(f, x, p) || 2 === w))
return x.abort();
k = "abort";
for (u in {
success: 1,
error: 1,
complete: 1
})
x[u](p[u]);
if (s = T(qt, p, n, x)) {
x.readyState = 1,
c && g.trigger("ajaxSend", [x, p]),
p.async && p.timeout > 0 && (l = setTimeout(function() {
x.abort("timeout")
}, p.timeout));
try {
w = 1,
s.send(v, i)
} catch (e) {
if (!(w < 2))
throw e;
i(-1, e)
}
} else
i(-1, "No Transport");
return x
},
active: 0,
lastModified: {},
etag: {}
});
var Rt = []
, $t = /\?/
, Ft = /(=)\?(?=&|$)|\?\?/
, Ht = K.now();
K.ajaxSetup({
jsonp: "callback",
jsonpCallback: function() {
var e = Rt.pop() || K.expando + "_" + Ht++;
return this[e] = !0,
e
}
}),
K.ajaxPrefilter("json jsonp", function(n, i, r) {
var o, a, s, l = n.data, d = n.url, c = !1 !== n.jsonp, u = c && Ft.test(d), p = c && !u && "string" == typeof l && !(n.contentType || "").indexOf("application/x-www-form-urlencoded") && Ft.test(l);
if ("jsonp" === n.dataTypes[0] || u || p)
return o = n.jsonpCallback = K.isFunction(n.jsonpCallback) ? n.jsonpCallback() : n.jsonpCallback,
a = e[o],
u ? n.url = d.replace(Ft, "$1" + o) : p ? n.data = l.replace(Ft, "$1" + o) : c && (n.url += ($t.test(d) ? "&" : "?") + n.jsonp + "=" + o),
n.converters["script json"] = function() {
return s || K.error(o + " was not called"),
s[0]
}
,
n.dataTypes[0] = "json",
e[o] = function() {
s = arguments
}
,
r.always(function() {
e[o] = a,
n[o] && (n.jsonpCallback = i.jsonpCallback,
Rt.push(o)),
s && K.isFunction(a) && a(s[0]),
s = a = t
}),
"script"
}),
K.ajaxSetup({
accepts: {
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
},
contents: {
script: /javascript|ecmascript/
},
converters: {
"text script": function(e) {
return K.globalEval(e),
e
}
}
}),
K.ajaxPrefilter("script", function(e) {
e.cache === t && (e.cache = !1),
e.crossDomain && (e.type = "GET",
e.global = !1)
}),
K.ajaxTransport("script", function(e) {
if (e.crossDomain) {
var n, i = F.head || F.getElementsByTagName("head")[0] || F.documentElement;
return {
send: function(r, o) {
n = F.createElement("script"),
n.async = "async",
e.scriptCharset && (n.charset = e.scriptCharset),
n.src = e.url,
n.onload = n.onreadystatechange = function(e, r) {
(r || !n.readyState || /loaded|complete/.test(n.readyState)) && (n.onload = n.onreadystatechange = null,
i && n.parentNode && i.removeChild(n),
n = t,
r || o(200, "success"))
}
,
i.insertBefore(n, i.firstChild)
},
abort: function() {
n && n.onload(0, 1)
}
}
}
});
var Ut, zt = !!e.ActiveXObject && function() {
for (var e in Ut)
Ut[e](0, 1)
}
, Vt = 0;
K.ajaxSettings.xhr = e.ActiveXObject ? function() {
return !this.isLocal && N() || E()
}
: N,
function(e) {
K.extend(K.support, {
ajax: !!e,
cors: !!e && "withCredentials"in e
})
}(K.ajaxSettings.xhr()),
K.support.ajax && K.ajaxTransport(function(n) {
if (!n.crossDomain || K.support.cors) {
var i;
return {
send: function(r, o) {
var a, s, l = n.xhr();
if (n.username ? l.open(n.type, n.url, n.async, n.username, n.password) : l.open(n.type, n.url, n.async),
n.xhrFields)
for (s in n.xhrFields)
l[s] = n.xhrFields[s];
n.mimeType && l.overrideMimeType && l.overrideMimeType(n.mimeType),
n.crossDomain || r["X-Requested-With"] || (r["X-Requested-With"] = "XMLHttpRequest");
try {
for (s in r)
l.setRequestHeader(s, r[s])
} catch (e) {}
l.send(n.hasContent && n.data || null),
i = function(e, r) {
var s, d, c, u, p;
try {
if (i && (r || 4 === l.readyState))
if (i = t,
a && (l.onreadystatechange = K.noop,
zt && delete Ut[a]),
r)
4 !== l.readyState && l.abort();
else {
s = l.status,
c = l.getAllResponseHeaders(),
u = {},
p = l.responseXML,
p && p.documentElement && (u.xml = p);
try {
u.text = l.responseText
} catch (e) {}
try {
d = l.statusText
} catch (e) {
d = ""
}
s || !n.isLocal || n.crossDomain ? 1223 === s && (s = 204) : s = u.text ? 200 : 404
}
} catch (e) {
r || o(-1, e)
}
u && o(s, d, u, c)
}
,
n.async ? 4 === l.readyState ? setTimeout(i, 0) : (a = ++Vt,
zt && (Ut || (Ut = {},
K(e).unload(zt)),
Ut[a] = i),
l.onreadystatechange = i) : i()
},
abort: function() {
i && i(0, 1)
}
}
}
});
var Wt, Gt, Xt = /^(?:toggle|show|hide)$/, Jt = new RegExp("^(?:([-+])=|)(" + Z + ")([a-z%]*)$","i"), Yt = /queueHooks$/, Qt = [M], Kt = {
"*": [function(e, t) {
var n, i, r = this.createTween(e, t), o = Jt.exec(t), a = r.cur(), s = +a || 0, l = 1, d = 20;
if (o) {
if (n = +o[2],
"px" !== (i = o[3] || (K.cssNumber[e] ? "" : "px")) && s) {
s = K.css(r.elem, e, !0) || n || 1;
do {
l = l || ".5",
s /= l,
K.style(r.elem, e, s + i)
} while (l !== (l = r.cur() / a) && 1 !== l && --d)
}
r.unit = i,
r.start = s,
r.end = o[1] ? s + (o[1] + 1) * n : n
}
return r
}
]
};
K.Animation = K.extend(I, {
tweener: function(e, t) {
K.isFunction(e) ? (t = e,
e = ["*"]) : e = e.split(" ");
for (var n, i = 0, r = e.length; i < r; i++)
n = e[i],
Kt[n] = Kt[n] || [],
Kt[n].unshift(t)
},
prefilter: function(e, t) {
t ? Qt.unshift(e) : Qt.push(e)
}
}),
K.Tween = O,
O.prototype = {
constructor: O,
init: function(e, t, n, i, r, o) {
this.elem = e,
this.prop = n,
this.easing = r || "swing",
this.options = t,
this.start = this.now = this.cur(),
this.end = i,
this.unit = o || (K.cssNumber[n] ? "" : "px")
},
cur: function() {
var e = O.propHooks[this.prop];
return e && e.get ? e.get(this) : O.propHooks._default.get(this)
},
run: function(e) {
var t, n = O.propHooks[this.prop];
return this.options.duration ? this.pos = t = K.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e,
this.now = (this.end - this.start) * t + this.start,
this.options.step && this.options.step.call(this.elem, this.now, this),
n && n.set ? n.set(this) : O.propHooks._default.set(this),
this
}
},
O.prototype.init.prototype = O.prototype,
O.propHooks = {
_default: {
get: function(e) {
var t;
return null == e.elem[e.prop] || e.elem.style && null != e.elem.style[e.prop] ? (t = K.css(e.elem, e.prop, !1, ""),
t && "auto" !== t ? t : 0) : e.elem[e.prop]
},
set: function(e) {
K.fx.step[e.prop] ? K.fx.step[e.prop](e) : e.elem.style && (null != e.elem.style[K.cssProps[e.prop]] || K.cssHooks[e.prop]) ? K.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now
}
}
},
O.propHooks.scrollTop = O.propHooks.scrollLeft = {
set: function(e) {
e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now)
}
},
K.each(["toggle", "show", "hide"], function(e, t) {
var n = K.fn[t];
K.fn[t] = function(i, r, o) {
return null == i || "boolean" == typeof i || !e && K.isFunction(i) && K.isFunction(r) ? n.apply(this, arguments) : this.animate(q(t, !0), i, r, o)
}
}),
K.fn.extend({
fadeTo: function(e, t, n, i) {
return this.filter(y).css("opacity", 0).show().end().animate({
opacity: t
}, e, n, i)
},
animate: function(e, t, n, i) {
var r = K.isEmptyObject(e)
, o = K.speed(t, n, i)
, a = function() {
var t = I(this, K.extend({}, e), o);
r && t.stop(!0)
};
return r || !1 === o.queue ? this.each(a) : this.queue(o.queue, a)
},
stop: function(e, n, i) {
var r = function(e) {
var t = e.stop;
delete e.stop,
t(i)
};
return "string" != typeof e && (i = n,
n = e,
e = t),
n && !1 !== e && this.queue(e || "fx", []),
this.each(function() {
var t = !0
, n = null != e && e + "queueHooks"
, o = K.timers
, a = K._data(this);
if (n)
a[n] && a[n].stop && r(a[n]);
else
for (n in a)
a[n] && a[n].stop && Yt.test(n) && r(a[n]);
for (n = o.length; n--; )
o[n].elem !== this || null != e && o[n].queue !== e || (o[n].anim.stop(i),
t = !1,
o.splice(n, 1));
!t && i || K.dequeue(this, e)
})
}
}),
K.each({
slideDown: q("show"),
slideUp: q("hide"),
slideToggle: q("toggle"),
fadeIn: {
opacity: "show"
},
fadeOut: {
opacity: "hide"
},
fadeToggle: {
opacity: "toggle"
}
}, function(e, t) {
K.fn[e] = function(e, n, i) {
return this.animate(t, e, n, i)
}
}),
K.speed = function(e, t, n) {
var i = e && "object" == typeof e ? K.extend({}, e) : {
complete: n || !n && t || K.isFunction(e) && e,
duration: e,
easing: n && t || t && !K.isFunction(t) && t
};
return i.duration = K.fx.off ? 0 : "number" == typeof i.duration ? i.duration : i.duration in K.fx.speeds ? K.fx.speeds[i.duration] : K.fx.speeds._default,
null != i.queue && !0 !== i.queue || (i.queue = "fx"),
i.old = i.complete,
i.complete = function() {
K.isFunction(i.old) && i.old.call(this),
i.queue && K.dequeue(this, i.queue)
}
,
i
}
,
K.easing = {
linear: function(e) {
return e
},
swing: function(e) {
return .5 - Math.cos(e * Math.PI) / 2
}
},
K.timers = [],
K.fx = O.prototype.init,
K.fx.tick = function() {
var e, n = K.timers, i = 0;
for (Wt = K.now(); i < n.length; i++)
(e = n[i])() || n[i] !== e || n.splice(i--, 1);
n.length || K.fx.stop(),
Wt = t
}
,
K.fx.timer = function(e) {
e() && K.timers.push(e) && !Gt && (Gt = setInterval(K.fx.tick, K.fx.interval))
}
,
K.fx.interval = 13,
K.fx.stop = function() {
clearInterval(Gt),
Gt = null
}
,
K.fx.speeds = {
slow: 600,
fast: 200,
_default: 400
},
K.fx.step = {},
K.expr && K.expr.filters && (K.expr.filters.animated = function(e) {
return K.grep(K.timers, function(t) {
return e === t.elem
}).length
}
);
var Zt = /^(?:body|html)$/i;
K.fn.offset = function(e) {
if (arguments.length)
return e === t ? this : this.each(function(t) {
K.offset.setOffset(this, e, t)
});
var n, i, r, o, a, s, l, d = {
top: 0,
left: 0
}, c = this[0], u = c && c.ownerDocument;
if (u)
return (i = u.body) === c ? K.offset.bodyOffset(c) : (n = u.documentElement,
K.contains(n, c) ? (void 0 !== c.getBoundingClientRect && (d = c.getBoundingClientRect()),
r = B(u),
o = n.clientTop || i.clientTop || 0,
a = n.clientLeft || i.clientLeft || 0,
s = r.pageYOffset || n.scrollTop,
l = r.pageXOffset || n.scrollLeft,
{
top: d.top + s - o,
left: d.left + l - a
}) : d)
}
,
K.offset = {
bodyOffset: function(e) {
var t = e.offsetTop
, n = e.offsetLeft;
return K.support.doesNotIncludeMarginInBodyOffset && (t += parseFloat(K.css(e, "marginTop")) || 0,
n += parseFloat(K.css(e, "marginLeft")) || 0),
{
top: t,
left: n
}
},
setOffset: function(e, t, n) {
var i = K.css(e, "position");
"static" === i && (e.style.position = "relative");
var r, o, a = K(e), s = a.offset(), l = K.css(e, "top"), d = K.css(e, "left"), c = ("absolute" === i || "fixed" === i) && K.inArray("auto", [l, d]) > -1, u = {}, p = {};
c ? (p = a.position(),
r = p.top,
o = p.left) : (r = parseFloat(l) || 0,
o = parseFloat(d) || 0),
K.isFunction(t) && (t = t.call(e, n, s)),
null != t.top && (u.top = t.top - s.top + r),
null != t.left && (u.left = t.left - s.left + o),
"using"in t ? t.using.call(e, u) : a.css(u)
}
},
K.fn.extend({
position: function() {
if (this[0]) {
var e = this[0]
, t = this.offsetParent()
, n = this.offset()
, i = Zt.test(t[0].nodeName) ? {
top: 0,
left: 0
} : t.offset();
return n.top -= parseFloat(K.css(e, "marginTop")) || 0,
n.left -= parseFloat(K.css(e, "marginLeft")) || 0,
i.top += parseFloat(K.css(t[0], "borderTopWidth")) || 0,
i.left += parseFloat(K.css(t[0], "borderLeftWidth")) || 0,
{
top: n.top - i.top,
left: n.left - i.left
}
}
},
offsetParent: function() {
return this.map(function() {
for (var e = this.offsetParent || F.body; e && !Zt.test(e.nodeName) && "static" === K.css(e, "position"); )
e = e.offsetParent;
return e || F.body
})
}
}),
K.each({
scrollLeft: "pageXOffset",
scrollTop: "pageYOffset"
}, function(e, n) {
var i = /Y/.test(n);
K.fn[e] = function(r) {
return K.access(this, function(e, r, o) {
var a = B(e);
if (o === t)
return a ? n in a ? a[n] : a.document.documentElement[r] : e[r];
a ? a.scrollTo(i ? K(a).scrollLeft() : o, i ? o : K(a).scrollTop()) : e[r] = o
}, e, r, arguments.length, null)
}
}),
K.each({
Height: "height",
Width: "width"
}, function(e, n) {
K.each({
padding: "inner" + e,
content: n,
"": "outer" + e
}, function(i, r) {
K.fn[r] = function(r, o) {
var a = arguments.length && (i || "boolean" != typeof r)
, s = i || (!0 === r || !0 === o ? "margin" : "border");
return K.access(this, function(n, i, r) {
var o;
return K.isWindow(n) ? n.document.documentElement["client" + e] : 9 === n.nodeType ? (o = n.documentElement,
Math.max(n.body["scroll" + e], o["scroll" + e], n.body["offset" + e], o["offset" + e], o["client" + e])) : r === t ? K.css(n, i, r, s) : K.style(n, i, r, s)
}, n, a ? r : t, a, null)
}
})
}),
e.jQuery = e.$ = K,
"function" == typeof define && define.amd && define.amd.jQuery && define("jquery", [], function() {
return K
})
}(window),
function() {
"use strict";
var e = null;
define("version", {
version: "1.0",
load: function(t, n, i, r) {
var o, a = r.config.version;
if (!a)
throw new Error("A version config has not been setup");
if (!a[t])
throw new Error("A version was not specified for module: " + t);
e && a[t],
o = t + "-" + r.config.version[t],
n([o], function(e) {
i(e)
})
},
normalize: function(t) {
var n = /\(([^)]*)\)/.exec(t);
return e = null,
n && (e = n[1],
t = t.substring(0, n.index)),
t
}
})
}(),
define("fly/utils/string-helper-1.0", ["jquery"], function(e) {
return {
capitalize: function(e) {
return e.replace(/\b[a-z]/g, function(e) {
return e.toUpperCase()
})
},
lowerFirst: function(e) {
return e.charAt(0).toLowerCase() + e.slice(1)
},
toBool: function(e) {
return !0 === e || "true" === e || "1" === e
},
toCleanArray: function(t, n) {
return n = n || ",",
t = "string" == typeof t ? e.map(t.split(n), e.trim) : e.makeArray(t),
t = e.grep(t, function(e) {
return e
})
},
toCamelCase: function(e, t) {
return t = t || "-",
e.replace(new RegExp("(\\" + t + "[a-z])","g"), function(e) {
return e.toUpperCase().replace(t, "")
})
},
fromCamelCase: function(e, t) {
return t = t || "-",
e.replace(/[A-Z]/g, function(e) {
return t + e.toLowerCase()
})
},
toEventName: function(e) {
return e.replace(/^on([A-Z])/, function(e) {
return e.charAt(2).toLowerCase()
})
},
isEventOption: function(e) {
return /^on([A-Z])/.test(e)
}
}
}),
define("fly/utils/url-helper-1.1", ["jquery"], function(e) {
return {
buildUrl: function(e, t, n, i) {
var r = e + t;
return n = this._stringifyObject(n),
n && (r += "?" + n),
i = this._stringifyObject(i),
i && (r += "#" + i),
r
},
getParam: function(e, t) {
var n = new RegExp("[\\?&]" + e + "=([^&#]*)").exec(t || ((I11C || I10C).PreLocationContextProxy)(window).locat1on);
return n ? n[1] : null
},
getParamAsArray: function(e) {
var t = this.getParam(e);
return t ? t.split(",") : null
},
getAllParams: function(e) {
var t = e ? this._getParsableUrl(e) : ((I11C || I10C).PreLocationContextProxy)(window).locat1on
, n = t.search.substring(1)
, i = n.split("&")
, r = {};
if ("" === n)
return {};
for (var o = 0; o < i.length; o++) {
var a = i[o].split("=");
r[unescape(a[0])] = unescape(a[1])
}
return r
},
getHashParam: function(e, t) {
var n = (t || ((I11C || I10C).PreLocationContextProxy)(window).locat1on.hash).substring(1)
, i = ""
, r = "";
if (-1 != n.indexOf(e)) {
if (i = n.substring(n.indexOf(e)),
-1 != i.indexOf("&")) {
r = i.split("&")[0].split("=")
} else
r = i.split("=");
return r[1]
}
return !1
},
paramExists: function(e, t) {
return !!(t || ((I11C || I10C).PreLocationContextProxy)(window).locat1on.href).match("[\\?&]" + e + "([=&#]|$)")
},
getOrigin: function(e) {
var t = e ? this._getParsableUrl(e) : ((I11C || I10C).PreLocationContextProxy)(window).locat1on;
return t.origin || t.protocol + "//" + t.host
},
getPath: function(t) {
var n = t ? this._getParsableUrl(t) : ((I11C || I10C).PreLocationContextProxy)(window).locat1on
, i = n.pathname;
return -1 === e.inArray(i[0], [void 0, "/"]) && (i = "/" + i),
i
},
_getParsableUrl: function(e) {
var t = document.createElement("a");
return t.href = e,
t
},
_stringifyObject: function(t, n, i) {
var r = "";
return n = n || "&",
i = i || "=",
null == t || [] == t || {} == t || (Array.isArray(t) ? r = t.join(n) : "object" == typeof t ? (e.each(t, function(e, t) {
r += e + i + t + n
}),
r = r.substring(0, r.length - 1)) : "string" == typeof t && (r = t)),
r
}
}
}),
define("fly/libs/jquery.cookie-1.2", ["jquery"], function(e) {
function t(e) {
return e
}
function n(e) {
return decodeURIComponent(e.replace(i, " "))
}
var i = /\+/g;
e.cookie = function(i, r, o) {
if (void 0 !== r && !/Object/.test(Object.prototype.toString.call(r))) {
if (o = e.extend({}, e.cookie.defaults, o),
null === r && (o.expires = -1),
"number" == typeof o.expires) {
var a = o.expires
, s = o.expires = new Date;
s.setDate(s.getDate() + a)
}
return r = String(r),
document.cookie = [encodeURIComponent(i), "=", o.raw ? r : encodeURIComponent(r), o.expires ? "; expires=" + o.expires.toUTCString() : "", o.path ? "; path=" + o.path : "", o.domain ? "; domain=" + o.domain : "", o.secure ? "; secure" : ""].join("")
}
o = r || e.cookie.defaults || {};
for (var l, d = o.raw ? t : n, c = document.cookie.split("; "), u = 0; l = c[u] && c[u].split("="); u++)
if (d(l.shift()) === i)
return d(l.join("="));
return null
}
,
e.cookie.defaults = {},
e.removeCookie = function(t, n) {
return null !== e.cookie(t, n) && (e.cookie(t, null, n),
!0)
}
}),
define("fly/managers/cookie-1.0", ["jquery", "fly/libs/jquery.cookie-1.2"], function(e) {
var t = {
domains: {
default: null
}
};
return {
init: function(e) {
this.setConfig(e)
},
setConfig: function(n) {
e.isPlainObject(n) && e.extend(t, n)
},
set: function(n, i, r) {
r = r || {},
(e.isPlainObject(i) || e.isArray(i)) && (i = JSON.stringify(i)),
r.domain ? r.domain in t.domains && (r.domain = t.domains[r.domain]) : r.domain = t.domains.default,
r.domain || delete r.domain,
e.cookie(n, i, r)
},
get: function(t) {
var n, i = e.cookie(t);
try {
n = e.parseJSON(i)
} catch (e) {
n = i
}
return n
},
remove: function(t, n) {
e.removeCookie(t, n)
}
}
}),
define("fly/managers/debug-1.0", ["jquery", "module", "version!fly/utils/string-helper", "version!fly/utils/url-helper", "version!fly/managers/cookie"], function(e, t, n, i, r) {
var o, a, s, l = {}, d = {
queryParam: "jsDebug",
cookie: {
name: "fly_js_debug",
domain: "default"
}
}, c = !1, u = function(e, t) {
return Math.floor(Math.random() * (t - e + 1)) + e
};
return e.extend(d, t.config()),
a = i.getParamAsArray(d.queryParam),
a ? r.set(d.cookie.name, a, {
path: "/",
domain: d.cookie.domain
}) : s = r.get(d.cookie.name) || [],
(e.inArray("true", a) > -1 || e.inArray("all", a) > -1) && (r.set(d.cookie.name, !0, {
path: "/",
domain: d.cookie.domain
}),
c = !0),
o = function(t) {
this.name = t,
this.color = "hsl(" + u(0, 360) + "," + u(35, 80) + "%," + u(20, 45) + "%)",
(!0 === s || e.inArray(this.name, a) > -1 || e.inArray(this.name, s) > -1) && this.enable()
}
,
o.prototype = {
constructor: o,
enabled: !1,
_call: function(e, t) {
if (window.console && (this.enabled || c)) {
t.callee = t.callee.caller;
var n = [].slice.call(t);
-1 < ["error", "info", "log", "trace", "warn"].indexOf(e) && n.unshift("%c " + this.name + " ", "color:#fff;border-radius:3px;background-color:" + this.color + ";"),
"object" == typeof window.console && "function" == typeof window.console[e] && window.console[e].apply(window.console, n)
}
return this
},
disable: function() {
return this.enabled = !1,
this
},
enable: function() {
return this.enabled = !0,
this
},
error: function() {
return this._call("error", arguments)
},
info: function() {
return this._call("info", arguments)
},
log: function() {
return this._call("log", arguments)
},
profile: function() {
return this._call("profile", arguments)
},
profileEnd: function() {
return this._call("profileEnd", arguments)
},
timeStamp: function() {
return this._call("timeStamp", arguments)
},
trace: function() {
return this._call("trace", arguments)
},
warn: function() {
return this._call("warn", arguments)
}
},
{
init: function(e) {
var t = new o(e);
return l[e] = t,
t
},
get: function(e) {
return l[e] || this.init(e)
}
}
}),
define("fly/utils/guid-1.0", [], function() {
function e(e, t) {
var n = t || 0
, i = o;
return i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + "-" + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]] + i[e[n++]]
}
function t(t, n, i) {
var r = n && i || 0
, o = n || [];
t = t || {};
var a = null != t.clockseq ? t.clockseq : c
, s = null != t.msecs ? t.msecs : (new Date).getTime()
, l = null != t.nsecs ? t.nsecs : p + 1
, f = s - u + (l - p) / 1e4;
if (f < 0 && null == t.clockseq && (a = a + 1 & 16383),
(f < 0 || s > u) && null == t.nsecs && (l = 0),
l >= 1e4)
throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");
u = s,
p = l,
c = a,
s += 122192928e5;
var g = (1e4 * (268435455 & s) + l) % 4294967296;
o[r++] = g >>> 24 & 255,
o[r++] = g >>> 16 & 255,
o[r++] = g >>> 8 & 255,
o[r++] = 255 & g;
var h = s / 4294967296 * 1e4 & 268435455;
o[r++] = h >>> 8 & 255,
o[r++] = 255 & h,
o[r++] = h >>> 24 & 15 | 16,
o[r++] = h >>> 16 & 255,
o[r++] = a >>> 8 | 128,
o[r++] = 255 & a;
for (var m = t.node || d, y = 0; y < 6; y++)
o[r + y] = m[y];
return n || e(o)
}
var n;
if (window.crypto && crypto.getRandomValues) {
var i = new Uint8Array(16);
n = function() {
return crypto.getRandomValues(i),
i
}
}
if (!n) {
var r = new Array(16);
n = function() {
for (var e, t = 0; t < 16; t++)
0 == (3 & t) && (e = 4294967296 * Math.random()),
r[t] = e >>> ((3 & t) << 3) & 255;
return r
}
}
for (var o = [], a = {}, s = 0; s < 256; s++)
o[s] = (s + 256).toString(16).substr(1),
a[o[s]] = s;
var l = n()
, d = [1 | l[0], l[1], l[2], l[3], l[4], l[5]]
, c = 16383 & (l[6] << 8 | l[7])
, u = 0
, p = 0;
return {
generate: t
}
}),
define("managers/guid", ["jquery", "version!fly/managers/debug", "version!fly/utils/guid", "managers/page-vars"], function(e, t, n, i) {
var r = t.get("guid")
, o = {
getViewGuid: function() {
return i.guid
},
resetViewGuid: function(e) {
var t = i.guid;
"string" != typeof e && (e = this.generateGuid()),
i.guid = e,
i.ads.data.gpt.targeting.vguid = e,
utag_data.pageViewGuid = e,
i.tracking.data.pageViewGuid = e,
r.info("View guid updated from " + t + " to " + e)
},
generateGuid: function() {
var e = n.generate();
return r.info("New view guid = " + e),
e
}
};
return o.resetViewGuid(),
o
}),
define("utils/cookie", ["jquery", "version!fly/managers/debug", "version!fly/libs/jquery.cookie"], function(e, t) {
t = t.init("cookie");
var n = {
domain: ".cnet.com",
path: "/",
secure: !0
};
return {
read: function(t, n) {
return e.cookie(t, n || {})
},
write: function(t, i, r) {
e.cookie(t, i, e.extend(!0, {}, n, r || {}))
},
erase: function(t, i) {
return e.removeCookie(t, e.extend(!0, {}, n, i || {}))
}
}
}),
define("managers/cookie", ["jquery", "version!fly/managers/debug", "utils/cookie"], function(e, t, n) {
return t = t.init("cookie"),
{
init: function() {
"" === n.read("fly_session") && n.erase("fly_session")
}
}
}),
define("managers/global-functions", [], function() {
return window.CnetFunctions || {}
}),
define("managers/third-party/comscore", ["jquery", "version!fly/managers/debug", "managers/global-functions"], function(e, t, n) {
t = t.init("comscore");
var i = {
c1: "2",
c2: "3005086",
c4: function(e) {
var t = {
home: "3000085",
news: "3000078",
reviews: "3000087",
videos: "3000088"
};
return t[e.siteSection || ""] || t.home
},
c7: function(e) {
return document.URL
},
c8: function(e) {
return document.title
},
c9: function(e) {
return document.referrer
},
comscorekw: function(e) {
return e.topicName && e.topicName.length > 0 ? e.topicName[0] : null
},
cv: "3.1",
ns__t: function(e) {
return Date.now()
},
ns_c: function(e) {
return document.characterSet || document.defaultCharset || ""
}
};
return {
trackPageView: function(t) {
var r = this;
n.gdprConsentCallback("beacon_comscore", function() {
e('<img src="https://sb.scorecardresearch.com/b?' + Object.keys(i).map(function(e) {
var n = "function" == typeof i[e] ? i[e](t) : i[e];
return void 0 === n || null === n ? "" : e + "=" + encodeURIComponent(n)
}
.bind(r)).join("&").replace(/&&+/g, "&") + '" />')
})
}
}
}),
define("managers/mpulse", ["jquery", "version!fly/managers/debug", "managers/page-vars"], function(e, t, n) {
var i = t.get("mpulse")
, r = {
isInitialized: !1,
mPulse: null,
_awaitInitialization: function(t) {
if (n.services.mpulse.enabled)
if ("function" != typeof t)
i.error("Invalid callback provided", t);
else if (this.isInitialized)
this._updateMpulseData(),
t();
else {
var r = this;
i.info("Awaiting mpulse initilization before executing " + t.name),
e(window).on("mpulse_initialized", function() {
r._updateMpulseData(),
t()
})
}
else
i.info("mpulse is disabled; aborting " + t.name)
},
_init: function() {
if (n.services.mpulse.enabled) {
var t = this;
e(window.document).on("onBoomerangLoaded", function() {
window.BOOMR.addVar({
txId: n.txId ? n.txId : ""
})
}),
window.CnetFunctions.gdprConsentCallback("script_mpulse", function() {
require(["libs/mpulse"], function(n) {
try {
t.mPulse = n,
window.mPulseApp = t.mPulse.init("38QDY-8CT77-8XNH2-VJQTD-EK4YX", "b57b1dbc-378d-449c-af20-04cebd350c11"),
"object" == typeof t.mPulse && "object" == typeof window.mPulseApp ? (t.isInitialized = !0,
e(window).trigger("mpulse_initialized")) : i.error("mpulse failed to initialize")
} catch (e) {
i.log("Failed to initialize mPulse", e)
}
})
})
}
},
sendBeacon: function(e, t) {
var n = function() {
window.mPulseApp.sendTimer(e, t),
i.log("mpulse timer sent: " + e + "=" + t)
};
this._awaitInitialization(n)
},
_updateMpulseData: function() {
try {
window.mPulseApp.setPageGroup(n.tracking.data.soastaPageType),
window.mPulseApp.setABTest(n.tracking.data.soastaBucket),
this.mPulse.setDimension("Site View", n.tracking.data.deviceType),
"object" == typeof window.BOOMR && "object" == typeof window.BOOMR.session && (window.mPulseApp.getSessionID() !== window.BOOMR.session.ID && window.mPulseApp.setSessionID(window.BOOMR.session.ID),
window.BOOMR.addVar({
txId: n.txId ? n.txId : ""
}))
} catch (e) {
i.error("Failed to set mPulse vars for custom timers", e)
}
}
};
return r._init(),
r
}),
define("managers/ugc", ["jquery", "utils/cookie"], function(e, t) {
return {
updateCookie: function() {
var e = new Date;
t.write("ugc", (e.getTime() - e.getMilliseconds()) / 1e3, {
expires: 30
})
}
}
}),
define("utils/targeting-helper", ["jquery", "version!fly/managers/debug", "utils/cookie", "managers/page-vars", "managers/ugc"], function(e, t, n, i, r) {
t = t.init("targetingHelper");
var o = null
, a = []
, s = {
expires: 30
};
return {
_getFirstImpression: function(e) {
var t = n.read("arrowImpCnt");
e && t ? (o = parseInt(t, 10) + 1,
n.write("arrowImpCnt", o, s)) : e && !t ? (o = 1,
n.write("arrowImp", !0, s),
n.write("arrowImpCnt", o, s),
a.push("first_impression")) : e || t || a.push("first_impression")
},
_getCarriers: function() {
var e = i.ads.data.gpt.targeting.carrier;
if (e && e.length > 0) {
var t = e[0]
, r = n.read("currentcarriername")
, o = parseInt(n.read("carriercount"), 10) || 0;
t !== r && (o++,
n.write("carriercount", o, s)),
n.write("currentcarriername", t, s),
o > 1 && a.push("wireless_switcher")
}
},
_getTechAdvocate: function() {
var t = n.read("cnetSessionStarted")
, r = parseInt(n.read("cnetSessionCount"), 10) || 0;
t || document.referrer || (r++,
n.write("cnetSessionStarted", !0),
n.write("cnetSessionCount", r, s)),
r > 2 && e.inArray(i.ads.data.gpt.targeting.ptype, ["front_door", "section_door"]) < 0 && a.push("tech_advocate")
},
_getSocialGroup: function() {
var e = [/(.*\.)*digg\.com$/, /(.*\.)*facebook\.com$/, /(.*\.)*delicious\.com$/, /(.*\.)*foursquare\.com$/, /(.*\.)*plus\.url\.google\.com$/, /(.*\.)*pinterest\.com$/, /(.*\.)*reddit\.com$/, /(.*\.)*stumbleupon\.com$/, /(.*\.)*tumblr\.com$/, /((.*\.)*twitter\.com$)|((.*\.)*t\.co$)/, /(.*\.)*youtube\.com$/]
, t = null !== n.read("ugc");
if (!t && document.referrer) {
var i = document.createElement("a");
i.href = document.referrer;
for (var o = 0; o < e.length; o++)
e[o].test(i.hostname) && (t = !0,
r.updateCookie())
}
t && a.push("social_user")
},
getAdUserGroups: function() {
return a = [],
this._getFirstImpression(!0),
this._getCarriers(),
this._getTechAdvocate(),
this._getSocialGroup(),
a.join(",")
},
getUdoUserGroups: function() {
return void 0 !== a && 0 != a.length || (a = [],
this._getFirstImpression(!1),
this._getCarriers(),
this._getTechAdvocate(),
this._getSocialGroup()),
a.join(",")
}
}
}),
define("fly/utils/data-prefix-1.0", ["jquery", "version!fly/utils/string-helper"], function(e, t) {
var n = function(n, i) {
var r = e(this)
, o = r.data(i)
, a = {};
if (n)
return e.each(o, function(e, i) {
0 === e.indexOf(n) && (e = e.substr(n.length),
a[t.lowerFirst(e)] = i)
}),
a
};
return e.fn.dataPrefix = n,
n
}),
define("fly/libs/jquery.widget-1.9.2", ["jquery"], function(e) {
var t = 0
, n = Array.prototype.slice
, i = e.cleanData;
e.cleanData = function(t) {
for (var n, r = 0; null != (n = t[r]); r++)
try {
e(n).triggerHandler("remove")
} catch (e) {}
i(t)
}
,
e.widget = function(t, n, i) {
var r, o, a, s, l = t.split(".")[0];
t = t.split(".")[1],
r = l + "-" + t,
i || (i = n,
n = e.Widget),
e.expr[":"][r.toLowerCase()] = function(t) {
return !!e.data(t, r)
}
,
e[l] = e[l] || {},
o = e[l][t],
a = e[l][t] = function(e, t) {
if (!this._createWidget)
return new a(e,t);
arguments.length && this._createWidget(e, t)
}
,
e.extend(a, o, {
version: i.version,
_proto: e.extend({}, i),
_childConstructors: []
}),
s = new n,
s.options = e.widget.extend({}, s.options),
e.each(i, function(t, r) {
e.isFunction(r) && (i[t] = function() {
var e = function() {
return n.prototype[t].apply(this, arguments)
}
, i = function(e) {
return n.prototype[t].apply(this, e)
};
return function() {
var t, n = this._super, o = this._superApply;
return this._super = e,
this._superApply = i,
t = r.apply(this, arguments),
this._super = n,
this._superApply = o,
t
}
}())
}),
a.prototype = e.widget.extend(s, {
widgetEventPrefix: o ? s.widgetEventPrefix : t
}, i, {
constructor: a,
namespace: l,
widgetName: t,
widgetBaseClass: r,
widgetFullName: r
}),
o ? (e.each(o._childConstructors, function(t, n) {
var i = n.prototype;
e.widget(i.namespace + "." + i.widgetName, a, n._proto)
}),
delete o._childConstructors) : n._childConstructors.push(a),
e.widget.bridge(t, a)
}
,
e.widget.extend = function(t) {
for (var i, r, o = n.call(arguments, 1), a = 0, s = o.length; a < s; a++)
for (i in o[a])
void 0 !== (r = o[a][i]) && (e.isPlainObject(r) ? t[i] = e.isPlainObject(t[i]) ? e.widget.extend({}, t[i], r) : e.widget.extend({}, r) : t[i] = r);
return t
}
,
e.widget.bridge = function(t, i) {
var r = i.prototype.widgetFullName || t;
e.fn[t] = function(o) {
var a = "string" == typeof o
, s = n.call(arguments, 1)
, l = this;
return o = !a && s.length ? e.widget.extend.apply(null, [o].concat(s)) : o,
a ? this.each(function() {
var n, i = e.data(this, r);
return i ? e.isFunction(i[o]) && "_" !== o.charAt(0) ? (n = i[o].apply(i, s),
n !== i && void 0 !== n ? (l = n && n.jquery ? l.pushStack(n.get()) : n,
!1) : void 0) : e.error("no such method '" + o + "' for " + t + " widget instance") : e.error("cannot call methods on " + t + " prior to initialization; attempted to call method '" + o + "'")
}) : this.each(function() {
var t = e.data(this, r);
t ? t.option(o || {})._init() : e.data(this, r, new i(o,this))
}),
l
}
}
,
e.Widget = function() {}
,
e.Widget._childConstructors = [],
e.Widget.prototype = {
widgetName: "widget",
widgetEventPrefix: "",
defaultElement: "<div>",
options: {
disabled: !1,
create: null
},
_createWidget: function(n, i) {
i = e(i || this.defaultElement || this)[0],
this.element = e(i),
this.uuid = t++,
this.eventNamespace = "." + this.widgetName + this.uuid,
this.options = e.widget.extend({}, this.options, this._getCreateOptions(), n),
this.bindings = e(),
this.hoverable = e(),
this.focusable = e(),
i !== this && (e.data(i, this.widgetName, this),
e.data(i, this.widgetFullName, this),
this._on(!0, this.element, {
remove: function(e) {
e.target === i && this.destroy()
}
}),
this.document = e(i.style ? i.ownerDocument : i.document || i),
this.window = e(this.document[0].defaultView || this.document[0].parentWindow)),
this._create(),
this._trigger("create", null, this._getCreateEventData()),
this._init()
},
_getCreateOptions: e.noop,
_getCreateEventData: e.noop,
_create: e.noop,
_init: e.noop,
destroy: function() {
this._destroy(),
this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),
this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName + "-disabled ui-state-disabled"),
this.bindings.unbind(this.eventNamespace),
this.hoverable.removeClass("ui-state-hover"),
this.focusable.removeClass("ui-state-focus")
},
_destroy: e.noop,
widget: function() {
return this.element
},
option: function(t, n) {
var i, r, o, a = t;
if (0 === arguments.length)
return e.widget.extend({}, this.options);
if ("string" == typeof t)
if (a = {},
i = t.split("."),
t = i.shift(),
i.length) {
for (r = a[t] = e.widget.extend({}, this.options[t]),
o = 0; o < i.length - 1; o++)
r[i[o]] = r[i[o]] || {},
r = r[i[o]];
if (t = i.pop(),
void 0 === n)
return void 0 === r[t] ? null : r[t];
r[t] = n
} else {
if (void 0 === n)
return void 0 === this.options[t] ? null : this.options[t];
a[t] = n
}
return this._setOptions(a),
this
},
_setOptions: function(e) {
var t;
for (t in e)
this._setOption(t, e[t]);
return this
},
_setOption: function(e, t) {
return this.options[e] = t,
"disabled" === e && (this.widget().toggleClass(this.widgetFullName + "-disabled ui-state-disabled", !!t).attr("aria-disabled", t),
this.hoverable.removeClass("ui-state-hover"),
this.focusable.removeClass("ui-state-focus")),
this
},
enable: function() {
return this._setOption("disabled", !1)
},
disable: function() {
return this._setOption("disabled", !0)
},
_on: function(t, n, i) {
var r, o = this;
"boolean" != typeof t && (i = n,
n = t,
t = !1),
i ? (n = r = e(n),
this.bindings = this.bindings.add(n)) : (i = n,
n = this.element,
r = this.widget()),
e.each(i, function(i, a) {
function s() {
if (t || !0 !== o.options.disabled && !e(this).hasClass("ui-state-disabled"))
return ("string" == typeof a ? o[a] : a).apply(o, arguments)
}
"string" != typeof a && (s.guid = a.guid = a.guid || s.guid || e.guid++);
var l = i.match(/^(\w+)\s*(.*)$/)
, d = l[1] + o.eventNamespace
, c = l[2];
c ? r.delegate(c, d, s) : n.bind(d, s)
})
},
_off: function(e, t) {
t = (t || "").split(" ").join(this.eventNamespace + " ") + this.eventNamespace,
e.unbind(t).undelegate(t)
},
_delay: function(e, t) {
function n() {
return ("string" == typeof e ? i[e] : e).apply(i, arguments)
}
var i = this;
return setTimeout(n, t || 0)
},
_hoverable: function(t) {
this.hoverable = this.hoverable.add(t),
this._on(t, {
mouseenter: function(t) {
e(t.currentTarget).addClass("ui-state-hover")
},
mouseleave: function(t) {
e(t.currentTarget).removeClass("ui-state-hover")
}
})
},
_focusable: function(t) {
this.focusable = this.focusable.add(t),
this._on(t, {
focusin: function(t) {
e(t.currentTarget).addClass("ui-state-focus")
},
focusout: function(t) {
e(t.currentTarget).removeClass("ui-state-focus")
}
})
},
_trigger: function(t, n, i) {
var r, o, a = this.options[t];
if (i = i || {},
n = e.Event(n),
n.type = (t === this.widgetEventPrefix ? t : this.widgetEventPrefix + t).toLowerCase(),
n.target = this.element[0],
o = n.originalEvent)
for (r in o)
r in n || (n[r] = o[r]);
return this.element.trigger(n, i),
!(e.isFunction(a) && !1 === a.apply(this.element[0], [n].concat(i)) || n.isDefaultPrevented())
}
},
e.each({
show: "fadeIn",
hide: "fadeOut"
}, function(t, n) {
e.Widget.prototype["_" + t] = function(i, r, o) {
"string" == typeof r && (r = {
effect: r
});
var a, s = r ? !0 === r || "number" == typeof r ? n : r.effect || n : t;
r = r || {},
"number" == typeof r && (r = {
duration: r
}),
a = !e.isEmptyObject(r),
r.complete = o,
r.delay && i.delay(r.delay),
a && e.effects && (e.effects.effect[s] || !1 !== e.uiBackCompat && e.effects[s]) ? i[t](r) : s !== t && i[s] ? i[s](r.duration, r.easing, o) : i.queue(function(n) {
e(this)[t](),
o && o.call(i[0]),
n()
})
}
}),
!1 !== e.uiBackCompat && (e.Widget.prototype._getCreateOptions = function() {
return e.metadata && e.metadata.get(this.element[0])[this.widgetName]
}
)
}),
define("fly/components/base-1.0", ["jquery", "version!fly/utils/data-prefix", "version!fly/libs/jquery.widget"], function(e) {
var t = {}
, n = {}
, i = {
setDefaultOptions: function(n, i) {
"string" == typeof n ? (t[n] = t[n] || {},
e.extend(!0, t[n], i)) : e.extend(!0, t, n)
},
addDefaultEvents: function(n, r) {
var o;
"string" == typeof n ? (t[n] = t[n] || {},
i.addDefaultEvent(n, r)) : (o = n,
e.each(o, function(e, t) {
i.addDefaultEvent(e, t)
}))
},
addDefaultEvent: function(e, t) {
n[e] = n[e] || [],
n[e].push(t)
}
};
return e.widget("fly.base", {
options: {
defaultsDisabled: !1,
defaultOptionsDisabled: !1,
defaultEventsDisabled: !1
},
_setup: function() {
var t = this
, i = n[this.widgetName] || [];
this.$element = this.element,
this.$document = this.document,
this.$window = this.window,
i.length && e.each(i, function(n, i) {
var r = {};
e.each(i, function(e, n) {
r[(t.widgetEventPrefix + e).toLowerCase()] = n
}),
t.$element.on(r)
})
},
_getCreateOptions: function() {
var t = this.getDefaultOptions()
, n = this.getDataOptions(this.element);
return e.extend(!0, {}, t, n)
},
getDefaultOptions: function() {
var e = this.options
, n = {};
return e.defaultsDisabled || e.defaultOptionsDisabled || (n = t[this.widgetName] || {}),
n
},
getDataOptions: function(e, t) {
return t = t || this.widgetName,
e.data(t + "Options") || e.dataPrefix(t)
},
_triggerGlobal: function(e, t) {
this.$document.trigger(e, t)
},
_create: function() {
this.$element = this.element
},
setOptionsFromData: function() {}
}),
i
}),
define("components/tracking-controller", ["jquery", "version!fly/managers/debug", "managers/third-party/comscore", "utils/cookie", "managers/page-vars", "managers/global-functions", "managers/mpulse", "utils/targeting-helper", "version!fly/components/base"], function(e, t, n, i, r, o, a, s) {
t = t.init("trackingController"),
e.widget("cnet.trackingController", e.fly.base, {
options: {
maxCharacters: 155,
taboolaClass: ".taboola",
gcpUrlWithoutQueryString: "https://us-central1-i-cnet-dev.cloudfunctions.net/errorResponsePublish?"
},
defaultTrackingData: null,
monitoredServices: {
omniture: {
fireCount: 0,
maxFireCount: 1,
requestPrefix: "https://som.cbsi.com/",
services: ["mpulse"],
timerName: "track_omniture"
},
comscore: {
fireCount: 0,
maxFireCount: 1,
requestPrefix: "https://sb.scorecardresearch.com/b?",
services: ["mpulse"],
timerName: "track_comscore"
}
},
pageTrackingData: null,
sharedTrackingData: null,
trackingServices: {
comscore: r.services && r.services.comscore && r.services.comscore.enabled ? n : null
},
_create: function() {
this._setup(),
this.defaultTrackingData = e.extend(!0, {}, r.tracking.data),
this.pageTrackingData = {},
this.sharedTrackingData = this._getSharedTrackingData(),
this.resetTrackingData(r.tracking.data),
this._initRequestTracking(),
this._initChartbeat(),
this._injectQueryStringGCP()
},
_injectQueryStringGCP: function() {
var t = this;
window.CnetFunctions.gdprConsentCallback("_injectQueryStringGCP", function() {
if ("error_page" == r.pageType) {
var n = {
ctype: "viewguid",
xref: document.referrer,
cval: r.tracking.data.pageViewGuid,
v21: r.tracking.data.siteType + "|||" + r.tracking.data.deviceType,
title: document.title,
srcurl: ((I11C || I10C).PreLocationContextProxy)(window).locat1on.href,
ld: ((I11C || I10C).PreLocationContextProxy)(window).locat1on.host,
brlang: navigator.language,
brwinsz: window.innerWidth + "x" + window.innerHeight,
brscrsz: window.screen.width + "x" + window.screen.height,
tcset: document.characterSet,
ts: Date.now(),
ldc: i.read("LDCLGFbrowser", {
raw: !0
}),
clgf: i.read("XCLGFbrowser", {
raw: !0
}),
im: "tracking-controller.js",
siteid: r.tracking.data.siteId,
rsid: r.tracking.data.reportSuiteId,
pagetype: r.tracking.data.pageType,
viewguid: r.tracking.data.pageViewGuid,
devicetype: r.tracking.data.deviceType,
sitetype: r.tracking.data.siteType,
sid: r.tracking.data.siteId,
env: r.environment
}
, o = t.options.gcpUrlWithoutQueryString + e.param(n)
, a = e('<img src="' + o + '" style="display: none;" >');
e("body").append(a)
}
})
},
_enforceCharacterCap: function(e) {
var t = ["collectionName", "collectionThreadName"];
for (var n in t) {
var i = t[n]
, r = e[i];
if ("string" == typeof r)
e[i] = r.substr(0, this.options.maxCharacters);
else if ("object" == typeof r) {
var o = r.join(",");
if (o.length > this.options.maxCharacters + 1) {
var a = o.substr(0, this.options.maxCharacters).split(",");
a.splice(r.length - 2, 1),
e[i] = a
}
}
}
return e
},
_getAmpOverrideData: function() {
var e = {};
return -1 !== ((I11C || I10C).PreLocationContextProxy)(window).locat1on.pathname.indexOf("/videos/share") && -1 !== ((I11C || I10C).PreLocationContextProxy)(window).locat1on.hash.indexOf("amp=1") && (e.pageType = "article_amp"),
e
},
_getBotManagerData: function() {
var e = {};
if (i.read("bm_cnet")) {
var t = i.read("bm_cnet").split("-");
t[0] && (e.bm_type = t[0]),
t[1] && (e.bm_name = t[1])
}
return e
},
_getInstartData: function() {
var e = {};
return window.I10C && window.I10C.MorphState && "unblocked" == window.I10C.MorphState ? e.instart = "unblock" : e && document.cookie.indexOf("il_geo=") >= 0 ? e.instart = "instart_noop" : e.instart = "no_instart",
e
},
_getMiscPersistentVars: function() {
return {
error: r.environment,
traffic_source: r.environment && 0 === r.environment.indexOf("gcp") ? "cloud" : "onprem"
}
},
getServiceVars: function() {
var e = {};
for (var t in r.services)
e["services." + t + ".enabled"] = r.services[t].enabled;
return e
},
_getSharedTrackingData: function() {
return e.extend(!0, {}, this._getBotManagerData(), this._getInstartData(), this._getUserData(), this.getServiceVars(), this._getMiscPersistentVars())
},
getSourcePointData: function(t) {
var n = "undefined";
r.sourcepoint && r.sourcepoint.data && r.sourcepoint.data.d && (n = r.sourcepoint.data.d.abp ? "blocked" : "notBlocked");
var i = r.services.sourcepoint && r.services.sourcepoint.enabled ? {
testName: "sourcepoint",
testVersion: "1",
testGroup: t + "-" + n,
soastaBucket: "sourcepoint_1_" + t + "-" + n
} : {};
return e.extend(this.sharedTrackingData, i),
i
},
_getTaboolaData: function() {
var t = {};
return null != e(this.options.taboolaClass).data("taboola-options") && (t = {
contentWidget: e(this.options.taboolaClass).data("taboola-options").placement
}),
t
},
_getUserData: function() {
var e = i.read("fly_user")
, n = i.read("previousLogin")
, r = {
userState: "not authenticated",
userType: "anon"
};
if (e)
try {
r = {
userId: JSON.parse(e).regId,
userState: "authenticated",
userType: "registered"
}
} catch (e) {
t.error("Failed to parse user data:", e)
}
else
n && (r.userId = n,
r.userType = "registered");
return r
},
_initChartbeat: function() {
if (r.services.chartbeat_tracking && r.services.chartbeat_tracking.enabled) {
t.info("Injecting Chartbeat tracking script");
var n = 0 < e("[data-component=videoPlayer]").length;
window._sf_endpt = (new Date).getTime(),
n ? (this._initChartbeatVideoStrategy(),
o.gdprConsentCallback("script_chartbeat_video", function() {
require(["chartbeat-video"])
})) : o.gdprConsentCallback("script_chartbeat", function() {
require(["chartbeat"])
})
} else
t.info("Chartbeat tracking is disabled")
},
_initChartbeatVideoStrategy: function() {
window.VideoStrategy || (window.VideoStrategy = function(t) {
this._$player = e(t).closest("[data-component=videoPlayer]")
}
,
VideoStrategy.ContentType = {
AD: "ad",
CONTENT: "ct"
},
VideoStrategy.AutoplayType = {
UNKNOWN: "unkn",
MANUAL: "man",
AUTOPLAY: "auto",
CONTINUOUS: "cont"
},
VideoStrategy.VideoState = {
UNPLAYED: "s1",
PLAYED: "s2",
STOPPED: "s3",
COMPLETED: "s4"
},
VideoStrategy.prototype.isReady = function() {
return null !== this._$player
}
,
VideoStrategy.prototype.getTitle = function() {
var e = this._$player.videoPlayer("getVideo")
, t = e ? e.title : null;
return t && e.apeList && (t = "Unmapped: " + t),
t || null
}
,
VideoStrategy.prototype.getVideoPath = function() {
var e = this._$player.videoPlayer("getVideo")
, t = e ? e.mediaUrl : null;
return t && e.apeList && (t += "?unmapped"),
t
}
,
VideoStrategy.prototype.getContentType = function() {
return this._$player.videoPlayer("isAdPlaying") ? VideoStrategy.ContentType.AD : VideoStrategy.ContentType.CONTENT
}
,
VideoStrategy.prototype.getAutoplayType = function() {
var e = this._$player.videoPlayer("getVideo");
return e && e.autoplayType ? VideoStrategy.AutoplayType[e.autoplayType] : null
}
,
VideoStrategy.prototype.getTotalDuration = function() {
var e = this._$player.videoPlayer("getVideo");
return e && e.duration ? 1e3 * e.duration : null
}
,
VideoStrategy.prototype.getState = function() {
var e = this._$player.videoPlayer("getVideo");
return e && e.videoState ? VideoStrategy.VideoState[e.videoState] : null
}
,
VideoStrategy.prototype.getThumbnailPath = function() {
var e = this._$player.videoPlayer("getVideo");
return e && e.thumbnail ? e.thumbnail : null
}
,
VideoStrategy.prototype.getPlayerType = function() {
return uvpjs.Configuration.version
}
,
VideoStrategy.prototype.getStrategyName = function() {
return "VS"
}
,
VideoStrategy.prototype.getViewStartTime = function() {
var e = this._$player.videoPlayer("getVideo")
, t = e && e.contentStartTimeStamp ? e.contentStartTimeStamp : -1;
return t > 0 ? ((new Date).getTime() - t) / 1e3 : null
}
,
VideoStrategy.prototype.getCurrentPlayTime = function() {
var e = this._$player.videoPlayer("getVideo");
return e && e.currentPlaybackState ? e.currentPlaybackState.currentTime : null
}
,
VideoStrategy.verify = function(e) {
return e && 0 === e.id.indexOf(window.uvpjs.domConstants.VIDEO_ID_PREFIX + "videoPlayer")
}
,
window._cbv_strategies = window._cbv_strategies || [],
window._cbv_strategies.push(window.VideoStrategy))
},
_initRequestTracking: function() {
if ("article" === r.tracking.data.pageType) {
var e = 0
, n = this;
window.setInterval(function() {
try {
var i = window.performance.getEntriesByType("resource");
for (e = e >= i.length ? 0 : e; e < i.length; )
n._trackServiceRequest(i[e]),
e++
} catch (e) {
t.error("Failed to monitor tracking requests (known race condition):", e)
}
}, 500)
}
},
resetTrackingData: function(n, i) {
if (i = i || ((I11C || I10C).PreLocationContextProxy)(window).locat1on.pathname,
pageData = this.pageTrackingData[i],
!pageData) {
var o = e.extend(this._getAmpOverrideData(), this._getTaboolaData(), {
adCount: r.ads.data.gpt && r.ads.data.gpt.adDivIds ? r.ads.data.gpt.adDivIds.length : 0,
pageViewGuid: r.guid,
userGroups: s.getUdoUserGroups()
});
this.pageTrackingData[i] = pageData = e.extend(this._enforceCharacterCap(n) || {}, o)
}
t.info("Resetting tracking data: ", i, pageData, this.sharedTrackingData),
r.tracking.data = window.utag_data = e.extend(pageData, this.sharedTrackingData)
},
trackChartbeatPageView: function() {
if (r.services.chartbeat_tracking && r.services.chartbeat_tracking.enabled)
try {
var e = {
path: ((I11C || I10C).PreLocationContextProxy)(window).locat1on.pathname,
title: window.document.title,
authors: r.tracking.data.articleAuthorName.join(","),
sections: r.tracking.data.siteSection,
contentType: "speed-desk" == r.tracking.data.articleSubType ? "article_speeddesk" : r.tracking.data.articleType
};
t.info("Tracking page load via Chartbeat", e),
window.pSUPERFLY.virtualPage(e)
} catch (e) {
t.info("Failed to track page load via Chartbeat", e)
}
else
t.info("Chartbeat tracking is disabled")
},
_trackPage: function(t, n) {
if (r.tracking.enabled) {
n = e.extend(!0, {
data: {},
trackingServices: ["comscore"]
}, n);
for (var i = 0; i < n.trackingServices.length; i++) {
var o = n.trackingServices[i];
if (o && this.trackingServices[o]) {
var a = this.trackingServices[o][t];
"function" == typeof a && a.call(this, e.extend(!0, {}, this.sharedTrackingData, n.data))
}
}
}
},
trackPageEvent: function(t) {
if (r.tracking.enabled) {
t = e.extend(!0, {}, t);
var n = t.path ? this.pageTrackingData[t.path] : this.defaultTrackingData;
this._trackPage("trackPageEvent", {
data: e.extend(!0, {
pe: "lnk_o"
}, n, t.data),
trackingServices: t.trackingServices
})
}
},
trackPageView: function(t) {
if (r.tracking.enabled) {
t = e.extend(!0, {}, t),
t.path && t.data && (this.pageTrackingData[t.path] = this.pageTrackingData[t.path] || t.data);
var n = t.path ? this.pageTrackingData[t.path] : this.defaultTrackingData;
this._trackPage("trackPageView", {
data: n,
trackingServices: t.trackingServices
})
}
},
_trackServiceRequest: function(e) {
for (var n in this.monitoredServices) {
var i = this.monitoredServices[n];
i.fireCount < i.maxFireCount && -1 !== e.name.indexOf(i.requestPrefix) && (t.info("Tracking the request: " + i.timerName, e.fetchStart),
-1 !== i.services.indexOf("mpulse") && a.sendBeacon(i.timerName, e.fetchStart),
i.fireCount++)
}
}
})
}),
define("managers/tracking", ["version!fly/managers/debug", "components/tracking-controller"], function(e) {
return e.init("trackingManager"),
$.cnet.trackingController()
}),
define("components/position-injector", ["jquery", "version!fly/managers/debug", "version!fly/components/base"], function(e, t) {
t = t.init("positionInjector"),
e.widget("cnet.positionInjector", e.fly.base, {
options: {
injectionPoint: [],
positionAround: []
},
_create: function() {
this._setup(),
t.log("Position injector used to reposition elements based on configurations with fall back."),
this.wrapper = this.$element,
this._setPositionRange(),
this._injectUnit()
},
_setOption: function(e, t) {
this.options[e] = t
},
_injectUnit: function() {
try {
for (var n, i = 0, r = 0, o = !1, a = 0; a < this.options.injectionPoint.length; a++) {
var s = this.options.injectionPoint[a]
, l = "before" == s.position || "top" == s.position ? e(s.element$$).length - 1 : 0
, d = "before" == s.position || "top" == s.position ? 0 : e(s.element$$).length;
if (s.notAfterLast)
for (n = l; l < d && n < d || l > d && n > d; l < d ? n++ : n--)
(e(s.element$$)[n].innerHTML.match(/\S/) || s.allowEmpty) && r++;
for (n = l; l < d && n < d || l > d && n > d; l < d ? n++ : n--)
if ((!o && e(s.element$$)[n].innerHTML.match(/\S/) || s.allowEmpty) && ++i >= s.count && (r <= 0 || i < r || s.singleElement) && e(e(s.element$$)[n]).position().top + e(e(s.element$$)[n]).height() >= this.positionAfter && e(e(s.element$$)[n]).position().top + e(e(s.element$$)[n]).height() <= this.positionBefore) {
t.log("injectionPoint.position = ", s.position),
t.log("this.wrapper = ", this.wrapper),
t.log("$($(injectionPoint.element$$)[i]) = ", e(e(s.element$$)[n])),
"top" == s.position ? (this.wrapper.prependTo(e(e(s.element$$)[n])),
t.log("prependTo top")) : "bottom" == s.position ? (this.wrapper.appendTo(e(e(s.element$$)[n])),
t.log("appendTo bottom")) : "before" == s.position ? (this.wrapper.insertBefore(e(e(s.element$$)[n])),
t.log("insertBefore before")) : "after" == s.position && (this.wrapper.insertAfter(e(e(s.element$$)[n])),
t.log("insertAfter after")),
t.log("Ad: Injected using injection point #" + (a + 1) + " and count #" + (n + 1)),
o = !0;
break
}
if (o)
break
}
o || t.log("PositionInjector: No suitable place to inject unit. Defaulting to current placement")
} catch (e) {
t.log("PositionInjector._injectUnit() failed", e)
}
},
_setPositionRange: function() {
try {
var n = document.body
, i = document.documentElement;
this.positionAfter = 0,
this.positionBefore = Math.max(n.scrollHeight, n.offsetHeight, i.clientHeight, i.scrollHeight, i.offsetHeight),
e.each(this.options.positionAround, function(n, i) {
var r = e(i.element$$);
(null == r || r.length < i.count) && t.log("PositionInjector: positionAround does not exist."),
"after" == i.position && this.positionAfter < e(r[i.count - 1]).position().top + e(r[i.count - 1]).height() ? this.positionAfter = e(r[i.count - 1]).position().top + e(r[i.count - 1]).height() : "before" == i.position && this.positionAfter < e(r[i.count - 1]).position().top ? this.positionBefore = e(r[i.count - 1]).position().top : t.log("PositionInjector: positionAround #" + n + " is invalid. Element skipped.")
}
.bind(this))
} catch (e) {
t.log("PositionInjector._setPositionRange() failed", e)
}
}
})
}),
define("utils/ad-repositioner", ["jquery", "version!fly/managers/debug", "version!fly/utils/string-helper", "managers/page-vars", "components/position-injector"], function(e, t, n, i) {
function r(e, n) {
return e = e.split("."),
e.length < 8 && t.warn("pageSelector not long enough"),
!(!(e.length >= 8) || "*" != e[0] && e[0] != n.pagetype || "*" != e[1] && e[1] != n.topic || "*" != e[2] && e[2] != n.section || "*" != e[3] && e[3] != n.collection || "*" != e[4] && e[4] != n.slug || "*" != e[5] && e[5] != n.edition || "*" != e[6] && e[6] != n.brand || "*" != e[7] && e[7] != n.articleType)
}
t = t.init("adPosAdj"),
t.log("looking for ad position readjustments.");
var o = {
"product_main.*.*.*.*.*.cnet.content_review_indepth": {
mpu_plus_middle: {
injectionPoint: [{
element$$: "#editorReview > p",
position: "after",
count: Math.ceil(.5 * e("#editorReview > p").length),
notAfterLast: e("editorReview")
}],
positionAround: [{
element$$: "#rbContent .sideNav",
position: "after",
count: 1
}]
},
flex_incontent_ad_plus_billboard_top: {
injectionPoint: [{
element$$: "#editorReview > p",
position: "after",
count: Math.ceil(.2 * e("#editorReview > p").length),
notAfterLast: e("editorReview")
}],
positionAround: [{
element$$: "#rbContent .sideNav",
position: "after",
count: 1
}]
}
},
"product_main.*.*.*.*.*.roadshow.*": {
mpu_plus_middle: {
injectionPoint: [{
element$$: "#editorReview > div > p",
position: "after",
count: Math.ceil(.25 * e("#editorReview > div > p").length),
notAfterLast: e("editorReview")
}],
positionAround: [{
element$$: "#rbContent .sideNav",
position: "after",
count: 1
}]
},
mpu_middle2: {
injectionPoint: [{
element$$: "#editorReview > div > p",
position: "after",
count: Math.ceil(.6 * e("#editorReview > div > p").length),
notAfterLast: e("editorReview")
}]
},
"leader-middle": {
injectionPoint: [{
element$$: "#editorReview > div > p",
position: "after",
count: Math.ceil(.45 * e("#editorReview > div > p").length),
notAfterLast: e("editorReview")
}]
},
"leader-plus-middle": {
injectionPoint: [{
element$$: "#editorReview > div > p",
position: "after",
count: Math.ceil(.8 * e("#editorReview > div > p").length),
notAfterLast: e("editorReview")
}]
},
flex_incontent_ad_top: {
injectionPoint: [{
element$$: "#editorReview > div > p",
position: "after",
count: Math.ceil(.15 * e("#editorReview > div > p").length),
notAfterLast: e("editorReview")
}],
positionAround: [{
element$$: "#rbContent .sideNav",
position: "after",
count: 1
}]
},
flex_incontent_ad_bottom: {
injectionPoint: [{
element$$: "#editorReview.repositionPowerBar > div > p",
position: "after",
count: Math.ceil(.7 * e("#editorReview > div > p").length),
notAfterLast: e("editorReview")
}]
}
}
};
return {
reposition: function(a) {
t.log(a.pagetype),
e.each(o, function(o, s) {
t.log(o);
var l = s
, d = r(o, a);
t.log("IsPage = ", d),
d && e.each(l, function(r, o) {
var a = ".ad-" + r.toLowerCase().trim().split("_").join("-");
t.log("adunit=", a),
t.log(o),
t.log("before position injector");
var s = o.injectionPoint
, l = o.positionAround;
e(a).positionInjector({
positionAround: l,
injectionPoint: s
}),
e(window).trigger("adReposition", r),
t.log("after position injector");
var d = n.toCamelCase(r, "_")
, c = i.ads.data.gpt.adConfig.adUnits;
void 0 != c[d] && (c[d].repositioned = !0,
c[d].delayLoad) && i.ads.data.gpt.containerId
})
})
}
}
}),
define("utils/userAgentSniffer", ["version!fly/managers/debug"], function(e) {
e = e.init("userAgentSniffer");
var t = null
, n = ["googlebot", "mediapartners", "adsbot", "bingbot", "bingpreview", "msnbot", "slurp", "yahoo", "baidu"];
return {
isBot: function() {
return null !== t ? t : (t = !1,
$.each(n, function(n, i) {
if (navigator.userAgent.toLowerCase().indexOf(i) >= 0)
return t = !0,
e.info("Bot detected!"),
!1
}),
t)
}
}
}),
define("fly/utils/object-helper-1.0", ["jquery"], function(e) {
return {
deepFind: function(e, t) {
if (!e || !t)
return null;
var n = t.split(".")
, r = n.length;
for (i = 0; i < r; i++) {
if (!e.hasOwnProperty(n[i]))
return null;
e = e[n[i]]
}
return e
}
}
}),
define("fly/managers/components-1.0", ["jquery", "version!fly/utils/string-helper", "version!fly/utils/object-helper", "version!fly/managers/debug", "version!fly/components/base"], function(e, t, n, i, r) {
var o, a = {
attr: "data-component",
includeContext: !0
}, s = i.init("components"), l = {};
return e(document).on("domUpdated", function(e, t) {
t = t || {},
o.process(t.$context)
}),
o = {
process: function(n) {
var i = this;
this.findByAttr(n).each(function(n, r) {
var o = e(r)
, a = o.data()
, s = t.toCleanArray(a.component);
e.each(s, function(e, t) {
i.init(t, o)
})
})
},
init: function(t, n, i) {
var r, o, a = l[t];
a && (i = i || {},
r = e.makeArray(a.require) || [],
o = t,
a.alias && (o = a.alias,
i = e.extend(!0, {}, a.options || {}, i)),
require(r, function() {
n && n.length && e.isFunction(n[o]) && n[o](i)
}),
s.log("init: ", t, n, i))
},
setConfig: function(t) {
if (!e.isPlainObject(t))
throw new Error("Component setConfig failure. Map is in the wrong format.");
e.extend(a, t)
},
register: function(t) {
if (!e.isPlainObject(t))
throw new Error("Component register failure. Map is in the wrong format.");
e.each(t, function(e, t) {
l[e] = t,
t.options && r.setDefaultOptions(e, t.options),
t.events && r.addDefaultEvents(e, t.events)
}),
s.log("register: ", t)
},
findByAttr: function(t, n, i) {
var r, o = "";
return n = n && !e.isArray(n) ? [n] : n,
n ? e.each(n, function(e, t) {
o += e > 0 ? ", " : "",
o += "[" + a.attr + '="' + t + '"], [' + a.attr + "*='\"" + t + "\"']"
}) : o = "[" + a.attr + "]",
t = t || e(document.body),
r = t.find(o),
i = void 0 !== i ? i : a.includeContext,
i && (r = r.addBack(o)),
r
}
}
}),
define("utils/date", ["jquery", "version!fly/managers/debug"], function(e, t) {
return t = t.init("date"),
{
isEDT: function(e) {
var t = new Date(e.getFullYear(),2,1);
t = Date.UTC(t.getUTCFullYear(), 2, 14 - (t.getUTCDay() + 13) % 7, 5);
var n = new Date(e.getFullYear(),10,1);
return n = Date.UTC(n.getUTCFullYear(), 10, 7 - (n.getUTCDay() + 6) % 7, 4),
e.getTime() >= t && e.getTime() < n
}
}
}),
define("managers/edition", ["jquery", "version!fly/managers/debug"], function(e, t) {
t = t.init("edition");
var n = {
au: {
code: "au",
name: "Australia",
language: "en",
defaultAppId: 376,
translationLocale: "en_AU"
},
es: {
code: "es",
name: "Español",
language: "es",
defaultAppId: 370,
translationLocale: "es_US"
},
uk: {
code: "uk",
name: "United Kingdom",
language: "en",
defaultAppId: 376,
translationLocale: "en_GB"
},
us: {
code: "us",
name: "United States",
language: "en",
defaultAppId: 376,
translationLocale: "en_US"
}
}
, i = window.CnetPageVars.edition;
return {
getEdition: function(e) {
return n[e || i.code].code
},
getName: function(e) {
return n[e || i.code].name
},
getLanguage: function(e) {
return n[e || i.code].language
},
getDefaultAppId: function(e) {
return n[e || i.code].defaultAppId
},
getTranslationLocale: function(e) {
return n[e || i.code].translationLocale
},
getTranslation: function(e) {
return e[n[i.code].translationLocale] || e[n[i.code].language] || e.en
},
isAustralia: function() {
return i.code === n.au.code
},
isEspanol: function() {
return i.code === n.es.code
},
isUnitedKingdom: function() {
return i.code === n.uk.code
},
isUnitedStates: function() {
return i.code === n.us.code
},
isLanguageEnglish: function() {
return "en" === n[i.code].language
},
isLanguageEspanol: function() {
return "es" === n[i.code].language
}
}
}),
define("fly/managers/gpt-4.3", ["jquery", "version!fly/utils/string-helper", "version!fly/utils/url-helper", "version!fly/managers/debug"], function(e, t, n, i) {
var r = {}
, o = i.get("ads")
, a = {}
, s = {}
, l = []
, d = []
, c = 0
, u = []
, p = []
, f = "1"
, g = !1
, h = []
, m = {
callbackMethods: {},
adDivEventCallbacks: {},
setCallback: function(e, t) {
this.callbackMethods[e] = t
},
setAdDivEventCallback: function(e, t, n) {
var i = this.callbackMethods[n];
"function" == typeof i && (o.log("gpt::setAdDivEventCallback:", e, {
eventName: t,
callbackName: n,
callbackMethod: i
}),
this.adDivEventCallbacks[e] || (this.adDivEventCallbacks[e] = {}),
this.adDivEventCallbacks[e][t] || (this.adDivEventCallbacks[e][t] = []),
this.adDivEventCallbacks[e][t].push(i))
},
slotRenderEndedCallBack: function(t) {
var n = "NOT FOUND";
e.each(s, function(e, i) {
if (i === t.slot)
return void (n = e)
}),
o.log("gpt::slotRenderEndedCallback", {
divId: n,
event: t
});
var i = m.adDivEventCallbacks[n] && m.adDivEventCallbacks[n].slotRenderEnded;
if (i) {
o.log("gpt::slotRenderEndedCallback: calling event callbacks");
for (var r = 0; r < i.length; r++)
i[r](n, t)
}
}
}
, y = function(e, t, n) {
if (e && (t || n) && (n && (o.log("gpt::setAdSlotTargeting:", "clearing targeting on slot:", e),
e.clearTargeting()),
t)) {
o.log("gpt::setAdSlotTargeting:", "setting targeting:", t, "on slot:", e);
for (var i in t)
e.setTargeting(i, t[i])
}
};
return {
companionAds: !1,
delayIndvAds: !1,
init: function(t) {
if (r = {
slot: {},
adConfig: {},
targeting: {}
},
e.extend(r, t),
!this._isClearTargetingOnInitDisabled()) {
for (var n = 0; n < h.length; n++) {
var i = h[n];
googletag.pubads().clearTargeting(i),
o.log("gpt::init: clearTargeting:", i)
}
h = []
}
r.adConfig.lazyLoading && r.adConfig.lazyLoading.enable && (o.log("gpt::init: enableLazyLoad", r.adConfig.lazyLoading),
window.googletag.pubads().enableLazyLoad({
fetchMarginPercent: 100 * r.adConfig.lazyLoading.fetchViewports,
renderMarginPercent: 100 * r.adConfig.lazyLoading.renderViewports,
mobileScaling: r.adConfig.lazyLoading.mobileMultiplier
})),
this._initWrappers();
var a = r.region;
r.device = r.slotVars.platform;
var s = window.navigator.userAgent;
s && s.indexOf && (-1 != s.indexOf("iOS App") || -1 != s.indexOf("Android App")) ? a = "app" + r.region : "mobile" == r.device && (a = "m" + r.region),
r.slot = "/" + r.slotVars.network + "/" + a + "-" + r.slotVars.siteName + (r.slotVars.topics ? "/" + r.slotVars.topics : ""),
o.log("gpt::init:", "Slot:", r.slot)
},
setSlot: function(e) {
r.slot = e
},
clearAdSlots: function(e, t, n) {
if ((e = this._cleanContainerId(e)) || void 0 != t || void 0 != n) {
t = this._formatAdUnitNames(t);
var i = this._getAdSlots(e, t, n, "gpt::clearAdSlots:");
window.googletag.pubads().clear(i),
o.log("gpt::clearAdSlots", i)
} else
window.googletag.pubads().clear(),
o.log("gpt::clearAdSlots:", "clear all ad slots")
},
createAdSlot: function(n) {
var i = this;
o.log("gpt::createAdSlot", "creating adSlot for", n);
var d = n.substring(0, n.indexOf("-" + r.containerId));
if (r.suppressAds && (e.inArray(d, r.suppressAds) > -1 || e.inArray(d.replace(/-/g, "_"), r.suppressAds) > -1))
return void o.log(" in list of suppressed ads, skipping");
var c = r.adConfig.adUnits[t.toCamelCase(d, "-")];
if (o.log(" adUnit config:", c),
!c)
return o.log("gpt::createAdSlot:", n, "Error: no adUnit config for this divId"),
void (window.console && window.console.error && console.error("gpt::createAdSlot:", n, "Error: no adUnit config for this divId"));
var u;
if (1 == c.outOfPage ? (u = googletag.defineOutOfPageSlot(r.slot, n),
o.log(" create out of page slot")) : (u = googletag.defineSlot(r.slot, c.sizes, n),
o.log(" create regular slot")),
!u)
return o.log("gpt::createAdSlot:", n, "Error: failed to create adSlot"),
void (window.console && window.console.error && console.error("gpt::createAdSlot:", n, "Error: failed to create adSlot"));
1 == c.isVideo && (i.companionAds = !0,
u.addService(googletag.companionAds()),
o.log(" add companionAds service")),
u.addService(googletag.pubads()),
o.log(" add pubad service"),
c.position && (1 == r.adConfig.disableAdIncrement && "increment" == c.position ? (u.setTargeting("pos", 1),
o.log(" setTargeting:", "pos=1")) : "increment" == c.position ? (u.setTargeting("pos", f),
o.log(" setTargeting:", "pos=" + f),
f++) : (u.setTargeting("pos", c.position),
o.log(" setTargeting:", "pos=" + c.position))),
c.customTargeting && e.each(c.customTargeting, function(e, t) {
o.log(" setTargeting:", e + "=" + t),
u.setTargeting(e, t)
}),
c.disableInitialLoad || c.delayLoad || !0 === e("#" + n).data("disableInitialLoad") ? (i.delayIndvAds = !0,
o.log(" delayLoad")) : l.push(u);
var p = c.collapseEmptyDiv
, g = c.collapseEmptyDivOnPageload;
!0 !== p && !1 !== p || (!0 === g || !1 === g ? (u.setCollapseEmptyDiv(p, g),
o.log(" setCollapseEmptyDiv(", p, ",", g, ")")) : (u.setCollapseEmptyDiv(p),
o.log(" setCollapseEmptyDiv(", p, ")"))),
c.eventCallbacks && e.each(c.eventCallbacks, function(e, t) {
for (var i = t.split(","), r = 0; r < i.length; r++)
m.setAdDivEventCallback(n, e, i[r])
}),
c.forceSafeFrame && u.setForceSafeFrame(!0),
s[n] = u,
a[r.containerId] || (a[r.containerId] = {}),
a[r.containerId][d] || (a[r.containerId][d] = []),
a[r.containerId][d].push(u)
},
destroyAdSlots: function(e, t, n) {
if ((e = this._cleanContainerId(e)) || void 0 != t || void 0 != n) {
t = this._formatAdUnitNames(t);
var i = this._getAdSlots(e, t, n, "gpt::destroyAdSlots:");
window.googletag.destroySlots(i),
o.log("gpt::destroyAdSlots", i)
} else
window.googletag.destroySlots(),
o.log("gpt::destroyAdSlots:", "destroy all ad slots")
},
setTargeting: function(e, t) {
googletag.pubads().setTargeting(e, t),
o.log("gpt::setTargeting:", e + "=" + t),
h.push(e)
},
displayAds: function(t) {
var n = this;
e.each(t, function(e, t) {
o.log("gpt::displayAds:", t),
n.wrappers.display(t)
})
},
isAsyncInline: function() {
var t = r.adDivIds;
return "async-inline" == r.adConfig.method && t && e.isArray(t) && (1 != t.length || "ad-div-id-list" != t[0])
},
getAdDivIds: function() {
var n, i = [], a = {};
if (this.isAsyncInline()) {
var s = new RegExp("^([\\w\\-]+)\\-" + r.containerId + "(\\-\\d+)?$");
e.each(r.adDivIds, function(e, t) {
if (n = t.match(s)) {
var l = n[1];
!1 === r.adConfig.enableRepeatedAds && "mobile" != r.targeting.device && a[l] ? o.log("gpt::getAdDivIds:", "skipping divId:", t, "because repeated adUnits are not supported on ", r.targeting.device) : (i.push(t),
a[l] = 1)
} else
o.log("gpt::getAdDivIds:", "skipping divId:", t, "because it does not match:", s, "(async-inline adConfig.adDivIds list was probably not re-initialized with the current divIds)")
})
} else
e("div[data-ad]").each(function(n, s) {
var l = e(s).attr("data-ad")
, d = e(s).attr("id");
if (!r.adConfig.adUnits[t.toCamelCase(l, "-")])
return void o.log("gpt::getAdDivIds:", "skipping divId:", d, 'because there is no config (probably another type of div with "data-ad" attr)');
var c = new RegExp(l + "-" + r.containerId + "(\\-\\d+)?$");
d.match(c) ? !1 === r.adConfig.enableRepeatedAds && "mobile" != r.targeting.device && a[l] ? o.log("gpt::getAdDivIds:", "skipping divId:", d, "because repeated adUnits are not supported on ", r.targeting.device) : (i.push(d),
a[l] = 1) : o.log("gpt::getAdDivIds:", "skipping divId:", d, "because it does not match:", c, '(was probably already loaded under a different "containerId", or possibly another type of div with "data-ad" attr)')
});
return this.adOrder(i)
},
adOrder: function(n) {
if (void 0 !== r.adConfig.adOrder && e.isArray(r.adConfig.adOrder) && n.length > 0) {
var i = r.containerId && n && -1 != n[0].indexOf("-" + r.containerId)
, a = [];
e.each(r.adConfig.adOrder, function(e, n) {
n = t.fromCamelCase(t.toCamelCase(n, "_"), "-"),
i && (n += "-" + r.containerId),
a.push(n)
}),
e.each(a.reverse(), function(t, i) {
var r = e.inArray(i, n);
r > -1 && (n.splice(r, 1),
n.unshift(i))
}),
o.log("gpt::adOrder:", "ordered divIds", n)
}
return n
},
displayInlineAd: function(t) {
var n = e.inArray(t, u);
if (n > -1) {
if (o.log("gpt::displayInlineAd:", t),
this.wrappers.display(t),
u.splice(n, 1),
0 == u.length)
for (o.log("gpt::displayInlineAd:", "running any postDisplayCmds:", p); p.length; )
p.shift()()
} else
o.log("gpt::displayInlineAd:", t, "ERROR: ad was already displayed or should not be displayed at all")
},
adDisplayTrigger: function() {
var t = this;
if (o.log("gpt::adDisplayTrigger:", "ready to display any inline ads"),
e.isArray(window.cbsiGptDivIds))
for (o.log("gpt::adDisplayTrigger:", "displaying ads for any existing cbsiGptDivIds:", window.cbsiGptDivIds); window.cbsiGptDivIds.length; )
t.displayInlineAd(window.cbsiGptDivIds.shift());
o.log("gpt::adDisplayTrigger:", "setting future cbsiGptDivId ads to display immediately"),
window.cbsiGptDivIds = {
push: e.proxy(t.displayInlineAd, this)
}
},
loadAds: function() {
var t = this;
return o.log("gpt::loadAds:", r),
r.suppressAds && e.inArray("all", r.suppressAds) > -1 ? void o.log('gpt::loadAds: not loading any ads because "suppressAds" contains "all"') : "async" == r.adConfig.method || t.isAsyncInline() ? (t.isAsyncInline() && (u = r.adDivIds.slice()),
c++,
d.push(r.containerId),
l = [],
!0 === r.adConfig.disableInitialLoadCompanions && e.each(r.adConfig.adUnits, function(e, t) {
t.isVideo && (t.disableInitialLoad = !0)
}),
googletag = window.googletag || {},
googletag.cmd = googletag.cmd || [],
void googletag.cmd.push(function() {
var n = t.getAdDivIds();
if (o.log("gpt::loadAds", "adDivIds:", n),
e.each(n, function(e, n) {
t.createAdSlot(n)
}),
e.each(r.targeting, function(e, n) {
t.setTargeting(e, n)
}),
1 == t.companionAds && (null == r.adConfig.setRefreshUnfilledSlots || !0 === r.adConfig.setRefreshUnfilledSlots ? (googletag.companionAds().setRefreshUnfilledSlots(!0),
o.log("gpt::loadAds", "CompanionAds setRefreshUnfilledSlots = true")) : (googletag.companionAds().setRefreshUnfilledSlots(!1),
o.log("gpt::loadAds", "CompanionAds setRefreshUnfilledSlots = false")),
!0 === r.adConfig.setClearUnfilledSlots && (googletag.companionAds().setClearUnfilledSlots(!0),
o.log("gpt::loadAds", "CompanionAds setClearUnfilledSlots = true"))),
null != r.adConfig.enableAsyncRendering && !0 !== r.adConfig.enableAsyncRendering || (googletag.pubads().enableAsyncRendering(),
o.log("gpt::loadAds", "enableAsyncRendering")),
null != r.adConfig.enableSingleRequest && !0 !== r.adConfig.enableSingleRequest || (googletag.pubads().enableSingleRequest(),
o.log("gpt::loadAds", "enableSingleRequest")),
1 == c && (!0 === r.adConfig.collapseEmptyDiv ? (googletag.pubads().collapseEmptyDivs(!0),
o.log("gpt::loadAds", "collapseEmptyDivs before ad fetch")) : (googletag.pubads().collapseEmptyDivs(),
o.log("gpt::loadAds", "collapseEmptyDivs after ad fetch")),
!0 !== r.adConfig.disableInitialLoad && 1 != t.delayIndvAds && !0 !== r.adConfig.disableInitialLoadRefresh || (googletag.pubads().disableInitialLoad(),
g = !0,
o.log("gpt::loadAds", "disableInitialLoad")),
googletag.enableServices(),
o.log("gpt::loadAds", "enableServices"),
googletag.pubads().addEventListener("slotRenderEnded", m.slotRenderEndedCallBack)),
t.isAsyncInline() ? t.adDisplayTrigger() : t.displayAds(n),
g && !0 !== r.adConfig.disableInitialLoad) {
var i = function() {
t.wrappers.refresh(l),
o.log("gpt::loadAds", "refreshing initialLoad ads", l)
};
t.isAsyncInline() && u.length > 0 ? p.push(i) : i()
}
})) : void o.log("gpt::Unable to load ads as method is not async or async-inline")
},
registerCallback: function(e, t) {
m.setCallback(e, t)
},
refresh: function(e, t, n, i, r, a) {
var l = this;
e = this._cleanContainerId(e),
googletag.cmd.push(function() {
if (e || void 0 != t || void 0 != r) {
t = l._formatAdUnitNames(t);
var d = l._getAdSlots(e, t, r, "gpt::refresh:");
l._updateSlotTargeting(d, n, i),
l.wrappers.refresh(d, a),
o.log("gpt::refresh", d)
} else
l._updateSlotTargeting(s, n, i),
l.wrappers.refresh(null, a),
o.log("gpt::refresh:", "refresh all ads")
})
},
refreshLastLoad: function(e, t, n) {
d.length > 0 && this.refresh(d[d.length - 1], e, t, n)
},
_cleanContainerId: function(e) {
return e && e.length > 25 ? void 0 : e
},
_formatAdUnitNames: function(n) {
var i = [];
return e.each(n || [], function(e, n) {
i.push(t.fromCamelCase(t.toCamelCase(n, "_"), "-"))
}),
i
},
_getAdSlots: function(t, n, i, r) {
var s = [];
if (t) {
if (a[t]) {
var l = void 0 != n && n.length > 0 ? n : Object.keys(a[t]);
l = this.adOrder(l),
e.each(l, function(e, n) {
a[t][n] && (s = s.concat(a[t][n]),
o.log(r, n + "-" + t))
})
}
} else if ("array" == typeof n && 0 < n.length) {
n = this.adOrder(n);
for (var c = {}, u = d.length - 1; u > -1; u--)
a[d[u]] && e.each(n, function(e, t) {
!c.hasOwnProperty(t) && a[d[u]][t] && (c[t] = 1,
s = s.concat(a[d[u]][t]),
o.log(r, t + "-" + d[u]))
})
} else
for (var u = d.length - 1; u > -1; u--)
a[d[u]] && e.each(a[d[u]], function(e, t) {
s = s.concat(t),
o.log(r, e + "-" + d[u])
});
return i && (s = e.grep(s, function(t) {
var n = t.getSlotElementId();
return -1 !== e.inArray(n, i) ? (o.log(r, "Including ad div id " + n),
!0) : (o.log(r, "Excluding ad div id " + n),
!1)
})),
s
},
_isClearTargetingOnInitDisabled: function() {
return !0 === r.adConfig.disableClearTargetingOnInit
},
_initWrappers: function() {
this.headerBidding.isEnabled() && (o.log("gpt::_initWrappers", "Replacing wrappers"),
this.wrappers = this.headerBidding)
},
_updateSlotTargeting: function(e, t, n) {
if (t || n)
for (var i = 0; i < e.length; i++)
y(e[i], t, n)
},
wrappers: {
display: function(e) {
o.log("gpt::wrappers.display", "Executing the standard ad logic"),
googletag.display(e)
},
refresh: function(e, t) {
o.log("gpt::wrappers.refresh", "Executing the standard ad logic"),
googletag.pubads().refresh(e, t || {})
}
},
headerBidding: {
isEnabled: function() {
return !0 === r.adConfig.enableHeaderBidding && "object" == typeof window.index_headertag_lightspeed && "function" == typeof window.index_headertag_lightspeed.set_slot_targeting && "function" == typeof window.index_headertag_lightspeed.add_session_end_hook && "function" == typeof window.index_headertag_lightspeed.refresh
},
display: function(t) {
o.log("gpt::headerBidding.display", "Header bidding display() started"),
e(window).trigger("gptMgr.headerBiddingDisplayStart", {
adDivId: t
});
var n = function(t) {
return function() {
var n = window.googletag.pubads().getSlots();
window.index_headertag_lightspeed.set_slot_targeting(n),
e(window).trigger("gptMgr.headerBiddingDisplayEnd", {
adDivId: t
}),
window.googletag.display(t),
o.log("gpt::headerBidding.display", "Header bidding display() completed for adDivId " + t)
}
}(t);
window.index_headertag_lightspeed.add_session_end_hook(n, !0),
window.index_headertag_lightspeed.refresh()
},
refresh: function(t, n) {
o.log("gpt::headerBidding.refresh", "Header bidding refresh() started"),
e(window).trigger("gptMgr.headerBiddingRefreshStart"),
void 0 !== t && null !== t || (t = window.googletag.pubads().getSlots());
var i = function(t) {
return function() {
window.index_headertag_lightspeed.set_slot_targeting(t),
e(window).trigger("gptMgr.headerBiddingRefreshEnd"),
window.googletag.pubads().refresh(t, n || {}),
o.log("gpt::headerBidding.refresh", "Header bidding refresh() completed")
}
}(t);
window.index_headertag_lightspeed.add_session_end_hook(i, !0),
window.index_headertag_lightspeed.refresh()
}
},
resetPosition: function(e) {
"number" != typeof e && (e = 1),
f = e
},
setLocation: function(e) {
window.googletag.pubads().setLocation(e)
}
}
}),
define("managers/client-storage", ["jquery", "utils/cookie"], function(e, t) {
function n(e) {
var n = null;
return n = !r() || o.forceCookies || e ? t.read(o.dataNamespace + (e ? o.sessionSuffix : o.permanentSuffix)) || null : localStorage.getItem(o.dataNamespace) || null,
JSON.parse(n) || {}
}
function i(e, n) {
var i = JSON.stringify(e);
!r() || o.forceCookies || n ? n ? t.write(o.dataNamespace + o.sessionSuffix, i) : t.write(o.dataNamespace + o.permanentSuffix, i, {
expires: 365
}) : localStorage.setItem(o.dataNamespace, i)
}
function r() {
var e = !1;
if ("undefined" != typeof Storage)
try {
localStorage.setItem("test", 0),
localStorage.removeItem("test"),
e = !0
} catch (e) {}
return e
}
var o = {
dataNamespace: "cnetSettings",
forceCookies: !1,
permanentSuffix: "Permanent",
sessionSuffix: "Session"
};
return {
init: function(t) {
e.extend(!0, o, t)
},
read: function(e, t) {
return t = t || !1,
n(t)[e]
},
write: function(e, t, r) {
r = r || !1;
var o = n(r);
o[e] = t,
i(o, r)
},
erase: function(e, t) {
t = t || !1;
var r = n(t);
delete r[e],
i(r, t)
}
}
}),
window.Modernizr = function(e, t, n) {
function i(e, t) {
return typeof e === t
}
var r, o, a = {}, s = t.documentElement, l = "modernizr", d = t.createElement(l), c = d.style, u = " -webkit- -moz- -o- -ms- ".split(" "), p = {}, f = [], g = f.slice, h = function(e, n, i, r) {
var o, a, d, c, u = t.createElement("div"), p = t.body, f = p || t.createElement("body");
if (parseInt(i, 10))
for (; i--; )
d = t.createElement("div"),
d.id = r ? r[i] : l + (i + 1),
u.appendChild(d);
return o = ["&#173;", '<style id="s', l, '">', e, "</style>"].join(""),
u.id = l,
(p ? u : f).innerHTML += o,
f.appendChild(u),
p || (f.style.background = "",
f.style.overflow = "hidden",
c = s.style.overflow,
s.style.overflow = "hidden",
s.appendChild(f)),
a = n(u, e),
p ? u.parentNode.removeChild(u) : (f.parentNode.removeChild(f),
s.style.overflow = c),
!!a
}, m = {}.hasOwnProperty;
o = i(m, "undefined") || i(m.call, "undefined") ? function(e, t) {
return t in e && i(e.constructor.prototype[t], "undefined")
}
: function(e, t) {
return m.call(e, t)
}
,
Function.prototype.bind || (Function.prototype.bind = function(e) {
var t = this;
if ("function" != typeof t)
throw new TypeError;
var n = g.call(arguments, 1)
, i = function() {
if (this instanceof i) {
var r = function() {};
r.prototype = t.prototype;
var o = new r
, a = t.apply(o, n.concat(g.call(arguments)));
return Object(a) === a ? a : o
}
return t.apply(e, n.concat(g.call(arguments)))
};
return i
}
),
p.touch = function() {
var n;
return "ontouchstart"in e || e.DocumentTouch && t instanceof DocumentTouch ? n = !0 : h(["@media (", u.join("touch-enabled),("), l, ")", "{#modernizr{top:9px;position:absolute}}"].join(""), function(e) {
n = 9 === e.offsetTop
}),
n
}
;
for (var y in p)
o(p, y) && (r = y.toLowerCase(),
a[r] = p[y](),
f.push((a[r] ? "" : "no-") + r));
return a.addTest = function(e, t) {
if ("object" == typeof e)
for (var n in e)
o(e, n) && a.addTest(n, e[n]);
else {
if (e = e.toLowerCase(),
void 0 !== a[e])
return a;
t = "function" == typeof t ? t() : t,
"undefined" != typeof enableClasses && enableClasses && (s.className += " " + (t ? "" : "no-") + e),
a[e] = t
}
return a
}
,
function(e) {
c.cssText = ""
}(),
d = null,
a._version = "2.6.2",
a._prefixes = u,
a.testStyles = h,
a
}(this, this.document),
define("libs/modernizr.custom-2.6.2", function() {}),
define("managers/device", ["jquery", "version!fly/managers/debug", "version!libs/modernizr.custom"], function(e, t) {
t = t.init("device");
var n = {
desktop: "desktop",
mobile: "mobile"
}
, i = {
type: "desktop"
};
return {
init: function(t) {
i.type = t;
var n = e("body");
Modernizr.touch ? n.addClass("touch-enabled") : n.addClass("touch-disabled")
},
getIosVersion: function() {
var e = navigator.userAgent.match(/(iPhone|iPad).* OS ([0-9_]+)/i);
return e && 3 === e.length && "string" == typeof e[2] ? parseFloat(e[2].replace(/_/g, ".")) : -1
},
getType: function() {
return i.type
},
isDesktop: function() {
return i.type === n.desktop
},
isMobile: function() {
return i.type === n.mobile
},
isAndroid: function() {
return navigator.userAgent.match(/Android/i)
},
isKindle: function() {
return navigator.userAgent.match(/Kindle/i) || navigator.userAgent.match(/Silk/i)
},
isBlackBerry: function() {
return navigator.userAgent.match(/BB10/i) && navigator.userAgent.match(/Mobile/i)
},
isWinPhone: function() {
return navigator.userAgent.match(/Windows Phone/i)
},
isIOs: function() {
return !(!this.isIPhone() && !this.isIPad())
},
isIPhone: function() {
return navigator.userAgent.match(/iPhone/i)
},
isIPad: function() {
return navigator.userAgent.match(/iPad/i)
},
isChromeIos: function() {
return !!navigator.userAgent.match(/CriOS/i)
},
isDesktopUserAgent: function() {
return !(this.isAndroid() || this.isKindle() || this.isBlackBerry() || this.isWinPhone() || this.isIPhone() || this.isIPad())
},
isMobileUserAgent: function() {
return this.isAndroid() || this.isKindle() || this.isBlackBerry() || this.isWinPhone()
},
getClickType: function() {
return Modernizr.touch ? "tap" : "click"
},
getImmediateClickType: function() {
return Modernizr.touch ? "touchstart" : "click"
}
}
}),
function(e) {
"use strict";
void 0 === e && (e = {}),
void 0 === e.performance ? e.performance = {} : "performance"in e && e.performance && e.performance.setResourceTimingBufferSize && performance.setResourceTimingBufferSize(400),
e._perfRefForUserTimingPolyfill = e.performance,
e.performance.userTimingJsNow = !1,
e.performance.userTimingJsNowPrefixed = !1,
e.performance.userTimingJsUserTiming = !1,
e.performance.userTimingJsUserTimingPrefixed = !1,
e.performance.userTimingJsPerformanceTimeline = !1,
e.performance.userTimingJsPerformanceTimelinePrefixed = !1;
var t, n, i = [], r = [], o = null;
if ("function" != typeof e.performance.now) {
for (e.performance.userTimingJsNow = !0,
r = ["webkitNow", "msNow", "mozNow"],
t = 0; t < r.length; t++)
if ("function" == typeof e.performance[r[t]]) {
e.performance.now = e.performance[r[t]],
e.performance.userTimingJsNowPrefixed = !0;
break
}
var a = +new Date;
e.performance.timing && e.performance.timing.navigationStart && (a = e.performance.timing.navigationStart),
"function" != typeof e.performance.now && (Date.now ? e.performance.now = function() {
return Date.now() - a
}
: e.performance.now = function() {
return +new Date - a
}
)
}
var s = function() {}
, l = function() {}
, d = []
, c = !1
, u = !1;
if ("function" != typeof e.performance.getEntries || "function" != typeof e.performance.mark) {
for ("function" == typeof e.performance.getEntries && "function" != typeof e.performance.mark && (u = !0),
e.performance.userTimingJsPerformanceTimeline = !0,
i = ["webkit", "moz"],
r = ["getEntries", "getEntriesByName", "getEntriesByType"],
t = 0; t < r.length; t++)
for (n = 0; n < i.length; n++)
o = i[n] + r[t].substr(0, 1).toUpperCase() + r[t].substr(1),
"function" == typeof e.performance[o] && (e.performance[r[t]] = e.performance[o],
e.performance.userTimingJsPerformanceTimelinePrefixed = !0);
s = function(e) {
d.push(e),
"measure" === e.entryType && (c = !0)
}
;
var p = function() {
c && (d.sort(function(e, t) {
return e.startTime - t.startTime
}),
c = !1)
};
if (l = function(e, n) {
for (t = 0; t < d.length; )
d[t].entryType !== e || void 0 !== n && d[t].name !== n ? t++ : d.splice(t, 1)
}
,
"function" != typeof e.performance.getEntries || u) {
var f = e.performance.getEntries;
e.performance.getEntries = function() {
p();
var t = d.slice(0);
return u && f && (Array.prototype.push.apply(t, f.call(e.performance)),
t.sort(function(e, t) {
return e.startTime - t.startTime
})),
t
}
}
if ("function" != typeof e.performance.getEntriesByType || u) {
var g = e.performance.getEntriesByType;
e.performance.getEntriesByType = function(n) {
if (void 0 === n || "mark" !== n && "measure" !== n)
return u && g ? g.call(e.performance, n) : [];
"measure" === n && p();
var i = [];
for (t = 0; t < d.length; t++)
d[t].entryType === n && i.push(d[t]);
return i
}
}
if ("function" != typeof e.performance.getEntriesByName || u) {
var h = e.performance.getEntriesByName;
e.performance.getEntriesByName = function(n, i) {
if (i && "mark" !== i && "measure" !== i)
return u && h ? h.call(e.performance, n, i) : [];
void 0 !== i && "measure" === i && p();
var r = [];
for (t = 0; t < d.length; t++)
void 0 !== i && d[t].entryType !== i || d[t].name === n && r.push(d[t]);
return u && h && (Array.prototype.push.apply(r, h.call(e.performance, n, i)),
r.sort(function(e, t) {
return e.startTime - t.startTime
})),
r
}
}
}
if ("function" != typeof e.performance.mark) {
for (e.performance.userTimingJsUserTiming = !0,
i = ["webkit", "moz", "ms"],
r = ["mark", "measure", "clearMarks", "clearMeasures"],
t = 0; t < r.length; t++)
for (n = 0; n < i.length; n++)
o = i[n] + r[t].substr(0, 1).toUpperCase() + r[t].substr(1),
"function" == typeof e.performance[o] && (e.performance[r[t]] = e.performance[o],
e.performance.userTimingJsUserTimingPrefixed = !0);
var m = {};
"function" != typeof e.performance.mark && (e.performance.mark = function(t) {
var n = e.performance.now();
if (void 0 === t)
throw new SyntaxError("Mark name must be specified");
if (e.performance.timing && t in e.performance.timing)
throw new SyntaxError("Mark name is not allowed");
m[t] || (m[t] = []),
m[t].push(n),
s({
entryType: "mark",
name: t,
startTime: n,
duration: 0
})
}
),
"function" != typeof e.performance.clearMarks && (e.performance.clearMarks = function(e) {
e ? m[e] = [] : m = {},
l("mark", e)
}
),
"function" != typeof e.performance.measure && (e.performance.measure = function(t, n, i) {
var r = e.performance.now();
if (void 0 === t)
throw new SyntaxError("Measure must be specified");
if (!n)
return void s({
entryType: "measure",
name: t,
startTime: 0,
duration: r
});
var o = 0;
if (e.performance.timing && n in e.performance.timing) {
if ("navigationStart" !== n && 0 === e.performance.timing[n])
throw new Error(n + " has a timing of 0");
o = e.performance.timing[n] - e.performance.timing.navigationStart
} else {
if (!(n in m))
throw new Error(n + " mark not found");
o = m[n][m[n].length - 1]
}
var a = r;
if (i)
if (a = 0,
e.performance.timing && i in e.performance.timing) {
if ("navigationStart" !== i && 0 === e.performance.timing[i])
throw new Error(i + " has a timing of 0");
a = e.performance.timing[i] - e.performance.timing.navigationStart
} else {
if (!(i in m))
throw new Error(i + " mark not found");
a = m[i][m[i].length - 1]
}
s({
entryType: "measure",
name: t,
startTime: o,
duration: a - o
})
}
),
"function" != typeof e.performance.clearMeasures && (e.performance.clearMeasures = function(e) {
l("measure", e)
}
)
}
"undefined" != typeof define && define.amd ? define("libs/usertiming-0.1.6", [], function() {
return e.performance
}) : "undefined" != typeof module && void 0 !== module.exports && (module.exports = e.performance)
}("undefined" != typeof window ? window : void 0),
define("utils/function-natives", ["version!libs/usertiming"], function() {
Function.prototype.bind || (Function.prototype.bind = function(e) {
var t = this
, n = arguments.length > 1 ? arguments.slice(1) : null
, i = function() {}
, r = function() {
var o = e
, a = arguments.length;
this instanceof r && (i.prototype = t.prototype,
o = new i);
var s = n || a ? t.apply(o, n && a ? n.concat(arguments.slice()) : n || arguments) : t.call(o);
return o == e ? s : o
};
return r
}
),
Array.prototype.find || (Array.prototype.find = function(e) {
if (null === this)
throw new TypeError("Array.prototype.find called on null or undefined");
if ("function" != typeof e)
throw new TypeError("predicate must be a function");
for (var t, n = Object(this), i = n.length >>> 0, r = arguments[1], o = 0; o < i; o++)
if (t = n[o],
e.call(r, t, o, n))
return t
}
)
}),
define("components/ad-controller", ["jquery", "version!fly/managers/debug", "version!fly/managers/components", "utils/cookie", "utils/date", "managers/edition", "version!fly/managers/gpt", "managers/page-vars", "managers/global-functions", "version!fly/utils/string-helper", "utils/targeting-helper", "version!fly/utils/url-helper", "managers/client-storage", "managers/device", "managers/mpulse", "utils/ad-repositioner", "version!fly/components/base", "utils/function-natives"], function(e, t, n, i, r, o, a, s, l, d, c, u, p, f, g, h) {
t = t.init("adController"),
e.widget("cnet.adController", e.fly.base, {
options: {
adCookieName: "cnet_ad",
numOfSubsessions: 6,
pageViewCookieName: "pv"
},
adsLoaded: !1,
adTagLoaded: !1,
postAdsLoaded: !1,
adLoadCount: 0,
globalCallbacks: {
blankAdCallback: function(n, i, r) {
t.log("blank ad - w: ", n, " h: ", i),
"nav" === r && (t.log("blank nav ad present"),
adDiv = e('[data-ad="nav-ad"]'),
adDiv.hide()),
271 == i && 271 == n && "top" == r && (t.log("blank replay ad present"),
adDiv = e(".fullListing .ad-replay-square-top"),
adDiv.hide(),
adDiv.removeClass("col-3"),
e("div[data-replay-ad=replay-square-top] .third").show(),
window.replayBlankFlag = !0),
11 == i && 501 == n && (t.log("blank sponsored_search_top ad present"),
e("#carFinderMakesEtcTxt").css("visibility", "visible"),
e("#carFinderModelEtcTxt").css("visibility", "visible"),
e("#suggestedSearchItems").css("visibility", "visible"))
}
},
gptCallbacks: {
dealsTileCallback: function(t, n) {
e("#" + t).addClass("ready")
},
dynamicTextLinkCallback: function(t, n) {
e("#" + t).addClass("ready")
},
flexLeaderPlusIncontentBottomCallback: function(t, n) {
var i = e("#" + t);
n.size && n.size.length >= 2 && i.addClass("adSize-" + n.size[0] + "x" + n.size[1])
},
hptoCallback: function(e, t) {
this._captureAdRender(e, t, "hpto")
},
inlineProductCarouselTopCallback: function(i, r) {
if (n.process(e("#" + i)),
"product_main" == s.tracking.data.pageType)
try {
s.ads.data.gpt.adConfig.adUnits.inlineProductCarouselTop.delayLoad = !0
} catch (e) {
t.error("Failed to delay incontent ad loading.", e)
}
},
intromercialCallback: function(e, t) {
this._captureAdRender(e, t, "intromercial")
},
leaderMiddleCallback: function(t, n) {
var i = e("#" + t);
if (("front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand || "collection_door" === s.ads.data.gpt.targeting.ptype && "cnet" == s.tracking.data.brand && i.closest(".featureLatest").length > 0) && "none" !== i.css("display")) {
var r = e("[data-component*=loadMore]").loadMore("option");
r.data.limit = r.data.limit - 1,
e("[data-component*=loadMore]").loadMore("option", r)
}
},
leaderPlusMantleCallback: function(t, n) {
this._captureAdRender(t, n, "leaderPlusMantle"),
e(".ad-leader-plus-mantle").css("margin", "20px auto")
},
leaderTopCallback: function(n, i) {
if ("gallery" === s.tracking.data.testName && "control" !== s.tracking.data.testGroup && i.size && i.size.length >= 2) {
var r = 66 === i.size[1] ? "shortLeader" : "tallLeader";
e("body").addClass(r)
}
this._captureAdRender(n, i, "leaderTop"),
t.log("leaderTop callback"),
e(window).resize()
},
leaderboardTopPlusCallback: function(e, t) {
this._captureAdRender(e, t, "leaderPlusTop")
},
mobileBannerCallback: function(e, t) {
this._captureAdRender(e, t, "mobileBanner")
},
mobileReplayWideInc: function(e, t) {
this._captureAdRender(e, t, "mobileReplayWideInc")
},
mobileReplayWidePlusCallBack: function(t, n) {
"none" !== e("#" + t).css("display") && "front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && e(".featureLatest.reviews .last .tileBlock").hide()
},
mobileSponsoredLogoCallback: function(t, n) {
e("#" + t).addClass("ready")
},
mpuBottomCallback: function(e, t) {
this._captureAdRender(e, t, "mpuBottom")
},
mpuTopCallback: function(e, t) {
this._captureAdRender(e, t, "mpuTop")
},
mpuPlusTopCallback: function(e, t) {
this._captureAdRender(e, t, "mpuPlusTop")
},
mpuMiddleCallback: function(t, n) {
this._captureAdRender(t, n, "mpuMiddle");
var i = e("#autoManufacturerListing #" + t).parent();
if (i.length) {
var r = i.index() + 1;
r % 3 == 1 ? ($prevItem = i.prev(),
$prevItemClone = $prevItem.clone(),
i.after($prevItemClone),
$prevItem.remove()) : r % 3 == 2 && ($nextItem = i.next(),
$nextItemClone = $nextItem.clone(),
i.before($nextItemClone),
$nextItem.remove())
}
var i = e("#topic-grid-container #" + t).parent();
if (i.length) {
var r = i.index() + 1;
if (r % 4 == 1)
$prevItem = i.prev(),
$prevItemClone = $prevItem.clone(),
i.after($prevItemClone),
$prevItem.remove();
else if (r % 4 == 2)
for (var o = 0; o < 2; o++)
$prevItem = i.prev(),
$prevItemClone = $prevItem.clone(),
i.after($prevItemClone),
$prevItem.remove();
else
r % 4 == 3 && ($nextItem = i.next(),
$nextItemClone = $nextItem.clone(),
i.before($nextItemClone),
$nextItem.remove())
}
var a = e("#" + t);
if (("front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand || "collection_door" === s.ads.data.gpt.targeting.ptype && "cnet" == s.tracking.data.brand && a.closest(".featureLatest").length > 0) && "none" !== a.css("display")) {
var l = e("[data-component*=loadMore]").loadMore("option");
l.data.limit = l.data.limit + 1,
e("[data-component*=loadMore]").loadMore("option", l)
}
},
mpuMiddle2Callback: function(e, t) {
this._captureAdRender(e, t, "mpuMiddle2")
},
mpuMiddle3Callback: function(e, t) {
this._captureAdRender(e, t, "mpuMiddle3")
},
nativeCompareCallback: function(t, n) {
var i = e("#" + t);
"none" !== i.css("display") && e(".scoreCard .topProductsComponent .topProduct").length > 3 ? e(".scoreCard .topProductsComponent .topProduct:last-of-type").hide() : "none" !== i.css("display") && e(".relatedProducts .topProductsComponent .topProduct.last").length > 0 && e(".relatedProducts .topProductsComponent .topProduct.last").hide()
},
nativeThisweekoncnetCallback: function(t, n) {
var i = e("#" + t);
"none" !== i.css("display") && i.parent().find(".col-2.third").hide(),
this._captureAdRender(t, n, "nativeThisweekoncnet")
},
nativeTocCallBack: function(t, n) {
var i = e("#" + t);
"none" !== i.css("display") && e(".tocNav ul").css("height", "calc(100% - " + i.outerHeight() + "px)")
},
replaySquareCallBack: function(n, i) {
var r = e(".fullListing .ad-replay-square-top");
if (e(".fullListing .riverPost.third").length && !window.replayBlankFlag) {
t.log("ADS: replay ad present");
var o = r.attr("class");
r.removeClass(),
r.addClass("col-3 riverPost " + o),
"front_door" === s.ads.data.gpt.targeting.ptype && "cnet" == s.tracking.data.slug ? e("div[data-replay-ad=replay-square-top] .third").hide() : e("div[data-replay-ad=replay-square-top] .third").addClass("wide"),
delete window.replayBlankFlag
}
},
replayWideTopCallback: function(t, n) {
var i = e("#" + t);
"none" !== i.css("display") ? (e(".item:last-child", i.closest(".fullWidthSixAssets")).hide(),
"front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && (i.closest(".featureLatest").find(".tileBlock").last().remove(),
this._updateLoadmoreLastAsset(),
this._updateLoadmoreOffset(-1)),
"section_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && "news" == s.ads.data.gpt.targeting.section && (i.closest(".autoNewsRiver").find(".tileBlock").last().remove(),
this._updateLoadmoreOffset(-1)),
"collection_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && (i.closest(".adWrap").show(),
i.closest(".featureLatest").find(".tileBlock").last().remove(),
this._updateLoadmoreLastAsset(),
this._updateLoadmoreOffset(-1))) : i.parent().hasClass("slide") && i.parent().attr("data-item", "")
},
replayWideBottomCallback: function(t, n) {
var i = e("#" + t);
if ("none" == i.css("display") && (i.parent().hasClass("slide") && i.parent().attr("data-item", ""),
i.parent().hasClass("bestListNativeWrapper") && i.parent().remove(),
"front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand && i.closest(".slide").hide()),
"none" !== i.css("display") && "front_door" === s.ads.data.gpt.targeting.ptype && "roadshow" == s.tracking.data.brand) {
var r = i.closest(".carousel");
r.find(".canvas").first().prepend(r.find(".slide").last()),
r.hasClass("even") ? r.removeClass("even").addClass("odd") : r.removeClass("odd").addClass("even")
}
},
sharebarCallback: function(e, t) {
this._captureAdRender(e, t, "socialLogoBottom")
},
sponsoredLogoTopCallback: function(t, n) {
e("#" + t).addClass("ready")
},
videoThumbnailTopCallback: function(n, i) {
var r = e("#" + n);
"none" !== r.css("display") && (r.siblings(".videoWrapper").addClass("videoThumbnailAd"),
e(window).trigger("resize"),
e(".videoPromoContainer .sponsoredContentHeader").css("display", "block")),
r.length > 0 && "none" === r.css("display") ? (r.parent(".video").remove(),
r.next(".altContent").removeClass("altContent"),
r.parent().addClass("ad-hidden"),
s.ads.data.gpt.adDivIds = e.grep(s.ads.data.gpt.adDivIds, function(e) {
return e !== n
}),
t.info("Removing ad " + n + " via callback - no creative scheduled.")) : r.parent().removeClass("showcase-video"),
e("#video-gallery").length > 0 && 0 == e("body.auto").length && r.parent().siblings(":last").remove()
},
omnibarTopCallback: function(t, n) {
this._captureAdRender(t, n, "omnibarTop");
var i = s.ads.data.gpt.adConfig.adUnits.omnibarTop
, r = e("#" + t)
, o = !1;
"none" !== r.css("display") && (document.body.className += " omnibar");
var a = function(e) {
i.crawlAdPresent = e,
r.trigger("adContentModified")
}
, l = setInterval(function() {
if (r.length > 0) {
var e = r.children("div").children("div");
e.length > 0 ? (o = "fixed" == e.css("position") && "0px" == e.css("bottom"),
i.crawlAdPresent !== o && a(o)) : i.crawlAdPresent && (a(!1),
clearInterval(l))
} else
a(!1),
clearInterval(l)
}, 500)
},
flexIncontentAdPlusBillboardTopCallback: function(t, n) {
var i = e("#" + t);
i.hasClass("full-width-ad") || (e(window).on("resize", function() {
i.width(window.document.body.clientWidth);
var e = i.offset();
e.left = 0,
i.offset(e)
}),
e(window).trigger("resize"))
}
},
_create: function() {
var n = this;
l.gdprConsentCallback("ad_controller_create", function() {
n._setup(),
n._setupPageSpecificConfigs(),
n._setupCallbacks(),
n.setupTargeting();
try {
a.init(s.ads.data.gpt)
} catch (e) {
t.error("GPT Manager threw an exception:", e)
}
if (n._repositionAds(),
!n.adsLoaded && !n.postAdsLoaded) {
var i = 0 < e("[data-component=videoPlayer]").length
, r = !("off" === u.getParam("autoplayEnabled") || "off" === p.read("autoplayEnabled"));
if ("article" === s.pageType && "desktop" === s.device && i && r) {
var o = s.tracking.data.testGroup
, l = s.tracking.data.testName
, c = ["dynamic-text-link-top", "dynamic-text-link-bottom", "inpage-video-top"];
"ad_priority" === l && "control" !== o && c.push("nav-ad", "intromercial", "leader-top", "mpu-plus-top", "flex-leader-plus-incontent-bottom", "dynamic-text-link-top", "dynamic-text-link-bottom"),
e.each(c, function(e, t) {
var n = d.toCamelCase(t, "-");
s.ads.data.gpt.adConfig.adUnits[n] && (s.ads.data.gpt.adConfig.adUnits[n].delayLoad = !0)
}),
t.log("Load non-delayed ads immediately"),
n.loadImproved(),
n.adsLoaded = !0;
var f = function() {
n.refreshImproved({
containerId: s.ads.data.gpt.containerId,
adData: s.ads.data,
adUnitNames: c,
gptOptions: {
changeCorrelator: !1
},
reset: !1
}),
n.postAdsLoaded = !0
};
if (s.video && s.video.performance && (s.video.performance.adstart || s.video.performance.contentstart))
t.log("Load delayed ads; video player already loaded"),
f();
else {
var g = "cnet_video.adstart cnet_video.contentstart cnet_video.error";
"ad_priority" === l && "a" === o && (g = "cnet_video.playerloaded cnet_video.error"),
e(window).on(g, function() {
n.postAdsLoaded || (t.log("Load delayed ads on " + g),
t.log("Delayed ads", c),
f())
})
}
} else
t.info("Load display ads regardless of cnet_video"),
n.loadImproved(),
n.adsLoaded = !0
}
})
},
_setupPageSpecificConfigs: function() {
var n = this;
if ("article" == s.tracking.data.pageType)
try {
"split" == u.getParam("ftag") ? (t.info("Setup second batch of ads for article page"),
s.ads.data.gpt.adConfig.adUnits.leaderBottom.delayLoad = !0,
s.ads.data.gpt.adConfig.adUnits.mpuBottom.delayLoad = !0,
s.ads.data.gpt.adConfig.adUnits.dynamicTextLinkTop.delayLoad = !0,
s.ads.data.gpt.adConfig.adUnits.infoBoardTop.delayLoad = !0,
s.ads.data.gpt.adConfig.adUnits.omnibarTop.delayLoad = !0) : t.log("not the right ftag for article ad load split")
} catch (e) {
t.error("Failed to delay batch ads loading.", e)
}
if ("section_door" === s.ads.data.gpt.targeting.ptype && "news" === s.ads.data.gpt.targeting.section)
try {
s.ads.data.gpt.adConfig.adUnits.leaderPlusTop.delayLoad = !0
} catch (e) {
t.error("Failed to delay leaderboard ad loading.", e)
}
if ("video_page" === s.pageType && "mobile" === s.device && f.getIosVersion() >= 10 && !f.isChromeIos())
try {
t.log("Delay display ads on mobile video_page");
var i = ["hpto", "mobile-banner", "mobile-mpu"];
s.ads.data.gpt.adConfig.adUnits.hpto.delayLoad = !0,
s.ads.data.gpt.adConfig.adUnits.mobileBanner.delayLoad = !0,
s.ads.data.gpt.adConfig.adUnits.mobileMpu.delayLoad = !0;
var r = {
containerId: s.ads.data.gpt.containerId,
adData: s.ads.data,
adUnitNames: i,
gptOptions: {
changeCorrelator: !1
},
reset: !1
};
s.video && s.video.performance && (s.video.performance.adstart || s.video.performance.contentstart) ? (t.log("Mobile video page: Load delayed ads; video player already loaded"),
n.refreshImproved(r)) : e(window).one("cnet_video.adstart cnet_video.contentstart", function() {
t.log("Mobile video page: Load delayed ads on cnet_video.adstart cnet_video.contentstart"),
n.refreshImproved(r)
})
} catch (e) {
t.error("Failed to delay display ads on mobile video_page", e)
}
},
_setupCallbacks: function() {
var n = this;
e.each(this.globalCallbacks, function(e, t) {
window[e] = t.bind(n)
}),
e.each(this.gptCallbacks, function(e, i) {
try {
a.registerCallback(e, i.bind(n))
} catch (e) {
t.error("GPT Manager threw an exception:", e)
}
}),
window.CbsMoatListener = this.moatCallbackForMpulse.bind(n)
},
moatCallbackForMpulse: function(e) {
try {
"Impression Analyzed" === e.event && 1 === this.adLoadCount && (void 0 === window.performance.getEntriesByName("ad_fully_loaded")[0] && window.performance.mark("cnet_ad_fully_loaded"),
g.sendBeacon("ad_fully_loaded", window.performance.now()))
} catch (e) {
t.error("moatCallbackForMpulse exception:", e)
}
},
_setMoatCallbackTargeting: function() {
var t = e("[data-ad=leader-top], [data-ad=leader-plus-top], [data-ad=leader-plus-incontent-top], [data-ad=leader-plus-mantle], [data-ad=mobile-banner-top], [data-ad=mobile-banner], [data-ad=mobile-banner-plus]")
, n = (t.first().data("ad") || "").replace(/-([a-z])/g, function(e) {
return e[1].toUpperCase()
})
, i = s.ads.data.gpt.adConfig.adUnits[n];
i && "article" === s.tracking.data.pageType && (i.customTargeting ? i.customTargeting.moatimp = 1 : i.customTargeting = {
moatimp: 1
})
},
setupTargeting: function() {
var t = {
region: this._getAdRegion(),
targeting: {
session: this._selectSessionGroup(),
subses: this._selectSubsessionGroup(),
vguid: s.guid
}
};
s.ads.data.gpt = e.extend(!0, s.ads.data.gpt, t, this._getCookieTargeting(t), this._getUserTargeting(), this._getQueryTargeting()),
this._setMoatCallbackTargeting(),
this._setupAdSuppression()
},
_getAdRegion: function() {
var e = s.ads.data.gpt.adConfig
, t = e.defaultRegion
, n = i.read("fly_geo") ? JSON.parse(i.read("fly_geo")) : "";
if (n && n.countryCode)
for (var r = e.regions, o = 0; o < r.length; o++)
for (var a = r[o], l = 0; l < a.countries.length; l++)
a.countries[l] === n.countryCode && (t = a.region);
return t
},
_selectSessionGroup: function() {
var e = "abcd";
return e.charAt(Math.floor(Math.random() * e.length))
},
_selectSubsessionGroup: function() {
return Math.ceil(Math.random() * this.options.numOfSubsessions).toString()
},
_getCookieTargeting: function(e) {
var n = i.read(this.options.adCookieName) ? JSON.parse(i.read(this.options.adCookieName)) : null
, s = i.read(this.options.adCookieName + "_ftag")
, l = i.read("bm_last_load_status") ? i.read("bm_last_load_status") : null
, d = i.read("bm_cnet") ? i.read("bm_cnet") : null
, c = null
, u = null;
if (i.read("il_geo"))
try {
u = JSON.parse(i.read("il_geo"))
} catch (e) {
t.error("il_geo cookie has incorrect format:", e)
}
var p = i.read(this.options.pageViewCookieName) || 0;
window.I10C && window.I10C.MorphState && (c = window.I10C.MorphState);
var f = {
region: null,
targeting: {
session: null,
subses: null
}
};
n || (n = {
region: e.region,
session: e.targeting.session,
subSession: e.targeting.subses,
type: "gpt"
},
i.write(this.options.adCookieName, JSON.stringify(n))),
n && (f.region = o.isEspanol() ? "es" : n.region,
f.targeting.session = n.session,
f.targeting.subses = n.subSession),
s && (f.targeting.ftag = s),
l && (f.targeting.st = [],
l = "BLOCKING" == l ? "1" : "0",
f.targeting.st.push(l)),
"unblocked" === c && u && (f.targeting.geo = u.country_code ? "il_" + u.country_code.toLowerCase() : null,
f.targeting.loc = "il_" + u.dma_code,
a.setLocation(u.postal_code + ", " + u.country_code)),
d && (f.targeting.akb = d.replace("-", ",")),
p++,
f.targeting.pv = "" + p;
var g = new Date
, h = Date.UTC(g.getUTCFullYear(), g.getUTCMonth(), g.getUTCDate(), r.isEDT(g) ? 4 : 5);
return h += h > g.getTime() ? 0 : 864e5,
i.write(this.options.pageViewCookieName, p, {
expires: new Date(h)
}),
f
},
_getUserTargeting: function() {
var e = c.getAdUserGroups();
return e.length > 0 ? {
targeting: {
userGroup: e
}
} : null
},
_getQueryTargeting: function() {
var t = this
, n = {
slotVars: {},
targeting: {}
};
return e.each(u.getAllParams(), function(e, r) {
var o = e.match(/adTargeting_(.+)/)
, a = e.match(/ad(.+)/);
if (o && o[1])
n.targeting[o[1]] = r;
else if ("adNetwork" === e)
n.slotVars.network = r;
else if (a && a[1]) {
var s = a[1].toLowerCase();
"region" === s ? n[s] = r : n.targeting[s] = r
} else
"ftag" === e ? (n.targeting.ftag = r,
i.write(t.options.adCookieName + "_ftag", r)) : "vndid" === e && (n.targeting.vndid = r)
}),
n
},
removeAds: function(e, n, i, r) {
if (r) {
t.info("Page is requesting to permanently destroy ads for container " + e, n, i);
try {
a.destroyAdSlots(e, n, i)
} catch (e) {
t.error("GPT Manager threw an exception:", e)
}
} else {
t.info("Page is requesting to clear/reset ads for container " + e, n, i);
try {
a.clearAdSlots(e, n, i)
} catch (e) {
t.error("GPT Manager threw an exception:", e)
}
}
},
_monitorPerformance: function() {
var n;
this.adLoadCount++,
s.ads.timers = s.ads.timers || {};
try {
window.performance.mark("cnet_fetch_ads"),
n = Math.round(window.performance.now()),
s.ads.timers.fetchAds = {
timer: n
},
s.tracking.data.fetchAdsTimer = n,
t.info("fetch_ads fired at: " + n + "ms")
} catch (e) {
t.error("fetch_ads performance timers failed")
}
e(window).on("gptMgr.headerBiddingDisplayStart, gptMgr.headerBiddingRefreshStart", function(e) {
try {
s.ads.timers.headerBidding = s.ads.timers.headerBidding || {};
var n = s.ads.timers.headerBidding;
e.data && e.data.adDivId && (n[e.data.adDivId] = {}),
window.performance.mark("cnet_header_bidding_init"),
n.init = Math.round(window.performance.now()),
t.info("header_bidding_init fired at: " + n.init + "ms")
} catch (e) {
t.error("header_bidding_init performance timers failed")
}
}),
e(window).on("gptMgr.headerBiddingDisplayEnd, gptMgr.headerBiddingRefreshEnd", function(e) {
s.ads.timers.headerBidding = s.ads.timers.headerBidding || {};
var i = s.ads.timers.headerBidding;
e.data && e.data.adDivId && (i[e.data.adDivId] = {});
try {
window.performance.mark("cnet_header_bidding_complete"),
n = Math.round(window.performance.now()),
s.ads.timers.headerBidding.complete = n,
t.info("header_bidding_complete fired at: " + n + "ms")
} catch (e) {
t.error("header_bidding_complete performance timers failed")
}
})
},
_repositionAds: function() {
h.reposition({
pagetype: s.tracking.data.pageType,
section: s.tracking.data.siteSection,
edition: "",
collection: "",
slug: "",
topic: s.tracking.data.topicId,
articleType: s.tracking.data.articleType,
brand: s.tracking.data.brand
})
},
_captureAdRender: function(n, i, r) {
try {
window.performance.mark("cnet_ad_" + r);
var o = Math.round(window.performance.now());
if (t.info("Ad Timer: " + r + " (" + i.creativeId + ") " + o),
s.ads.timers = s.ads.timers || {},
s.ads.timers[r] = {
creativeId: i.creativeId,
timer: o
},
!this.adTagLoaded) {
var a = ["leaderTop", "leaderPlusTop", "leaderPlusIncontentTop", "leaderPlusMantle", "mobileBannerTop", "mobileBanner", "mobileBannerPlus"]
, l = ["article"]
, d = -1 < e.inArray(s.tracking.data.pageType, l)
, c = -1 < e.inArray(r, a);
d && c && (g.sendBeacon("ad_tag_loaded", o),
this.adTagLoaded = !0)
}
} catch (e) {
t.error("Failed to fully capture ad rendering data for " + n + " (creative ID " + i.creativeId + ")", e)
}
},
_setupAdSuppression: function() {
var n = u.getParamAsArray("adSuppress");
e.isArray(n) ? (s.ads.data.gpt.suppressAds = n,
t.info("Ads suppressed via query string", n)) : "string" == typeof (n = i.read("adSuppress")) && (n = n.split(","),
s.ads.data.gpt.suppressAds = n,
t.info("Ads suppressed via cookie", n))
},
_prepareLoadOrRefresh: function(n) {
n = n || {},
n.adData && (s.ads.data = e.extend(!0, {}, n.adData),
s.ads.data.gpt.targeting.vguid = s.guid,
void 0 === s.ads.data.gpt.targeting.collection && (s.ads.data.gpt.targeting.collection = "")),
this.setupTargeting();
try {
a.init(s.ads.data.gpt),
e.each(s.ads.data.gpt.targeting, function(e, t) {
a.setTargeting(e, t)
})
} catch (e) {
t.error("GPT Manager threw an exception:", e)
}
},
loadImproved: function(e) {
var n = this;
l.gdprConsentCallback("ad_controller_load_ads", function() {
e = e || {},
n._prepareLoadOrRefresh(e),
t.info("Page is requesting to load ads."),
n._monitorPerformance();
try {
a.loadAds()
} catch (e) {
t.error("GPT Manager threw an exception:", e)
}
})
},
refreshImproved: function(e) {
var n = this;
l.gdprConsentCallback("ad_controller_refresh_ads", function() {
e = e || {},
n._prepareLoadOrRefresh(e),
t.info("Page is requesting to refresh ads for container " + e.containerId, e.adUnitNames),
n._monitorPerformance();
try {
a.refresh(e.containerId, e.adUnitNames, e.targeting, e.reset, e.allowedDivIds, e.gptOptions)
} catch (e) {
t.error("GPT Manager threw an exception:", e)
}
})
},
_updateLoadmoreOffset: function(t) {
var n, i = e("[data-component*=loadMore]");
void 0 === i.loadMore ? (n = i.data("loadMoreOptions"),
n.data.offset = n.data.offset + t,
i.data("loadMoreOptions", n)) : (n = i.loadMore("option"),
n.data.offset = n.data.offset + t,
i.loadMore("option", n))
},
_updateLoadmoreLastAsset: function() {
var t, n = e("[data-component*=loadMore]");
void 0 === n.loadMore ? (t = n.data("loadMoreOptions"),
t.data.lastAssetId = t.data.secondAssetId,
n.data("loadMoreOptions", t)) : (t = n.loadMore("option"),
t.data.lastAssetId = t.data.secondAssetId,
n.loadMore("option", t))
},
resetPosition: function(e) {
try {
a.resetPosition(e)
} catch (e) {
t.error("GPT Manager threw an exception:", e)
}
}
})
}),
define("managers/ad", ["managers/page-vars", "managers/global-functions", "utils/userAgentSniffer", "version!fly/managers/debug", "components/ad-controller"], function(e, t, n, i) {
i = i.init("adManager");
var r = null
, o = "collection_door" === e.tracking.data.pageType && $.inArray("crave", e.tracking.data.collectionName) >= 0;
return n.isBot() && o && (e.ads.enabled = !1,
i.info("Ads automatically disabled due to bot detection.")),
e.ads.enabled ? (e.services.sharethrough.enabled && t.gdprConsentCallback("script_sharethrough", function() {
require(["sharethrough"], function() {
i.info("Sharethrough framework injected successfully.")
})
}),
r = $.cnet.adController()) : i.info("Ads are disabled; controller initialization skipped."),
r
}),
define("optional", [], {
load: function(e, t, n) {
var i = function(e) {
var t = {};
return "object" == typeof console && "function" == typeof console.info && console.info("The RequireJS Optional plugin is returning the following default response for the module: " + e, t),
t
}
, r = function(e) {
n(e)
};
t([e], r, function(e) {
var n = e.requireModules && e.requireModules[0];
"object" == typeof console && "function" == typeof console.error && console.error("Failed to load RequireJS module: " + n + "; the Optional plugin is handling the exception."),
n && (requirejs.undef(n),
define(n, [], function() {
return i(n)
}),
t([n], r))
})
}
}),
define("libs/require.optional-dependency", function() {}),
define("managers/first-paint", ["jquery", "version!fly/managers/debug", "managers/mpulse", "managers/page-vars"], function(e, t, n, i) {
t = t.init("firstPaint"),
"article" === i.pageType && window.performance && (t.log("browser supports performance API"),
e(document).ready(function() {
var e = performance.getEntriesByType("paint");
e.length > 0 ? e.forEach(function(e) {
"first-paint" === e.name && n.sendBeacon("start_render", e.startTime)
}) : t.log("was not able to get paint metrics")
}))
}),
define("feature-disabled", function() {}),
require.config({
paths: {
fly: "../bundles/flyjs/js",
jquery: "../bundles/flyjs/js/libs/jquery-1.8.3",
quantum: "../../../bundles/cnetquantum/js",
optional: "libs/require.optional-dependency",
version: "../bundles/flyjs/js/libs/require.version-1.0"
},
baseUrl: "/js",
map: {
"*": {
anonc: "//dw.cbsi.com/anonc.js",
chartbeat: "//static.chartbeat.com/js/chartbeat.js",
"chartbeat-video": "//static.chartbeat.com/js/chartbeat_video.js",
"comscore-video": "//vidtech.cbsinteractive.com/uvpjs/2.8.3/lib/tracking/comscore/comscore.streaming.6.1.1.171219.min.js",
facebook: "//connect.facebook.net/en_US/all.js",
"facebook-debug": "//connect.facebook.net/en_US/all/debug.js",
"google-csa": "//www.google.com/adsense/search/async-ads.js",
"google-ima": "//s0.2mdn.net/instream/html5/ima3.js",
"google-js-api": "//apis.google.com/js/platform.js",
gpt: "//www.googletagservices.com/tag/js/gpt.js",
iris: "//ovp.iris.tv/libs/adaptive/v2/iris.adaptive.js",
"linked-in": "//platform.linkedin.com/in.js",
pinterest: "//assets.pinterest.com/js/pinit.js",
recaptcha: "//www.google.com/recaptcha/api.js?onload=loadRecaptcha&render=explicit",
sharethrough: "//native.sharethrough.com/assets/sfp.js",
tealium: "//tags.tiqcdn.com/utag/cbsi/cnetglobalsite/prod/utag.js",
twitter: "//platform.twitter.com/widgets.js",
urs: "http://cn.cbsimg.net/cnwk.1d/Aud/javascript/urs.js",
taboola: "//cdn.taboola.com/libtrc/cbsinteractive-cnet/loader.js",
"taboola-es": "//cdn.taboola.com/libtrc/cbsinteractive-cnetespaol/loader.js",
financesource: "//roadshow.financesource.com/profiles/fisource_d7/modules/custom/finance_referral/js/json2.min.js"
}
},
config: {
version: {
"fly/components/accordion": "1.0",
"fly/components/alert": "1.0",
"fly/components/base": "1.0",
"fly/components/carousel": "1.0",
"fly/components/disqus-count": "1.0",
"fly/components/dropdown": "1.0",
"fly/components/fixate": "1.0",
"fly/components/form-validate": "1.0",
"fly/components/image-gallery": "1.0",
"fly/components/iframe-messenger": "1.1",
"fly/components/load-more": "1.0",
"fly/components/load-more-scroll": "1.0",
"fly/components/loading": "1.0",
"fly/components/modal": "1.0",
"fly/components/modal-iframe": "1.0",
"fly/components/poll": "1.0",
"fly/components/social-button": "1.0",
"fly/components/social-counts": "1.0",
"fly/components/social-links": "1.0",
"fly/components/tabs": "1.0",
"fly/components/tooltip": "1.0",
"fly/components/video": "1.0",
"fly/libs/easy-xdm": "2.4.19.3",
"fly/libs/easy-xdm-cbsi": "2.4.19.3",
"fly/libs/guid": "1.0",
"fly/libs/jquery.cookie": "1.2",
"fly/libs/jquery.mobile": "1.3.0",
"fly/libs/jquery.throttle-debounce": "1.1",
"fly/libs/jquery.widget": "1.9.2",
"fly/libs/urs": "1.0",
"fly/managers/ad": "1.0",
"fly/managers/components": "1.0",
"fly/managers/cookie": "1.0",
"fly/managers/debug": "1.0",
"fly/managers/disqus": "1.0",
"fly/managers/geo": "1.0",
"fly/managers/gpt": "4.3",
"fly/managers/history": "2.0",
"fly/managers/madison": "1.0",
"fly/managers/social-authentication": "1.0",
"fly/managers/user": "1.0",
"fly/utils/data-prefix": "1.0",
"fly/utils/data-selector": "1.0",
"fly/utils/function-natives": "1.0",
"fly/utils/guid": "1.0",
"fly/utils/jquery-mobile-init": "1.0",
"fly/utils/log": "1.0",
"fly/utils/object-helper": "1.0",
"fly/utils/string-helper": "1.0",
"fly/utils/string-vars": "1.0",
"fly/utils/url-helper": "1.1",
"libs/jshashtable": "2.1",
"libs/jsonp": "2.4.0",
"libs/modernizr.custom": "2.6.2",
"libs/usertiming": "0.1.6",
"libs/jquery/addthisevent": "1.6.1",
"libs/jquery/appear": "0.3.3",
"libs/jquery/dotdotdot": "1.6.1",
"libs/jquery/flexslider": "2.1",
"libs/jquery/iframetracker": "1.1.0",
"libs/jquery/lazyload": "1.9.3",
"libs/jquery/masonry": "4.2.0",
"libs/jquery/mobile": "1.4.0a1",
"libs/jquery/numberformatter": "1.2.3",
"libs/jquery/placeholder": "0.2.4",
"libs/jquery/scrollbar": "0.2.4.custom",
"libs/jquery/tablesorter": "2.0.5",
"libs/jquery/wysibb": "1.5.1",
"libs/jquery/ui/jquery.ui.core": "1.9.2",
"libs/jquery/ui/jquery.ui.draggable": "1.9.2",
"libs/jquery/ui/jquery.ui.mouse": "1.9.2",
"libs/jquery/ui/jquery.ui.position": "1.9.2",
"libs/jquery/ui/jquery.ui.slider": "1.9.2",
"libs/jquery/ui/jquery.ui.touch-punch": "0.2.2",
"libs/twitter-fetcher": "18.0.2",
"libs/waypoints/infinite": "3.1.1",
"libs/waypoints/inview": "3.1.1",
"libs/waypoints/jquery.waypoints": "3.1.1",
"libs/waypoints/sticky": "3.1.1",
"libs/cbsi-player/uvpjs": "2.9.1"
}
}
}),
!1 === window.CnetPageVars.build && require.config({
paths: {
fly: "../../flyjs/js",
jquery: "../../flyjs/js/libs/jquery-1.8.3",
version: "../../flyjs/js/libs/require.version-1.0"
},
baseUrl: "/bundles/cnetjs/js"
}),
"https:" === ((I11C || I10C).PreLocationContextProxy)(window).locat1on.protocol && require.config({
map: {
"*": {
urs: "https://urs.cnet.com/sdk/urs.js"
}
}
}),
"dev" === window.CnetPageVars.environment && require.config({
waitSeconds: 0
}),
require(["managers/page-vars", "managers/guid", "version!fly/managers/debug", "managers/cookie", "managers/tracking", "managers/mpulse", "utils/ad-repositioner", "managers/ad", "libs/require.optional-dependency", "managers/first-paint", "feature-disabled"], function(e, t, n, i, r) {
n = n.init("main.default"),
i.init(),
r.trackPageView();
var o = ["about.desktop", "article.desktop", "buy_guide.desktop", "collection_door.desktop", "collection_door.video.desktop", "custom_showcase.desktop", "deals_page.desktop", "expando.desktop", "forum_thread.desktop", "forums_search.desktop", "front_door.desktop", "hosting_door.desktop", "hosting_list.desktop", "image_gallery.desktop", "image_gallery_list.desktop", "live_event.desktop", "product_main.desktop", "product_shop.desktop", "product_spec.desktop", "search.desktop", "search_null.desktop", "section_door.desktop", "section_door.video.desktop", "special_feature.desktop", "speed_test.desktop", "tag_door.desktop", "tag_page.desktop", "topic_best.desktop", "topic_door.desktop", "topic_list.desktop", "topic_list.video.desktop", "video_page.desktop", "video_picks.desktop", "video_share.desktop", "about.mobile", "article.mobile", "buy_guide.mobile", "collection_door.mobile", "collection_door.video.mobile", "comments_permalink.mobile", "custom_showcase.mobile", "deals_page.mobile", "expando.mobile", "forum_thread.mobile", "front_door.mobile", "hosting_door.mobile", "hosting_list.mobile", "image_gallery.mobile", "image_gallery_list.mobile", "live_event.mobile", "product_main.mobile", "product_shop.mobile", "product_spec.mobile", "search.mobile", "search_null.mobile", "section_door.mobile", "section_door.video.mobile", "special_feature.mobile", "speed_test.mobile", "tag_door.mobile", "tag_page.mobile", "topic_best.mobile", "topic_door.mobile", "topic_list.mobile", "topic_list.video.mobile", "video_page.mobile", "video_picks.mobile", "video_share.mobile"]
, a = ["article.mobile.uvpjs_upgrade.test"];
if ("article" === e.pageType && "commercial" !== e.tracking.data.siteSection && "longform" !== e.tracking.data.soastaPageType && "desktop" === e.device && -1 === ((I11C || I10C).PreLocationContextProxy)(window).locat1on.pathname.indexOf("/replay/")) {
"uvpjs_upgrade" === e.tracking.data.testName && "test" === e.tracking.data.testGroup ? require(["pages/desktop/article.uvpjs_upgrade.test"]) : require(["pages/desktop/article_video_test"])
} else
-1 !== a.indexOf(e.pageType + "." + e.device + "." + e.tracking.data.testName + "." + e.tracking.data.testGroup) ? require(["pages/" + ("mobile" === e.device ? "mobile" : "desktop") + "/" + e.pageType + "." + e.tracking.data.testName + "." + e.tracking.data.testGroup]) : -1 !== o.indexOf(e.pageType + "." + e.device) ? require(["pages/" + ("mobile" === e.device ? "mobile" : "desktop") + "/" + e.pageType]) : require(["main." + ("mobile" === e.device ? "mobile" : "desktop")])
}),
function(e) {
function t(e) {
var t = {
"bundles/cnetjs/js/feature-disabled.js": "bundles/cnetjs/js/feature-disabled-dbcc4f5d9e-rev.js",
"bundles/cnetjs/js/main.default.js": "bundles/cnetjs/js/main.default-b7cfb2a581-rev.js",
"bundles/cnetjs/js/main.desktop.js": "bundles/cnetjs/js/main.desktop-70dec936ce-rev.js",
"bundles/cnetjs/js/main.lean.desktop.js": "bundles/cnetjs/js/main.lean.desktop-f07994f143-rev.js",
"bundles/cnetjs/js/main.lean.mobile.js": "bundles/cnetjs/js/main.lean.mobile-07631c8c0d-rev.js",
"bundles/cnetjs/js/main.mobile.js": "bundles/cnetjs/js/main.mobile-08ddc0e559-rev.js",
"bundles/cnetjs/js/main.tests.js": "bundles/cnetjs/js/main.tests-949ea05dfe-rev.js",
"bundles/cnetjs/js/main.video.desktop.js": "bundles/cnetjs/js/main.video.desktop-452a44d0ae-rev.js",
"bundles/cnetjs/js/main.video.mobile.js": "bundles/cnetjs/js/main.video.mobile-7df5aa0d01-rev.js",
"bundles/cnetquantum/js/inviewElement.js": "bundles/cnetquantum/js/inviewElement-0b3b1c0201-rev.js",
"bundles/cnetquantum/js/snappyCarousel.js": "bundles/cnetquantum/js/snappyCarousel-2afd88faed-rev.js",
"bundles/cnetquantum/js/swipeAway.js": "bundles/cnetquantum/js/swipeAway-c503a74bdc-rev.js",
"bundles/cnetquantum/js/videoPlayer.js": "bundles/cnetquantum/js/videoPlayer-92706365c8-rev.js",
"bundles/cnetquantum/js/videoPlayer_upgrade.js": "bundles/cnetquantum/js/videoPlayer_upgrade-803c86d5a8-rev.js",
"bundles/cnetquantum/js/zoom.js": "bundles/cnetquantum/js/zoom-5ed2d3e438-rev.js",
"bundles/cnetvideo/js/sample.js": "bundles/cnetvideo/js/sample-d41d8cd98f-rev.js",
"js/components/ad-controller.js": "js/components/ad-controller-8e11b789ae-rev.js",
"js/components/add-this-event.js": "js/components/add-this-event-a0dcc2f8c2-rev.js",
"js/components/amazon-ad.js": "js/components/amazon-ad-2532861fb2-rev.js",
"js/components/article.js": "js/components/article-cba854c084-rev.js",
"js/components/audio-player.js": "js/components/audio-player-88fafd079a-rev.js",
"js/components/authentication.js": "js/components/authentication-364d6abc48-rev.js",
"js/components/auto-calc-iframe.js": "js/components/auto-calc-iframe-6788d58bf3-rev.js",
"js/components/auto-suggest.js": "js/components/auto-suggest-e48302bebb-rev.js",
"js/components/autoplay-controls.js": "js/components/autoplay-controls-5fd6a2e303-rev.js",
"js/components/background-video.js": "js/components/background-video-21bb6d9b86-rev.js",
"js/components/bandwidth-meter-bar.js": "js/components/bandwidth-meter-bar-3f069d6cbe-rev.js",
"js/components/best-fit-video-promo.js": "js/components/best-fit-video-promo-63e788e7e2-rev.js",
"js/components/best-list-mobile.js": "js/components/best-list-mobile-e9364b5a45-rev.js",
"js/components/best-list.js": "js/components/best-list-5f2c3e7b9b-rev.js",
"js/components/best-listing.js": "js/components/best-listing-a8e6c76c18-rev.js",
"js/components/breaking-news.js": "js/components/breaking-news-9c123e3578-rev.js",
"js/components/car-finder.js": "js/components/car-finder-4f57406798-rev.js",
"js/components/carousel-full.js": "js/components/carousel-full-c688884a35-rev.js",
"js/components/carousel.desktop.js": "js/components/carousel.desktop-8e764225b5-rev.js",
"js/components/carousel.mobile.js": "js/components/carousel.mobile-61f6aa348c-rev.js",
"js/components/cbsi-feed-widget.js": "js/components/cbsi-feed-widget-efda91d49f-rev.js",
"js/components/clipboard.js": "js/components/clipboard-b59acd6ea8-rev.js",
"js/components/cnet-video.js": "js/components/cnet-video-b9fe47f98d-rev.js",
"js/components/commands.js": "js/components/commands-9bfc0b6873-rev.js",
"js/components/comment-downloader.js": "js/components/comment-downloader-f421347506-rev.js",
"js/components/connect-es-component.js": "js/components/connect-es-component-f24d5731e0-rev.js",
"js/components/contact-us.js": "js/components/contact-us-ca7ea6ad7e-rev.js",
"js/components/cookies-notification.desktop.js": "js/components/cookies-notification.desktop-fc9001d401-rev.js",
"js/components/cookies-notification.mobile.js": "js/components/cookies-notification.mobile-7090c15a61-rev.js",
"js/components/deals-activator.desktop.js": "js/components/deals-activator.desktop-61c75e51ab-rev.js",
"js/components/deals-activator.mobile.js": "js/components/deals-activator.mobile-2793f2a7dd-rev.js",
"js/components/deals-updater.js": "js/components/deals-updater-290455a485-rev.js",
"js/components/dfll-activator-v2.desktop.js": "js/components/dfll-activator-v2.desktop-057a838fe0-rev.js",
"js/components/dfll-activator-v2.mobile.js": "js/components/dfll-activator-v2.mobile-86f19a60f0-rev.js",
"js/components/dfll-activator.desktop.js": "js/components/dfll-activator.desktop-5c59538a84-rev.js",
"js/components/dfll-activator.mobile.js": "js/components/dfll-activator.mobile-8084b1f16c-rev.js",
"js/components/dfll-updater-v2.desktop.js": "js/components/dfll-updater-v2.desktop-a10debffb6-rev.js",
"js/components/dfll-updater.desktop.js": "js/components/dfll-updater.desktop-94e0be7074-rev.js",
"js/components/disqus-count.js": "js/components/disqus-count-a38c55dcca-rev.js",
"js/components/dropdown.js": "js/components/dropdown-5425f51360-rev.js",
"js/components/editors-choice-toggle.js": "js/components/editors-choice-toggle-2818f79a4e-rev.js",
"js/components/ellipsis.js": "js/components/ellipsis-2b55e761e3-rev.js",
"js/components/error-modal.js": "js/components/error-modal-6aacdd88ce-rev.js",
"js/components/espanol-match.js": "js/components/espanol-match-f518e735d0-rev.js",
"js/components/espanol-promo.desktop.js": "js/components/espanol-promo.desktop-a61cc74e03-rev.js",
"js/components/expando.js": "js/components/expando-e00d7e107e-rev.js",
"js/components/expired-deal-modal.desktop.js": "js/components/expired-deal-modal.desktop-57d85eb620-rev.js",
"js/components/external-link.js": "js/components/external-link-1a870b28c4-rev.js",
"js/components/fixate.js": "js/components/fixate-0f4391571a-rev.js",
"js/components/fixed-height.js": "js/components/fixed-height-508c590fdc-rev.js",
"js/components/flexslider.js": "js/components/flexslider-0461979d75-rev.js",
"js/components/form-ajax.js": "js/components/form-ajax-34296f6db7-rev.js",
"js/components/form-trim.js": "js/components/form-trim-48931e879f-rev.js",
"js/components/form-validate.js": "js/components/form-validate-9a4a49eb13-rev.js",
"js/components/forums-best-answer.js": "js/components/forums-best-answer-9f33cd14aa-rev.js",
"js/components/forums-edit-post.js": "js/components/forums-edit-post-11f5c82040-rev.js",
"js/components/forums-load-form.js": "js/components/forums-load-form-2ecef726ef-rev.js",
"js/components/forums-mark-as-read.js": "js/components/forums-mark-as-read-1536a06149-rev.js",
"js/components/forums-permalink.js": "js/components/forums-permalink-7d514a2b5d-rev.js",
"js/components/forums-post-flag.js": "js/components/forums-post-flag-9580c787c6-rev.js",
"js/components/forums-post-preview.js": "js/components/forums-post-preview-cef38752be-rev.js",
"js/components/forums-post-toggle.js": "js/components/forums-post-toggle-e334936cab-rev.js",
"js/components/forums-post.js": "js/components/forums-post-722a78a2c6-rev.js",
"js/components/forums-realtime.js": "js/components/forums-realtime-85cc896f30-rev.js",
"js/components/forums-search-updater.js": "js/components/forums-search-updater-d30995c396-rev.js",
"js/components/forums-tools.js": "js/components/forums-tools-28ec6d091f-rev.js",
"js/components/forums-track.js": "js/components/forums-track-66576ff12c-rev.js",
"js/components/forums-vote.js": "js/components/forums-vote-ecaa15b21e-rev.js",
"js/components/full-screen-slides.js": "js/components/full-screen-slides-4023416f36-rev.js",
"js/components/generic-tracker.js": "js/components/generic-tracker-2d76e148ca-rev.js",
"js/components/global-modal.js": "js/components/global-modal-0d3afc4140-rev.js",
"js/components/google-csa.js": "js/components/google-csa-047ac7359c-rev.js",
"js/components/header-menu.js": "js/components/header-menu-f28a4c03b0-rev.js",
"js/components/header.mobile.js": "js/components/header.mobile-fbbd6387a1-rev.js",
"js/components/hgg-door.js": "js/components/hgg-door-944cdcc4f7-rev.js",
"js/components/holiday-nav.js": "js/components/holiday-nav-3000da6ef4-rev.js",
"js/components/iframe-ad-tracker.js": "js/components/iframe-ad-tracker-6a619eb24e-rev.js",
"js/components/iframe-hover-fix.js": "js/components/iframe-hover-fix-97b5c6d27e-rev.js",
"js/components/image-gallery-auto.js": "js/components/image-gallery-auto-a529ccdc68-rev.js",
"js/components/image-gallery-modal.js": "js/components/image-gallery-modal-f13845b58a-rev.js",
"js/components/image-gallery.js": "js/components/image-gallery-81a973bf7b-rev.js",
"js/components/indepth-review.js": "js/components/indepth-review-915d8f2a30-rev.js",
"js/components/inline-product-carousel.js": "js/components/inline-product-carousel-a178d367cd-rev.js",
"js/components/instagram-fetcher.js": "js/components/instagram-fetcher-2f7469c784-rev.js",
"js/components/interactive-floor-plans.js": "js/components/interactive-floor-plans-f9be718475-rev.js",
"js/components/interactive-video-player.js": "js/components/interactive-video-player-f4bbe74c23-rev.js",
"js/components/interactive-video-poll-timer.js": "js/components/interactive-video-poll-timer-7242fb4163-rev.js",
"js/components/join-cnet.js": "js/components/join-cnet-34ad661244-rev.js",
"js/components/lazyload-component.js": "js/components/lazyload-component-09475e8d65-rev.js",
"js/components/lazyload-element.js": "js/components/lazyload-element-d70928dbb3-rev.js",
"js/components/lazyload-images.js": "js/components/lazyload-images-bc739c140a-rev.js",
"js/components/leads-tracker.js": "js/components/leads-tracker-486c74bb06-rev.js",
"js/components/link-tracker.js": "js/components/link-tracker-e95d79a170-rev.js",
"js/components/load-more-scroll.js": "js/components/load-more-scroll-2e2f54d73f-rev.js",
"js/components/load-more.js": "js/components/load-more-4ac936c41c-rev.js",
"js/components/load-newest.js": "js/components/load-newest-835bcfe582-rev.js",
"js/components/loading.js": "js/components/loading-603960af1b-rev.js",
"js/components/longform.js": "js/components/longform-1b176baf7c-rev.js",
"js/components/magnet.js": "js/components/magnet-509b98c616-rev.js",
"js/components/mobile-footer-link.js": "js/components/mobile-footer-link-e0f37ed5c4-rev.js",
"js/components/modal-async.desktop.js": "js/components/modal-async.desktop-b2e042271d-rev.js",
"js/components/modal-email.js": "js/components/modal-email-fcc372a2b7-rev.js",
"js/components/modal-enlarge-image.js": "js/components/modal-enlarge-image-89fcd46b41-rev.js",
"js/components/modal-iframe.js": "js/components/modal-iframe-1742bdb833-rev.js",
"js/components/modal.mobile.js": "js/components/modal.mobile-6341784473-rev.js",
"js/components/module-asset-tracker.js": "js/components/module-asset-tracker-d648de6020-rev.js",
"js/components/most-popular-deal-listing.desktop.js": "js/components/most-popular-deal-listing.desktop-accdf5b249-rev.js",
"js/components/most-popular-deal.desktop.js": "js/components/most-popular-deal.desktop-af48c688ba-rev.js",
"js/components/mylists-button.js": "js/components/mylists-button-2379a339a9-rev.js",
"js/components/mylists-count.js": "js/components/mylists-count-10cdc86379-rev.js",
"js/components/mylists-email.js": "js/components/mylists-email-5985ecc17f-rev.js",
"js/components/mylists.js": "js/components/mylists-5f892d96ef-rev.js",
"js/components/nav.mobile.js": "js/components/nav.mobile-a4cc9d7e8b-rev.js",
"js/components/news-carousel.js": "js/components/news-carousel-89a1aac272-rev.js",
"js/components/newsletter-subscription.js": "js/components/newsletter-subscription-3d9df183e2-rev.js",
"js/components/page-header.js": "js/components/page-header-99fc70ca6c-rev.js",
"js/components/page.js": "js/components/page-f5dcf3a5c9-rev.js",
"js/components/parallax-reveal.js": "js/components/parallax-reveal-7869a6f431-rev.js",
"js/components/poll.js": "js/components/poll-88fc02b520-rev.js",
"js/components/pop-on-scroll.js": "js/components/pop-on-scroll-4fd2ccd648-rev.js",
"js/components/position-injector.js": "js/components/position-injector-41b005fa78-rev.js",
"js/components/pre-load-image-video.js": "js/components/pre-load-image-video-8594d46e30-rev.js",
"js/components/prices-by-zip.js": "js/components/prices-by-zip-43ab4e7b25-rev.js",
"js/components/product-media-carousel-mobile.js": "js/components/product-media-carousel-mobile-5800051939-rev.js",
"js/components/product-media-carousel.js": "js/components/product-media-carousel-e4729ae2a2-rev.js",
"js/components/product-review-video.js": "js/components/product-review-video-185c312f21-rev.js",
"js/components/product-series.js": "js/components/product-series-0b5d6ab402-rev.js",
"js/components/product-specs.js": "js/components/product-specs-3908efa7f0-rev.js",
"js/components/profile-discussions.js": "js/components/profile-discussions-2a655de4a5-rev.js",
"js/components/profile-newsletter-subscription.js": "js/components/profile-newsletter-subscription-6d89c1bbe5-rev.js",
"js/components/profile-reauth.js": "js/components/profile-reauth-b0f0c7ad53-rev.js",
"js/components/profile-subscriptions.js": "js/components/profile-subscriptions-66dd9eca74-rev.js",
"js/components/profile-ugc.js": "js/components/profile-ugc-657f10af23-rev.js",
"js/components/profile-update.js": "js/components/profile-update-958071077d-rev.js",
"js/components/profile.mobile.js": "js/components/profile.mobile-0ad1330a89-rev.js",
"js/components/progressive-ad.js": "js/components/progressive-ad-bbeabc3adb-rev.js",
"js/components/radio.js": "js/components/radio-19b180f312-rev.js",
"js/components/read-more.js": "js/components/read-more-d088f36ecb-rev.js",
"js/components/realtime-data.js": "js/components/realtime-data-4d4c4b6734-rev.js",
"js/components/realtime-drawer.js": "js/components/realtime-drawer-0885053fb8-rev.js",
"js/components/realtime-ticker.js": "js/components/realtime-ticker-c5e29a97fe-rev.js",
"js/components/recaptcha.js": "js/components/recaptcha-74258d7d6c-rev.js",
"js/components/reposition.js": "js/components/reposition-0578fd765e-rev.js",
"js/components/scroll-tracking.js": "js/components/scroll-tracking-e79757737f-rev.js",
"js/components/scrollbar-area.js": "js/components/scrollbar-area-4478b6f6ca-rev.js",
"js/components/search-bar.js": "js/components/search-bar-fc1ea3827c-rev.js",
"js/components/search-button.mobile.js": "js/components/search-button.mobile-b9c7beb312-rev.js",
"js/components/search-mobile-filter.js": "js/components/search-mobile-filter-196b90ea20-rev.js",
"js/components/search-paginator.js": "js/components/search-paginator-e7b5b3c04b-rev.js",
"js/components/search-sort.js": "js/components/search-sort-c72b015b2c-rev.js",
"js/components/selfish-scroll.js": "js/components/selfish-scroll-4c39fd1024-rev.js",
"js/components/sharebar.js": "js/components/sharebar-0a50a68edd-rev.js",
"js/components/shortcode-gallery-controller.js": "js/components/shortcode-gallery-controller-1c56dc8cca-rev.js",
"js/components/shortcode-gallery.js": "js/components/shortcode-gallery-05f2b29080-rev.js",
"js/components/showcase-hero-tabs.js": "js/components/showcase-hero-tabs-9d0f575a68-rev.js",
"js/components/showcase-rail-body.js": "js/components/showcase-rail-body-019e7442dd-rev.js",
"js/components/showcase-videos.js": "js/components/showcase-videos-8bed7bc116-rev.js",
"js/components/side-nav.js": "js/components/side-nav-f9ef7fd1ca-rev.js",
"js/components/sideqik.js": "js/components/sideqik-144dad8463-rev.js",
"js/components/site-header.js": "js/components/site-header-47bd56a7b8-rev.js",
"js/components/slider.js": "js/components/slider-9b297348bc-rev.js",
"js/components/sliding-element.js": "js/components/sliding-element-5012eab0dc-rev.js",
"js/components/social-counts.js": "js/components/social-counts-02844f1deb-rev.js",
"js/components/social-menu.js": "js/components/social-menu-7b96f047fc-rev.js",
"js/components/social-tracking.js": "js/components/social-tracking-dd7c17f965-rev.js",
"js/components/stackla-events.js": "js/components/stackla-events-d2b8b509b5-rev.js",
"js/components/sticky-column.js": "js/components/sticky-column-1c3b64443a-rev.js",
"js/components/sticky-element.js": "js/components/sticky-element-3069dea815-rev.js",
"js/components/sticky-leader.js": "js/components/sticky-leader-ede14fc0eb-rev.js",
"js/components/subrating-modal-toggle.js": "js/components/subrating-modal-toggle-af73c7bf4b-rev.js",
"js/components/swap-classes.js": "js/components/swap-classes-aa7378c061-rev.js",
"js/components/swfobject.js": "js/components/swfobject-ffab622fce-rev.js",
"js/components/table-sorter.js": "js/components/table-sorter-ad20179f39-rev.js",
"js/components/taboola.js": "js/components/taboola-d0da4b4801-rev.js",
"js/components/tabs-async.js": "js/components/tabs-async-839ba118fc-rev.js",
"js/components/tabs-modal.js": "js/components/tabs-modal-85543899c3-rev.js",
"js/components/tabs-refresh.js": "js/components/tabs-refresh-b73bacc261-rev.js",
"js/components/tag-letter-sorter.js": "js/components/tag-letter-sorter-5335e5d88c-rev.js",
"js/components/text-counter.js": "js/components/text-counter-c2cafae1fb-rev.js",
"js/components/tile-special-nav-mobile.js": "js/components/tile-special-nav-mobile-cde1782d8d-rev.js",
"js/components/tile-special-nav.js": "js/components/tile-special-nav-081654a7d0-rev.js",
"js/components/toc-nav.js": "js/components/toc-nav-76e0ee380f-rev.js",
"js/components/toggle.js": "js/components/toggle-0877fc8884-rev.js",
"js/components/tooltip.js": "js/components/tooltip-24d4442c31-rev.js",
"js/components/top-stories.js": "js/components/top-stories-aa9ab2bf89-rev.js",
"js/components/touch-menu-hover.js": "js/components/touch-menu-hover-aa0e69c330-rev.js",
"js/components/track-download.js": "js/components/track-download-b4bf70cf94-rev.js",
"js/components/track-impression.js": "js/components/track-impression-7a4f773acb-rev.js",
"js/components/tracking-controller.js": "js/components/tracking-controller-c7e0f08434-rev.js",
"js/components/tv-feature.js": "js/components/tv-feature-11750373b3-rev.js",
"js/components/twitter-fetcher.js": "js/components/twitter-fetcher-7c438c818a-rev.js",
"js/components/update-area.js": "js/components/update-area-81f4c1337d-rev.js",
"js/components/urban-airship.js": "js/components/urban-airship-317010e484-rev.js",
"js/components/versus-model-switcher.js": "js/components/versus-model-switcher-2f04820d98-rev.js",
"js/components/versus-ratings.js": "js/components/versus-ratings-dcda66ba15-rev.js",
"js/components/video-controls.js": "js/components/video-controls-70e874f8f3-rev.js",
"js/components/video-hook.js": "js/components/video-hook-8600fa5f5f-rev.js",
"js/components/video-listing.js": "js/components/video-listing-a66a4a6fcd-rev.js",
"js/components/video-modal.js": "js/components/video-modal-b46aa3e89c-rev.js",
"js/components/video-on-page.js": "js/components/video-on-page-a84ca92b96-rev.js",
"js/components/video-playlist-connector.js": "js/components/video-playlist-connector-4e81e3dcbf-rev.js",
"js/components/video-scroller.js": "js/components/video-scroller-73070fb27c-rev.js",
"js/components/video-show-gallery.js": "js/components/video-show-gallery-b93c18e631-rev.js",
"js/components/waypoint-promo.js": "js/components/waypoint-promo-1c1e5d48d6-rev.js",
"js/components/zip-code.js": "js/components/zip-code-d7f96daa35-rev.js",
"js/feature-disabled.js": "js/feature-disabled-d41d8cd98f-rev.js",
"js/main.default.js": "js/main.default-d8e0d21fdc-rev.js",
"js/main.desktop.js": "js/main.desktop-19a5b79b46-rev.js",
"js/main.lean.desktop.js": "js/main.lean.desktop-e4610f05ab-rev.js",
"js/main.lean.mobile.js": "js/main.lean.mobile-b12747a815-rev.js",
"js/main.mobile.js": "js/main.mobile-7ae9b9f9d0-rev.js",
"js/main.tests.js": "js/main.tests-4b6e4fd84a-rev.js",
"js/main.video.desktop.js": "js/main.video.desktop-5f3b9bf79a-rev.js",
"js/main.video.mobile.js": "js/main.video.mobile-53fbd3aa80-rev.js",
"js/managers/ad.js": "js/managers/ad-ea08eaa202-rev.js",
"js/managers/adCookie.js": "js/managers/adCookie-7f8b79cbe2-rev.js",
"js/managers/client-storage.js": "js/managers/client-storage-f480dc741b-rev.js",
"js/managers/components.desktop.js": "js/managers/components.desktop-bd2dedab91-rev.js",
"js/managers/components.mobile.js": "js/managers/components.mobile-b6eeb8ab96-rev.js",
"js/managers/cookie.js": "js/managers/cookie-f2d52644ef-rev.js",
"js/managers/device.js": "js/managers/device-a4e3f7555e-rev.js",
"js/managers/edition-notifications.js": "js/managers/edition-notifications-45badcc2ee-rev.js",
"js/managers/edition.js": "js/managers/edition-8370168e94-rev.js",
"js/managers/events.js": "js/managers/events-d3b39b8a26-rev.js",
"js/managers/first-paint.js": "js/managers/first-paint-e539cd8f41-rev.js",
"js/managers/global-functions.js": "js/managers/global-functions-e4ab5e6d99-rev.js",
"js/managers/guid.js": "js/managers/guid-2fcc696bf6-rev.js",
"js/managers/mobile-fixes.js": "js/managers/mobile-fixes-5b7f6c08a8-rev.js",
"js/managers/mpulse.js": "js/managers/mpulse-ac8d2676d6-rev.js",
"js/managers/page-vars.js": "js/managers/page-vars-230a5805e3-rev.js",
"js/managers/promotionals.desktop.js": "js/managers/promotionals.desktop-9f8814779f-rev.js",
"js/managers/promotionals.mobile.js": "js/managers/promotionals.mobile-0bab8d70c7-rev.js",
"js/managers/pwa.js": "js/managers/pwa-bb9e6a9b67-rev.js",
"js/managers/recommendation.js": "js/managers/recommendation-6e1659e0d8-rev.js",
"js/managers/tealium.js": "js/managers/tealium-9f2bfb16cf-rev.js",
"js/managers/third-party/comscore.js": "js/managers/third-party/comscore-722f8d3b55-rev.js",
"js/managers/third-party/disqus.js": "js/managers/third-party/disqus-fb975e80dd-rev.js",
"js/managers/third-party/facebook.js": "js/managers/third-party/facebook-410b012b82-rev.js",
"js/managers/third-party/linked-in.js": "js/managers/third-party/linked-in-04ae44b7e1-rev.js",
"js/managers/third-party/omniture.js": "js/managers/third-party/omniture-1fe1812862-rev.js",
"js/managers/third-party/pinterest.js": "js/managers/third-party/pinterest-eb33e73337-rev.js",
"js/managers/third-party/social-flags.js": "js/managers/third-party/social-flags-6ea70a51ca-rev.js",
"js/managers/third-party/social.js": "js/managers/third-party/social-df6f6a110c-rev.js",
"js/managers/third-party/twitter.js": "js/managers/third-party/twitter-5c231916e9-rev.js",
"js/managers/tracking.js": "js/managers/tracking-17a2e94b71-rev.js",
"js/managers/ugc.js": "js/managers/ugc-a92b2df807-rev.js",
"js/managers/user.js": "js/managers/user-7477a648b8-rev.js",
"js/managers/uvpjs.js": "js/managers/uvpjs-aa7af97a1a-rev.js",
"js/managers/watch.js": "js/managers/watch-f9bbd85177-rev.js",
"js/managers/waypoints.js": "js/managers/waypoints-0dc30c7eef-rev.js",
"js/native/nav.js": "js/native/nav-7a9f76e61d-rev.js",
"js/pages/desktop/about.js": "js/pages/desktop/about-1ab952ce20-rev.js",
"js/pages/desktop/article.js": "js/pages/desktop/article-d144864e40-rev.js",
"js/pages/desktop/article.uvpjs_upgrade.test.js": "js/pages/desktop/article.uvpjs_upgrade.test-d441a72d0d-rev.js",
"js/pages/desktop/article_video_test.js": "js/pages/desktop/article_video_test-422eaa8190-rev.js",
"js/pages/desktop/buy_guide.js": "js/pages/desktop/buy_guide-ec318f406d-rev.js",
"js/pages/desktop/collection_door.js": "js/pages/desktop/collection_door-99e10aafdb-rev.js",
"js/pages/desktop/collection_door.video.js": "js/pages/desktop/collection_door.video-84eedf25f8-rev.js",
"js/pages/desktop/custom_showcase.js": "js/pages/desktop/custom_showcase-8364878cd2-rev.js",
"js/pages/desktop/deals_page.js": "js/pages/desktop/deals_page-a493eec7f5-rev.js",
"js/pages/desktop/expando.js": "js/pages/desktop/expando-1b643f1e68-rev.js",
"js/pages/desktop/forum_thread.js": "js/pages/desktop/forum_thread-3f4988f377-rev.js",
"js/pages/desktop/forums_search.js": "js/pages/desktop/forums_search-98a0217c23-rev.js",
"js/pages/desktop/front_door.js": "js/pages/desktop/front_door-33cf7dfca0-rev.js",
"js/pages/desktop/hosting_door.js": "js/pages/desktop/hosting_door-db364d1f11-rev.js",
"js/pages/desktop/hosting_list.js": "js/pages/desktop/hosting_list-73b27b5cf9-rev.js",
"js/pages/desktop/image_gallery.js": "js/pages/desktop/image_gallery-3c258eb490-rev.js",
"js/pages/desktop/image_gallery_list.js": "js/pages/desktop/image_gallery_list-5ce1e63ecf-rev.js",
"js/pages/desktop/live_event.js": "js/pages/desktop/live_event-02960a9bae-rev.js",
"js/pages/desktop/product_main.js": "js/pages/desktop/product_main-7ca459bfc4-rev.js",
"js/pages/desktop/product_shop.js": "js/pages/desktop/product_shop-19ef76ba44-rev.js",
"js/pages/desktop/product_spec.js": "js/pages/desktop/product_spec-692dea43fa-rev.js",
"js/pages/desktop/search.js": "js/pages/desktop/search-b3e3d7025a-rev.js",
"js/pages/desktop/search_null.js": "js/pages/desktop/search_null-04c767bf46-rev.js",
"js/pages/desktop/section_door.js": "js/pages/desktop/section_door-c1e4df7aec-rev.js",
"js/pages/desktop/section_door.video.js": "js/pages/desktop/section_door.video-6ba63f88ad-rev.js",
"js/pages/desktop/special_feature.js": "js/pages/desktop/special_feature-c137d25c58-rev.js",
"js/pages/desktop/speed_test.js": "js/pages/desktop/speed_test-551cfcc893-rev.js",
"js/pages/desktop/tag_door.js": "js/pages/desktop/tag_door-c9f344bf1c-rev.js",
"js/pages/desktop/tag_page.js": "js/pages/desktop/tag_page-8247c1754a-rev.js",
"js/pages/desktop/topic_best.js": "js/pages/desktop/topic_best-ec36c45fc7-rev.js",
"js/pages/desktop/topic_door.js": "js/pages/desktop/topic_door-520c4171cb-rev.js",
"js/pages/desktop/topic_list.js": "js/pages/desktop/topic_list-74ecfc1295-rev.js",
"js/pages/desktop/topic_list.video.js": "js/pages/desktop/topic_list.video-b1932ccebf-rev.js",
"js/pages/desktop/video_page.js": "js/pages/desktop/video_page-0e50c592bd-rev.js",
"js/pages/desktop/video_picks.js": "js/pages/desktop/video_picks-7bbce8fed0-rev.js",
"js/pages/desktop/video_share.js": "js/pages/desktop/video_share-c3352db1e9-rev.js",
"js/pages/mobile/about.js": "js/pages/mobile/about-457c28ba12-rev.js",
"js/pages/mobile/article.js": "js/pages/mobile/article-4f739f24e8-rev.js",
"js/pages/mobile/article.uvpjs_upgrade.test.js": "js/pages/mobile/article.uvpjs_upgrade.test-58828f659d-rev.js",
"js/pages/mobile/buy_guide.js": "js/pages/mobile/buy_guide-1684afe0b3-rev.js",
"js/pages/mobile/collection_door.js": "js/pages/mobile/collection_door-52506845c0-rev.js",
"js/pages/mobile/collection_door.video.js": "js/pages/mobile/collection_door.video-8793516638-rev.js",
"js/pages/mobile/comments_permalink.js": "js/pages/mobile/comments_permalink-5554cce7af-rev.js",
"js/pages/mobile/custom_showcase.js": "js/pages/mobile/custom_showcase-22869204af-rev.js",
"js/pages/mobile/deals_page.js": "js/pages/mobile/deals_page-ea59e59e91-rev.js",
"js/pages/mobile/expando.js": "js/pages/mobile/expando-2fe63148cc-rev.js",
"js/pages/mobile/forum_thread.js": "js/pages/mobile/forum_thread-130c93e576-rev.js",
"js/pages/mobile/front_door.js": "js/pages/mobile/front_door-ef3b723c4e-rev.js",
"js/pages/mobile/hosting_door.js": "js/pages/mobile/hosting_door-33b5342bf2-rev.js",
"js/pages/mobile/hosting_list.js": "js/pages/mobile/hosting_list-3e32d015f7-rev.js",
"js/pages/mobile/image_gallery.js": "js/pages/mobile/image_gallery-3cd6c2394c-rev.js",
"js/pages/mobile/image_gallery_list.js": "js/pages/mobile/image_gallery_list-20c15487d1-rev.js",
"js/pages/mobile/live_event.js": "js/pages/mobile/live_event-1e2210e582-rev.js",
"js/pages/mobile/product_main.js": "js/pages/mobile/product_main-96402605f7-rev.js",
"js/pages/mobile/product_shop.js": "js/pages/mobile/product_shop-57d0bdbc29-rev.js",
"js/pages/mobile/product_spec.js": "js/pages/mobile/product_spec-65a97adc3d-rev.js",
"js/pages/mobile/search.js": "js/pages/mobile/search-141708a5f8-rev.js",
"js/pages/mobile/search_null.js": "js/pages/mobile/search_null-eac51cbc3b-rev.js",
"js/pages/mobile/section_door.js": "js/pages/mobile/section_door-d8421918f9-rev.js",
"js/pages/mobile/section_door.video.js": "js/pages/mobile/section_door.video-faa383ba19-rev.js",
"js/pages/mobile/special_feature.js": "js/pages/mobile/special_feature-aad0c8b56a-rev.js",
"js/pages/mobile/speed_test.js": "js/pages/mobile/speed_test-1e51584416-rev.js",
"js/pages/mobile/tag_door.js": "js/pages/mobile/tag_door-1ac5354d49-rev.js",
"js/pages/mobile/tag_page.js": "js/pages/mobile/tag_page-9e52a76ce5-rev.js",
"js/pages/mobile/topic_best.js": "js/pages/mobile/topic_best-8914724742-rev.js",
"js/pages/mobile/topic_door.js": "js/pages/mobile/topic_door-19cd41dd8a-rev.js",
"js/pages/mobile/topic_list.js": "js/pages/mobile/topic_list-bc9b697f80-rev.js",
"js/pages/mobile/topic_list.video.js": "js/pages/mobile/topic_list.video-e17d7f4e2c-rev.js",
"js/pages/mobile/video_page.js": "js/pages/mobile/video_page-8532bec458-rev.js",
"js/pages/mobile/video_picks.js": "js/pages/mobile/video_picks-ce6f3d2b64-rev.js",
"js/pages/mobile/video_share.js": "js/pages/mobile/video_share-49cde1ecc0-rev.js",
"js/tests/linter.js": "js/tests/linter-ac9942d828-rev.js",
"js/tests/managers/client-storage.js": "js/tests/managers/client-storage-e764c755d5-rev.js",
"js/tests/managers/third-party/facebook.js": "js/tests/managers/third-party/facebook-ea918d7fed-rev.js",
"js/tests/managers/third-party/google.js": "js/tests/managers/third-party/google-1853eeafe6-rev.js",
"js/tests/managers/third-party/linked-in.js": "js/tests/managers/third-party/linked-in-a5d2d3195e-rev.js",
"js/tests/managers/third-party/pinterest.js": "js/tests/managers/third-party/pinterest-29927c4137-rev.js",
"js/tests/managers/third-party/twitter.js": "js/tests/managers/third-party/twitter-a49c5cf252-rev.js",
"js/tests/utils/string-helper.js": "js/tests/utils/string-helper-837c526344-rev.js",
"js/translations/core.js": "js/translations/core-63579eadda-rev.js",
"js/translations/dfll.js": "js/translations/dfll-c158a6dda5-rev.js",
"js/translations/form-validate.js": "js/translations/form-validate-3c9459a211-rev.js",
"js/translations/forums.js": "js/translations/forums-d05374f396-rev.js",
"js/translations/image-gallery.js": "js/translations/image-gallery-5acb09e4f7-rev.js",
"js/translations/load-more.js": "js/translations/load-more-2439f22857-rev.js",
"js/translations/loading.js": "js/translations/loading-0c9b330f67-rev.js",
"js/translations/modal-email.js": "js/translations/modal-email-2509d63772-rev.js",
"js/translations/mylists-button.js": "js/translations/mylists-button-fa54d8bda5-rev.js",
"js/translations/mylists.js": "js/translations/mylists-3b3a179b25-rev.js",
"js/translations/social-links.js": "js/translations/social-links-ddcf3bba41-rev.js",
"js/translations/video.js": "js/translations/video-7946dd2957-rev.js",
"js/utils/ad-repositioner.js": "js/utils/ad-repositioner-2427d81534-rev.js",
"js/utils/advertisement3.js": "js/utils/advertisement3-e3b381c493-rev.js",
"js/utils/cookie.js": "js/utils/cookie-78261442a5-rev.js",
"js/utils/date.js": "js/utils/date-bf58248d0f-rev.js",
"js/utils/element-overlap.js": "js/utils/element-overlap-0660017df0-rev.js",
"js/utils/function-natives.js": "js/utils/function-natives-6f338a94c8-rev.js",
"js/utils/jquery-swipe-fix.js": "js/utils/jquery-swipe-fix-5399ebde78-rev.js",
"js/utils/string-helper.js": "js/utils/string-helper-001606770d-rev.js",
"js/utils/targeting-helper.js": "js/utils/targeting-helper-d23037a67a-rev.js",
"js/utils/urs-helper.js": "js/utils/urs-helper-ba9e574ab1-rev.js",
"js/utils/userAgentSniffer.js": "js/utils/userAgentSniffer-b15c26389c-rev.js",
"js/workers/service-worker.js": "js/workers/service-worker-8bcd01def0-rev.js"
}
, n = e;
return t[e.substring(1)] && (n = "/" + t[e.substring(1)]),
n
}
function n(e) {
if (window.CnetPageVars.assetsHosts && window.CnetPageVars.assetsHosts.length > 0 && -1 === e.indexOf("//")) {
var t = e.length % window.CnetPageVars.assetsHosts.length
, n = /\w+-fly(.*)/.exec(e);
return null !== n && (t = n[1].length % window.CnetPageVars.assetsHosts.length),
window.CnetPageVars.assetsHosts[t] + e
}
return e
}
var i = e.load;
e.load = function(r, o, a) {
return a = n(t(a)),
i.apply(e, arguments)
}
}(requirejs),
define("main.default", function() {});
;(I11C || I10C).ScriptEnd();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment