var DISQUS = function (e) { var g = e.DISQUS || {}; g.AssertionError = function (b) { this.message = b }; g.AssertionError.prototype.toString = function () { return "Assertion Error: " + (this.message || "[no message]") }; g.assert = function (b, d, f) { if (!b) if (f) e.console && e.console.log("DISQUS assertion failed: " + d); else throw new g.AssertionError(d); }; var d = []; g.define = function (b, m) { typeof b === "function" && (m = b, b = ""); for (var f = b.split("."), a = f.shift(), c = g, n = (m || function () { return {} }).call({ overwrites: function (a) { a.__overwrites__ = !0; return a } }, e); a;) c = c[a] ? c[a] : c[a] = {}, a = f.shift(); for (var h in n) n.hasOwnProperty(h) && (!n.__overwrites__ && c[h] !== null && g.assert(!c.hasOwnProperty(h), "Unsafe attempt to redefine existing module: " + h, !0), c[h] = n[h], d.push(function (a, c) { return function () { delete a[c] } }(c, h))); return c }; g.use = function (b) { return g.define(b) }; g.cleanup = function () { for (var b = 0; b < d.length; b++) d[b]() }; return g }(window); DISQUS.define(function (e, g) { var d = e.DISQUS, b = e.document, m = b.getElementsByTagName("head")[0] || b.body, f = { running: !1, timer: null, queue: [] }; d.defer = function (a, c) { function b() { var a = f.queue; if (a.length === 0) f.running = !1, clearInterval(f.timer); for (var c = 0, d; d = a[c]; c++) d[0]() && (a.splice(c--, 1), d[1]()) } f.queue.push([a, c]); b(); if (!f.running) f.running = !0, f.timer = setInterval(b, 100) }; d.each = function (a, c) { var b = a.length, d = Array.prototype.forEach; if (isNaN(b)) for (var e in a) a.hasOwnProperty(e) && c(a[e], e, a); else if (d) d.call(a, c); else for (d = 0; d < b; d++) c(a[d], d, a) }; d.extend = function (a) { d.each(Array.prototype.slice.call(arguments, 1), function (c) { for (var d in c) a[d] = c[d] }); return a }; d.serializeArgs = function (a) { var c = []; d.each(a, function (a, d) { a !== g && c.push(d + (a !== null ? "=" + encodeURIComponent(a) : "")) }); return c.join("&") }; d.isString = function (a) { return Object.prototype.toString.call(a) === "[object String]" }; d.serialize = function (a, c, b) { c && (a += ~a.indexOf("?") ? a.charAt(a.length - 1) == "&" ? "" : "&" : "?", a += d.serializeArgs(c)); if (b) return c = {}, c[(new Date).getTime()] = null, d.serialize(a, c); c = a.length; return a.charAt(c - 1) == "&" ? a.slice(0, c - 1) : a }; d.require = function (a, c, e, h, g) { function f(a) { if (a.type == "load" || /^(complete|loaded)$/.test(a.target.readyState)) h && h(), t && clearTimeout(t), d.bean.remove(a.target, l, f) } var i = b.createElement("script"), l = i.addEventListener ? "load" : "readystatechange", t = null; i.src = d.serialize(a, c, e); i.async = !0; i.charset = "UTF-8"; (h || g) && d.bean.add(i, l, f); g && (t = setTimeout(function () { g() }, 2E4)); m.appendChild(i); return d }; d.requireStylesheet = function (a, c, e) { var h = b.createElement("link"); h.rel = "stylesheet"; h.type = "text/css"; h.href = d.serialize(a, c, e); m.appendChild(h); return d }; d.requireSet = function (a, c, b) { var e = a.length; d.each(a, function (a) { d.require(a, {}, c, function () { --e === 0 && b() }) }) }; d.injectCss = function (a) { var c = b.createElement("style"); c.setAttribute("type", "text/css"); a = a.replace(/\}/g, "}\n"); e.location.href.match(/^https/) && (a = a.replace(/http:\/\//g, "https://")); c.styleSheet ? c.styleSheet.cssText = a : c.appendChild(b.createTextNode(a)); m.appendChild(c) } }); DISQUS.define("JSON", function () { function e(a) { return a < 10 ? "0" + a : a } function g(c) { a.lastIndex = 0; return a.test(c) ? '"' + c.replace(a, function (a) { var c = h[a]; return typeof c === "string" ? c : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) }) + '"' : '"' + c + '"' } function d(a, b) { var l, e, h, f, i = c, k, o = b[a]; o && typeof o === "object" && typeof o.toJSON === "function" && !m && (o = o.toJSON(a)); typeof p === "function" && (o = p.call(b, a, o)); switch (typeof o) { case "string": return g(o); case "number": return isFinite(o) ? String(o) : "null"; case "boolean": case "null": return String(o); case "object": if (!o) return "null"; c += n; k = []; if (Object.prototype.toString.apply(o) === "[object Array]") { f = o.length; for (l = 0; l < f; l += 1) k[l] = d(l, o) || "null"; h = k.length === 0 ? "[]" : c ? "[\n" + c + k.join(",\n" + c) + "\n" + i + "]" : "[" + k.join(",") + "]"; c = i; return h } if (p && typeof p === "object") { f = p.length; for (l = 0; l < f; l += 1) e = p[l], typeof e === "string" && (h = d(e, o)) && k.push(g(e) + (c ? ": " : ":") + h) } else for (e in o) Object.hasOwnProperty.call(o, e) && (h = d(e, o)) && k.push(g(e) + (c ? ": " : ":") + h); h = k.length === 0 ? "{}" : c ? "{\n" + c + k.join(",\n" + c) + "\n" + i + "}" : "{" + k.join(",") + "}"; c = i; return h } } var b = {}, m = !1; if (typeof Date.prototype.toJSON !== "function") Date.prototype.toJSON = function () { return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + e(this.getUTCMonth() + 1) + "-" + e(this.getUTCDate()) + "T" + e(this.getUTCHours()) + ":" + e(this.getUTCMinutes()) + ":" + e(this.getUTCSeconds()) + "Z" : null }, String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function () { return this.valueOf() }; var f = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, a = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, c, n, h = { "\u0008": "\\b", "\t": "\\t", "\n": "\\n", "\u000c": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }, p; b.stringify = function (a, b, l) { var e; n = c = ""; if (typeof l === "number") for (e = 0; e < l; e += 1) n += " "; else typeof l === "string" && (n = l); if ((p = b) && typeof b !== "function" && (typeof b !== "object" || typeof b.length !== "number")) throw Error("JSON.stringify"); return d("", { "": a }) }; b.parse = function (a, c) { function b(a, l) { var d, e, h = a[l]; if (h && typeof h === "object") for (d in h) Object.hasOwnProperty.call(h, d) && (e = b(h, d), e !== void 0 ? h[d] = e : delete h[d]); return c.call(a, l, h) } var l, a = String(a); f.lastIndex = 0; f.test(a) && (a = a.replace(f, function (a) { return "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4) })); if (/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) return l = eval("(" + a + ")"), typeof c === "function" ? b({ "": l }, "") : l; throw new SyntaxError("JSON.parse"); }; var k = { a: [1, 2, 3] }, i, l; if (Object.toJSON && Object.toJSON(k).replace(/\s/g, "") === '{"a":[1,2,3]}') i = Object.toJSON; typeof String.prototype.evalJSON === "function" && (k = '{"a":[1,2,3]}'.evalJSON(), k.a && k.a.length === 3 && k.a[2] === 3 && (l = function (a) { return a.evalJSON() })); (function () { var a = [1, 2, 3]; typeof a.toJSON === "function" && (a = a.toJSON(), m = !(a && a.length === 3 && a[2] === 3)) })(); if (m || !i || !l) return { stringify: b.stringify, parse: b.parse }; return { stringify: i, parse: l } }); DISQUS.define(function () { function e(c) { for (a = 1; c = g.shift();) c() } var g = [], d, b = document, m = b.documentElement, f = m.doScroll, a = /^loade|c/.test(b.readyState), c; b.addEventListener && b.addEventListener("DOMContentLoaded", d = function () { b.removeEventListener("DOMContentLoaded", d, !1); e() }, !1); f && b.attachEvent("onreadystatechange", d = function () { /^c/.test(b.readyState) && (b.detachEvent("onreadystatechange", d), e()) }); c = f ? function (b) { self != top ? a ? b() : g.push(b) : function () { try { m.doScroll("left") } catch (a) { return setTimeout(function () { c(b) }, 50) } b() }() } : function (c) { a ? c() : g.push(c) }; return { domready: c } }); DISQUS.define("Events", function () { var e = /\s+/, g = { on: function (d, b, g) { var f, a; if (!b) return this; d = d.split(e); for (f = this._callbacks || (this._callbacks = {}); a = d.shift();) a = f[a] || (f[a] = []), a.push(b), a.push(g); return this }, off: function (d, b, g) { var f, a, c; if (!(a = this._callbacks)) return this; if (!d && !b && !g) return delete this._callbacks, this; for (d = d ? d.split(e) : _.keys(a); f = d.shift();) if (!(c = a[f]) || !b && !g) delete a[f]; else for (f = c.length - 2; f >= 0; f -= 2) b && c[f] !== b || g && c[f + 1] !== g || c.splice(f, 2); return this }, trigger: function (d) { var b, g, f, a, c, n, h; if (!(g = this._callbacks)) return this; h = []; d = d.split(e); a = 1; for (c = arguments.length; a < c; a++) h[a - 1] = arguments[a]; for (; b = d.shift();) { if (n = g.all) n = n.slice(); if (f = g[b]) f = f.slice(); if (f) { a = 0; for (c = f.length; a < c; a += 2) f[a].apply(f[a + 1] || this, h) } if (n) { b = [b].concat(h); a = 0; for (c = n.length; a < c; a += 2) n[a].apply(n[a + 1] || this, b) } } return this } }; g.bind = g.on; g.unbind = g.off; return g }); DISQUS.define(function (e) { function g() { throw Error(Array.prototype.join.call(arguments, " ")); } function d(a, c, b) { if (a.addEventListener) a.addEventListener(c, b, !1); else if (a.attachEvent) a.attachEvent("on" + c, b); else throw Error("No event support."); } var b = e.document, m = DISQUS.use("JSON"), f = {}, a = {}, c = 0; if (!(DISQUS.version && DISQUS.version() === "2")) { d(e, "message", function (c) { var b, d; for (d in a) if (Object.prototype.hasOwnProperty.call(a, d) && c.origin == a[d].origin) { b = !0; break } if (b) switch (b = m.parse(c.data), (d = a[b.sender]) || g("Message from our server but with invalid sender UID:", b.sender), b.scope) { case "host": d.trigger(b.name, b.data); break; case "global": DISQUS.trigger(b.name, b.data); break; default: g("Message", b.scope, "not supported. Sender:", c.origin) } }, !1); d(e, "hashchange", function () { DISQUS.trigger("window.hashchange", { hash: e.location.hash }) }, !1); d(e, "resize", function () { DISQUS.trigger("window.resize") }, !1); var n = function () { DISQUS.trigger("window.scroll") }; (function (a, b, c, e) { var h = (new Date).getTime(); d(a, b, function () { var a = (new Date).getTime(); a - h >= e && (h = a, c()) }) })(e, "scroll", n, 250); (function (a, b, c, e) { var h; d(a, b, function (a) { h && clearTimeout(h); h = setTimeout(function () { c(a) }, e) }) })(e, "scroll", n, 300); d(b, "click", function () { DISQUS.trigger("window.click") }); n = function () { this.uid = c++; f[this.uid] = this }; DISQUS.extend(n.prototype, DISQUS.Events); n.prototype.destroy = function () { delete f[this.uid] }; DISQUS.extend(n, { listByKey: function () { var a = {}, b; for (b in f) Object.prototype.hasOwnProperty.call(f, b) && (a[b] = f[b]); return a }, list: function () { var a = [], b; for (b in f) Object.prototype.hasOwnProperty.call(f, b) && a.push(f[b]); return a }, get: function (a) { if (Object.prototype.hasOwnProperty.call(f, a)) return f[a]; return null } }); var h = function (a) { a = a || {}; this.isReady = !1; this.uid = a.uid || c++; this.elem = null; this.styles = {}; this.role = a.role || "application" }; h.prototype.load = function () { var a = this.elem = b.createElement("iframe"); a.setAttribute("id", "dsq" + this.uid); a.setAttribute("data-disqus-uid", this.uid); a.setAttribute("allowTransparency", "true"); a.setAttribute("frameBorder", "0"); a.setAttribute("role", this.role); for (var c in this.styles) this.styles.hasOwnProperty(c) && (a.style[c] = this.styles[c]) }; h.prototype.destroy = function () { this.elem && this.elem.parentNode.removeChild(this.elem) }; var p = function (b) { var c = this; h.call(c, b); c.listeners = {}; c.origin = b.origin; c.target = b.target; c.container = b.container; c.styles = DISQUS.extend({ width: "100%", border: "none", overflow: "hidden", display: "none" }, b.styles || {}); a[c.uid] = c; c.on("ready", function () { c.isReady = !0 }) }; DISQUS.extend(p.prototype, DISQUS.Events); p.prototype.load = function (a) { h.prototype.load.call(this); var c = this.elem; c.setAttribute("width", "100%"); c.setAttribute("src", this.target + "#" + this.uid); d(c, "load", function () { c.style.display = ""; a && a() }); (b.getElementById(this.container) || b.body).appendChild(c); this.elem = c }; p.prototype.sendMessage = function (a, c) { var b = function (a, c, b) { return function () { b.elem.contentWindow.postMessage(a, c) } }(m.stringify({ scope: "client", data: { eventName: a, data: c } }), this.origin, this); if (this.isReady) b(); else this.on("ready", b) }; p.prototype.getPosition = function () { for (var a = this.elem, c = 0, b = 0; a;) c += a.offsetLeft, b += a.offsetTop, a = a.offsetParent; return { top: b, left: c } }; p.prototype.inViewport = function (a) { var a = a || this.getPosition(), a = a.top, c = a + this.elem.offsetHeight, b = e.pageYOffset; return !(a > b + e.innerHeight || c < b) }; p.prototype.destroy = function () { this.off(); h.prototype.destroy.call(this) }; var k = function (a) { h.call(this, a); this.contents = a.contents; this.container = a.container; this.styles = { width: "100%", border: "none", overflow: "hidden" }; a.styles = a.styles || {}; for (var c in a.styles) a.styles.hasOwnProperty(c) && (this.styles[c] = a.styles[c]) }; k.prototype.load = function () { h.prototype.load.call(this); var a = this.elem; a.setAttribute("scrolling", "no"); (b.getElementById(this.container) || b.body).appendChild(a); this.element = a; this.window = a.contentWindow; try { this.window.document.open() } catch (c) { a.src = "javascript:var d=document.open();d.domain='" + b.domain + "';void(0);" } this.document = this.window.document; this.document.write(this.contents); this.document.close(); if (a = this.document.body) { var d = this.element.style; d.height = d.minHeight = d.maxHeight = a.offsetHeight + "px" } }; k.prototype.exec = function (a) { a.call(this, this.window, this.document) }; k.prototype.hide = function () { var a = this.element.style.display; if (a !== "none") this._display = a; this.element.style.display = "none" }; k.prototype.show = function () { this.element.style.display = this._display || "block" }; k.prototype.click = function (a) { d(this.document.body, "click", function (c) { a(c) }) }; k.prototype.destroy = h.prototype.destroy; var i = DISQUS.extend({}, DISQUS.Events); return { IFRAME: "__widget_iframe__", log: function (a) { var c = b.getElementById("messages"); if (c) { var d = b.createElement("p"); d.innerHTML = a; c.appendChild(d) } }, version: function () { return "2" }, on: i.on, off: i.off, trigger: i.trigger, Channel: p, Sandbox: k, App: n } } }); DISQUS.define("next.publisher", function (e) { function g(a, c, b) { var d, b = b || c; if (a === f) return ""; e.getComputedStyle ? d = f.defaultView.getComputedStyle(a, null).getPropertyValue(c) : a.currentStyle && (d = a.currentStyle[c] ? a.currentStyle[c] : a.currentStyle[b]); return d == "transparent" || d === "" || d == "rgba(0, 0, 0, 0)" ? g(a.parentNode, c, b) : d || null } function d(a) { function c(a) { a = Number(a).toString(16); return a.length == 1 ? "0" + a : a } if (a.substr(0, 1) === "#") return a; var b = /.*?rgb\((\d+),\s*(\d+),\s*(\d+)\)/.exec(a); if (!b || b.length !== 4) return ""; var a = c(b[1]), d = c(b[2]), b = c(b[3]); return "#" + a + d + b } function b(a, b, d, e) { DISQUS.isString(b) && (b = f.createElement(b)); var m = null; b.style.visibility = "hidden"; a.appendChild(b); m = g(b, d, e); a.removeChild(b); return m } function m(a) { return a.toLowerCase().replace(/^\s+|\s+$/g, "").replace(/['"]/g, "") } var f = e.document; return { getContrastYIQ: function (a) { a.match("^rgb") && (a = d(a).substr(1)); var b = parseInt(a.substr(0, 2), 16), e = parseInt(a.substr(2, 2), 16), a = parseInt(a.substr(4, 2), 16); return (b * 299 + e * 587 + a * 114) / 1E3 }, colorToHex: d, getElementStyle: b, getAnchorColor: function (a) { var c = f.createElement("a"); c.href = +new Date; return b(a, c, "color") }, normalizeFontValue: m, isSerif: function (a) { for (var a = b(a, "span", "font-family", "fontFamily").split(","), c = { courier: 1, times: 1, "times new roman": 1, georgia: 1, palatino: 1, serif: 1 }, d, e = 0; e < a.length; e++) if (d = m(a[e]), c.hasOwnProperty(d)) return !0; return !1 } } }); DISQUS.define(function () { function e(e) { DISQUS.App.call(this); this.switches = {}; var d = { target: e.useSSL ? "https://securecdn.disqus.com/1356132141/build/next-switches/client_ssl.html" : "http://mediacdn.disqus.com/1356132141/build/next-switches/client.html", container: e.container }; d.origin = e.useSSL ? "https://securecdn.disqus.com" : "http://mediacdn.disqus.com"; this.frame = new DISQUS.Channel(d); var b = this; this.frame.load(function () { b.frame.elem.style.display = "none" }) } e.prototype = DISQUS.extend({ fetch: function (e) { var d = this, e = e || {}, b = e.success; delete e.success; this.frame.on("switches.received", function (e) { d.switches = e; DISQUS.trigger("switches.changed", e); b && b(e) }); this.frame.sendMessage("fetch", e) }, enabled: function (e) { return this.switches[e] ? this.switches[e] : !1 } }, DISQUS.App.prototype); return { Switches: function (g) { return new e(g) } } }); DISQUS.define(function () { var e = function (e) { DISQUS.App.call(this); this.settings = e; this.frame = null }; DISQUS.extend(e.prototype, DISQUS.App.prototype); e.prototype.init = function () { var e = this.settings, d = "http://disqus.com/embed/profile/", b = "http://disqus.com"; e.useSSL && (d = "https://disqus.com/embed/profile/", b = "https://disqus.com"); var m = this.frame = new DISQUS.Channel({ origin: b, target: DISQUS.serialize(d, { f: e.forum }), container: e.container, uid: this.uid, styles: { height: "100%", position: "fixed", top: 0, left: 0 } }); m.on("ready", function a() { m.off("ready", a); m.sendMessage("init"); this.trigger("loading.init") }, this); m.on("close", function () { this.frame.elem.style.display = "none" }, this); m.load(); this.trigger("loading.start") }; e.prototype.showProfile = function (e) { var d = this.frame; if (!d.isReady) return void d.on("ready", function m() { d.off("ready", m); this.showProfile(e) }, this); d.sendMessage("showProfile", e); d.elem.style.display = "block" }; e.prototype.destroy = function () { DISQUS.App.prototype.destroy.call(this) }; return { Profile: function (g) { return new e(g) } } }); DISQUS.define("backplane", function () { var e; try { localStorage.setItem("disqus.localStorageTest", "disqus"), localStorage.removeItem("disqus.localStorageTest"), e = !0 } catch (g) { e = !1 } var d = function (b) { this.frame = b; this.credentials = "unset"; var d = this; typeof Backplane === "function" && typeof Backplane.version === "string" && typeof Backplane.subscribe === "function" && e && Backplane(function () { d.initialize() }) }; DISQUS.extend(d.prototype, { frameEvents: { invalidate: "clearCredentials" }, initialize: function () { var b = this; DISQUS.each(this.frameEvents, function (d, e) { b.frame.on("backplane." + e, typeof d === "function" ? d : b[d], b) }); this.credentialsFromLocalStorage() && this.frame.sendMessage("login", { backplane: this.credentials }); this.subscribe() }, subscribe: function () { var b = this; Backplane.subscribe(function (d) { var e = b.handlers[d.type]; e && e.call(b, d) }) }, handlers: { "identity/login": function (b) { var d = b.messageURL, b = b.channel; this.credentials !== "unset" && this.credentials !== null && this.credentials.channel === b && this.credentials.messageUrl === d || (this.setCredentials(b, d), this.frame.sendMessage("login", { backplane: this.getCredentials() })) } }, credentialsFromLocalStorage: function () { var b = localStorage.getItem("disqus.backplane.channel"), d = localStorage.getItem("disqus.backplane.messageUrl"); this.setCredentials(b, d, !0); return this.credentials }, setCredentials: function (b, d, e) { if (!b || !d) return void this.clearCredentials(); e || (localStorage.setItem("disqus.backplane.channel", b), localStorage.setItem("disqus.backplane.messageUrl", d)); this.credentials = { channel: b, messageUrl: d } }, getCredentials: function () { if (this.credentials !== "unset") return this.credentials; return this.credentialsFromLocalStorage() }, clearCredentials: function (b) { b = b || {}; this.credentials = null; localStorage.removeItem("disqus.backplane.channel"); localStorage.removeItem("disqus.backplane.messageUrl"); if (b.redirectUrl) window.location = b.redirectUrl } }); return { BackplaneIntegration: d } }); DISQUS.define(function (e, g) { function d(a, b, c, d, e, f) { return '' + d + '" } function b(a) { for (var b = DISQUS.App.list(), d = 0, e = b.length, b = b[d]; d < e; d++) b instanceof c && a(b) } var m = e.document, f = ["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", "TkSuQmCC"], a = ["R0lGODlhEAALAPQAAP///z2LqeLt8dvp7u7090GNqz2LqV+fuJ/F1IW2ycrf51aatHWs", "waXJ14i4ys3h6FmctUCMqniuw+vz9eHs8fb5+meku+Tu8vT4+cfd5bbT3tbm7PH2+AAA", "AAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQu", "aW5mbwAh+QQJCwAAACwAAAAAEAALAAAFLSAgjmRpnqSgCuLKAq5AEIM4zDVw03ve27if", "DgfkEYe04kDIDC5zrtYKRa2WQgAh+QQJCwAAACwAAAAAEAALAAAFJGBhGAVgnqhpHIeR", "vsDawqns0qeN5+y967tYLyicBYE7EYkYAgAh+QQJCwAAACwAAAAAEAALAAAFNiAgjoth", "LOOIJAkiGgxjpGKiKMkbz7SN6zIawJcDwIK9W/HISxGBzdHTuBNOmcJVCyoUlk7CEAAh", "+QQJCwAAACwAAAAAEAALAAAFNSAgjqQIRRFUAo3jNGIkSdHqPI8Tz3V55zuaDacDyIQ+", "YrBH+hWPzJFzOQQaeavWi7oqnVIhACH5BAkLAAAALAAAAAAQAAsAAAUyICCOZGme1rJY", "5kRRk7hI0mJSVUXJtF3iOl7tltsBZsNfUegjAY3I5sgFY55KqdX1GgIAIfkECQsAAAAs", "AAAAABAACwAABTcgII5kaZ4kcV2EqLJipmnZhWGXaOOitm2aXQ4g7P2Ct2ER4AMul00k", "j5g0Al8tADY2y6C+4FIIACH5BAkLAAAALAAAAAAQAAsAAAUvICCOZGme5ERRk6iy7qpy", "HCVStA3gNa/7txxwlwv2isSacYUc+l4tADQGQ1mvpBAAIfkECQsAAAAsAAAAABAACwAA", "BS8gII5kaZ7kRFGTqLLuqnIcJVK0DeA1r/u3HHCXC/aKxJpxhRz6Xi0ANAZDWa+kEAA7", "AAAAAAAAAAAA"], c = function (a) { DISQUS.App.call(this); this.settings = a; this.indicators = { north: null, south: null }; this._boundGlobalEvents = []; this.frame = null }; DISQUS.extend(c.prototype, DISQUS.App.prototype); c.prototype.init = function () { function b(a, c, d) { j.on("affiliateLink", function (b) { var e = DISQUS.vglnk.$; if (!e) return void j.sendMessage("affiliateLink"); e.request(a + "/click", { format: "jsonp", out: b.url, key: c, loc: j.target, subId: d }, { fn: function (a) { return function (b) { var c = { token: a }; if (b) c.url = b; j.sendMessage("affiliateLink", c) } }(b.token), timeout: DISQUS.vglnk.opt("click_timeout") }) }) } function c(a, b) { k._boundGlobalEvents.push(a); DISQUS.on(a, b, k) } var k = this, i = k.settings, l = "http://disqus.com/embed/comments/", n = "http://disqus.com"; i.useSSL && (l = "https://disqus.com/embed/comments/", n = "https://disqus.com"); var q = { f: i.forum, t_i: i.identifier, t_u: i.url || e.location.href, t_s: i.slug, t_t: i.title, s_o: i.sortOrder, c: i.useConman || g }; if (i.notSupported) q.n_s = 1; var r = DISQUS.isString(i.container) ? m.getElementById(i.container) : i.container, j = k.frame = new DISQUS.Channel({ origin: n, target: DISQUS.serialize(l, q), container: i.container, uid: this.uid }); if (i.notSupported) j.styles.height = "500px"; var u = !1, s, v; if (!i.notSupported) s = m.createElement("div"), s.innerHTML = d(71, 17, "png", "DISQUS", f.join("")) + d(16, 11, "gif", "...", a.join(""), "margin:0 0 3px 5px"), r.appendChild(s); l = function () { var a = j.getPosition(), b = e.pageYOffset, c = e.innerHeight, d = j.inViewport(a); d ? (u = !0, j.sendMessage("window.scroll", { frameOffset: a, pageOffset: b, height: c }), j.sendMessage("window.inViewport")) : u && !d && (u = !1, j.sendMessage("window.scrollOffViewport")) }; j.on("ready", function o(a) { j.off("ready", o); s && s.parentNode === r && r.removeChild(s); e.clearTimeout(v); var b = { themeUrl: i.themeUrl, permalink: i.permalink, anchorColor: i.anchorColor, referrer: e.location.href, colorScheme: i.colorScheme, language: i.language, typeface: i.typeface, remoteAuthS3: i.remoteAuthS3, apiKey: i.apiKey, sso: i.sso, parentWindowHash: e.location.hash }; if (e.navigator.userAgent.match(/(iPad|iPhone|iPod)/)) b.width = j.elem.offsetWidth; j.inViewport() && j.sendMessage("window.inViewport"); k.clientData = a; j.sendMessage("init", b); k.trigger("loading.init") }); j.on("resize", function (a) { j.elem.style.height = a.height + "px" }); j.on("reload", function () { e.location.reload() }); j.on("reset", function () { DISQUS.reset({ reload: !0 }) }); j.on("posts.paginate", function () { k.trigger("posts.paginate") }); j.on("posts.create", function (a) { k.trigger("posts.create", { id: a.id, text: a.raw_message }) }); j.on("scrollTo", function (a) { var b = j.getPosition(), b = a.relative === "window" ? a.top : b.top + a.top; (a.force || !(b > e.pageYOffset && b < e.pageYOffset + e.innerHeight)) && e.scrollTo(0, b) }); j.on("fakeScroll", l); j.on("realtime.init", function (a) { for (var b = ["north", "south"], c, d, e = 0; e < b.length; e++) d = b[e], c = new DISQUS.Sandbox({ uid: "-indicator-" + d, container: k.settings.container, contents: a[d].contents, styles: a[d].styles }), c.load(), c.hide(), function (a) { c.click(function () { j.sendMessage("realtime.click", a) }) }(d), k.indicators[d] = c }); j.on("realtime.showNorth", function (a) { var b = k.indicators.north; b.document.getElementById("message").innerHTML = a; b.show() }); j.on("realtime.hideNorth", function () { k.indicators.north.hide() }); j.on("realtime.showSouth", function (a) { var b = k.indicators.south; b.document.getElementById("message").innerHTML = a; b.show() }); j.on("realtime.hideSouth", function () { k.indicators.south.hide() }); j.on("mainViewRendered", function () { DISQUS.trigger("lounge:mainViewRendered"); k.trigger("loading.done") }); j.on("profile.show", function (a) { if (!k.profile) k.profile = DISQUS.Profile({ container: i.container, useSSL: i.useSSL, forum: i.forum }), k.profile.init(); k.profile.showProfile(a.username) }); j.on("loadLinkAffiliator", function (a) { j.off("loadLinkAffiliator"); if (!e.vglnk_self && !e.vglnk && ! function () { for (var a in e) if (a.indexOf("skimlinks") === 0 || a.indexOf("skimwords") === 0) return !0; return !1 }()) { var c = a.apiUrl, d = a.key, f = String(a.id); if (!(a.clientUrl == null || c == null || d == null || a.id == null)) DISQUS.define("vglnk", function () { return { api_url: c, key: d, sub_id: f } }), e.vglnk_self = "DISQUS.vglnk", DISQUS.require(a.clientUrl), DISQUS.defer(function () { return DISQUS.vglnk.opt }, function () { j.sendMessage("affiliationOptions", { timeout: DISQUS.vglnk.opt("click_timeout") }) }), b(c, d, f) } }); j.on("loadBackplane", function () { j.off("loadBackplane"); k.backplane = new DISQUS.backplane.BackplaneIntegration(j) }); v = e.setTimeout(function () { s.innerHTML += '

DISQUS seems to be taking longer than usual. Reload?

' }, 1E4); j.load(function () { i.notSupported ? (j.elem.setAttribute("height", "500px"), j.elem.setAttribute("scrolling", "yes"), j.elem.setAttribute("horizontalscrolling", "no"), j.elem.setAttribute("verticalscrolling", "yes")) : (j.elem.setAttribute("scrolling", "no"), j.elem.setAttribute("horizontalscrolling", "no"), j.elem.setAttribute("verticalscrolling", "no")) }); c("window.hashchange", function (a) { j.sendMessage("window.hashchange", a.hash) }); c("window.resize", function () { j.sendMessage("window.resize") }); c("window.scroll", l); c("window.click", function () { j.sendMessage("window.click") }); c("switches.changed", function (a) { j.sendMessage("switches.changed", a) }); k.trigger("loading.start") }; c.prototype.destroy = function () { var a = this.indicators; this.off(); if (this._boundGlobalEvents.length) DISQUS.off(this._boundGlobalEvents.join(" "), null, this), this._boundGlobalEvents = null; this.frame && this.frame.destroy(); if (a.north) a.north.destroy(), a.north = null; if (a.south) a.south.destroy(), a.south = null; DISQUS.App.prototype.destroy.call(this) }; var n = function (a) { return new c(a) }; DISQUS.extend(n, { listByKey: function () { var a = {}; b(function (b) { a[b.uid] = b }); return a }, list: function () { var a = []; b(function (b) { a.push(b) }); return a }, get: function (a) { a = DISQUS.App.get(a); return a instanceof c && a } }); return { Lounge: n } }); (function (e, g, d) { function b() { function a(b) { var b = b.getAttribute ? b.getAttribute("src") : b.src, c = [/(https?:)\/\/(www\.)?disqus\.com\/forums\/([\w_\-]+)/i, /(https?:)\/\/(www\.)?([\w_\-]+)\.disqus\.com/i, /(https?:)\/\/(www\.)?dev\.disqus\.org\/forums\/([\w_\-]+)/i, /(https?:)\/\/(www\.)?([\w_\-]+)\.dev\.disqus\.org/i], d = c.length; if (!b || b.substring(b.length - 8) != "embed.js") return null; for (var e = 0; e < d; e++) { var f = b.match(c[e]); if (f && f.length && f.length == 4) return p = f[1] || null, f[3] } return null } for (var b = g.getElementsByTagName("script"), c = b.length - 1; c >= 0; c--) { var d = a(b[c]); if (d !== null) return d } return null } function m() { if (e.location.protocol === "https:") return !0; p === d && b(); return p === "https:" } function f() { for (var a = g.getElementsByTagName("h1"), b = g.title, c = b.length, e = b, f = 0.6, h = 0; h < a.length; h++)(function (a) { var a = a.textContent || a.innerText, g; if (!(a === null || a === d)) { g = 0; for (var h = Array(b.length), i = 0; i <= b.length; i++) { h[i] = Array(a.length); for (var j = 0; j <= a.length; j++) h[i][j] = 0 } for (i = 0; i < b.length; i++) for (j = 0; j < a.length; j++) b[i] == a[j] && (h[i + 1][j + 1] = h[i][j] + 1, h[i + 1][j + 1] > g && (g = h[i + 1][j + 1])); g /= c; g > f && (f = g, e = a) } })(a[h]); return e } function a() { g.getElementById(n).innerHTML = ""; var a = i.page; if (!e.postMessage || !e.JSON) r = !0; if (e.navigator.appName === "Microsoft Internet Explorer" && (!g.documentMode || g.documentMode < 8)) r = !0; a = { container: n, forum: l, sortOrder: "popular", permalink: k, useSSL: m(), language: i.language, typeface: c.isSerif(h) ? "serif" : "sans-serif", anchorColor: c.getAnchorColor(h), colorScheme: 128 < c.getContrastYIQ(c.getElementStyle(h, "span", "color")) ? "dark" : "light", url: a.url || e.location.href.replace(/#.*$/, ""), title: a.title || f(), slug: a.slug, category: a.category_id, identifier: a.identifier, apiKey: a.api_key, remoteAuthS3: a.remote_auth_s3, sso: i.sso, themeUrl: e.disqus_theme_root_url, useConman: e.disqus_demo, notSupported: r }; q = DISQUS.Lounge(a); var b = { onReady: "loading.done", onNewComment: "posts.create", onPaginate: "posts.paginate" }; DISQUS.each(i.callbacks, function (a, c) { b[c] && DISQUS.each(a, function (a) { q.on(b[c], a) }) }); q.init() } var c = DISQUS.use("next.publisher"), n = e.disqus_container_id || "disqus_thread", h = g.getElementById(n), p, k = function () { var a = e.location.hash; return (a = a && a.match(/comment\-([0-9]+)/)) && a[1] }(), i = { page: { url: d, title: d, slug: d, category_id: d, identifier: d, language: d, api_key: d, remote_auth_s3: d, author_s3: d, developer: d }, strings: d, sso: {}, callbacks: { preData: [], preInit: [], onInit: [], afterRender: [], onReady: [], onNewComment: [], preReset: [], onPaginate: [] } }; DISQUS.each(["developer", "shortname", "identifier", "url", "title", "category_id", "language", "slug"], function (a) { var b = e["disqus_" + a]; typeof b !== "undefined" && (i.page[a] = b) }); var l = e.disqus_shortname || b(), l = l.toLowerCase(); if (typeof e.disqus_config === "function") try { e.disqus_config.call(i) } catch (t) {} var q, r = !1; a(); if (!r) { var j = DISQUS.Switches({ container: n, useSSL: m() }); j.fetch({ data: { forum: l } }); DISQUS.domready(function () { if (g.getElementsByClassName) { var a = g.getElementsByClassName("dsq-brlink"); a && a.length && a[0].parentNode.removeChild(a[0]) } }); DISQUS.request = { get: function (a, b, c) { DISQUS.require(a, b, c) } }; DISQUS.reset = function (b) { b = b || {}; if (typeof b.config === "function") try { b.config.call(i) } catch (c) {} q && (q.destroy(), q = null); b.reload && (a(), DISQUS.trigger("switches.changed", j.switches)) } } })(this, this.document);