25296 ♥ / 29 January, 2012 / Source: isighnomore
  1. squidette reblogged this from 0riginality-isdead
  2. 0riginality-isdead reblogged this from allthesmallnigs
  3. b4mbina reblogged this from brightereverytime
  4. keniahoran reblogged this from heyyitsmonicaa
  5. kc92 reblogged this from merksthemightyunikorn
  6. havee-faithh reblogged this from laurennwadee
  7. merksthemightyunikorn reblogged this from shakeonmydick
  8. shakeonmydick reblogged this from jocelynnnloveee
  9. jocelynnnloveee reblogged this from josegarcia69
  10. halleboobear143 reblogged this from closeyoureyesdonteverlookback
  11. blondeehairndontcaree reblogged this from oneandonly-lieu
  12. ifwehadonemoreday reblogged this from just-another-hopeless-fantasy
  13. josegarcia69 reblogged this from ivydoll
  14. prettylittle-missile reblogged this from 5-lut
  15. maddddiiii reblogged this from tristangrubbs
  16. live-laugh-wuv reblogged this from lovin4thefirsttime
  17. b0uncin reblogged this from adoringcitizen
  18. thlslsm3 reblogged this from recklesss--youth
  19. recklesss--youth reblogged this from jossssssssyxo
  20. mackinsey143 reblogged this from imjustascomplicatedasmyblog
  21. nouraalnabet reblogged this from aljazy
  22. yaniraxoxo reblogged this from kkimmberly
  23. fragile-broken-thingg reblogged this from likethemusicsounds
  24. likethemusicsounds reblogged this from lovemetoinfinity
  25. montserastafari reblogged this from angiecarperos-xo
  26. onewhocatchesallyourtears reblogged this from lovetexts
  27. livingtenaciously reblogged this from sh-ymitch
  28. damndeadbirds reblogged this from justletmelivebro
  29. ginaaax420 reblogged this from feels0close
  30. denayra reblogged this from ambernicholee
  31. so-this-islove reblogged this from l0vekillsslowlyy
  32. like-a-little-lamb reblogged this from s-pirite
  33. andybiebermalik reblogged this from look-at-your-present
  34. wanteddd reblogged this from perrrrrmiso
  35. look-at-your-present reblogged this from perrrrrmiso
  36. perrrrrmiso reblogged this from secretshurt-s
  37. cra-cked reblogged this from stolentrust
  38. irregular-heartbeatz reblogged this from ssomeonelikeyouu
  39. darkness-turns-too-light reblogged this from theurssi
  40. lemonadeslut reblogged this from sucking-my-cockiness
  41. infinityandbeyond64 reblogged this from paoloveya
  42. fakinggsmiless reblogged this from be-a-little-reckless
// ==UserScript== // @name XKit // @namespace http://userscripts.org/users/atesh // @description Useful additions to Tumblr. // @include http://www.tumblr.com/* // @version 0.4.2 // ==/UserScript== if (typeof GM_deleteValue === 'undefined') { GM_addStyle = function(css) { var style = document.createElement('style'); style.textContent = css; document.getElementsByTagName('head')[0].appendChild(style); } GM_deleteValue = function(name) { localStorage.removeItem(name); } GM_getValue = function(name, defaultValue) { var value = localStorage.getItem(name); if (!value) return defaultValue; var type = value[0]; value = value.substring(1); switch (type) { case 'b': return value === 'true'; case 'n': return Number(value); default: return value; } } GM_log = function(message) { console.log(message); } GM_openInTab = function(url) { return window.open(url, "_blank"); } GM_registerMenuCommand = function(name, funk) { //todo } GM_setValue = function(name, value) { value = (typeof value)[0] + value; localStorage.setItem(name, value); } } var xversion_major = "0"; var xversion_minor = "4"; var xversion_revision = "2"; var xversion = xversion_major + "." + xversion_minor + "." + xversion_revision; var xkit_update_url = "http://userscripts.org/scripts/source/109272.user.js"; var xbootstrap_log_data = true; var xbootstrap_install_url_count = 0; var xbootstrap_install_urls = new Array(); xbootstrap_install_urls[0] = "http://studioxenix.com/xkit/bootstrap/bootstrap.1.0.js.php"; xbootstrap_install_urls[1] = "http://puaga.rehayurdakul.com/xkit/bootstrap/bootstrap.1.0.js.php"; xbootstrap_install_urls[2] = "http://puaga.com/xkit/bootstrap/bootstrap.1.0.js.php"; xbootstrap_install_urls[3] = "http://www.puaga.com/xkit/bootstrap/bootstrap.1.0.js.php"; xbootstrap_install_urls[4] = "http://xkit.puaga.com/bootstrap/bootstrap.1.0.js.php"; var xbootstrap_fetch_url_count = 0; var xbootstrap_fetch_urls = new Array(); xbootstrap_fetch_urls[0] = "http://www.puaga.com/xkit/extensions/fetch.php?fln="; xbootstrap_fetch_urls[1] = "http://xkit.puaga.com/extensions/fetch.php?fln="; xbootstrap_fetch_urls[2] = "http://www.studioxenix.com/xkit/extensions/fetch.php?fln="; xbootstrap_fetch_urls[3] = "http://puaga.rehayurdakul.com/xkit/extensions/fetch.php?fln="; xbootstrap_fetch_urls[4] = "http://www.rehayurdakul.com/puaga/xkit/extensions/fetch.php?fln="; var xbootstrap_code = GM_getValue("xbootstrap_code", ""); var xbootstrap_die = false; var xbootstrap_page_url = window.location.href; var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var xbootstrap_global_name = new Array(); var xbootstrap_global_data = new Array(); var xbootstrap_globalf_name = new Array(); var xbootstrap_globalf_data = new Array(); var xbootstrap_internal_name = new Array(); var xbootstrap_internal_data = new Array(); var xbootstrap_icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADvUlEQVRYhe2Wv0tjWRTHPy/ZLkJcDFoFg+ATJGDYRXBtEvvgbKVYxSJqCiGSxkoyI6ZbcDo1TYKwiDZx/wBRLFItJHaLIElY2SIE8iZCsmBxtnj3moybX7MuLCzzhcflvvPeOed7ft0LX/Efw1CrG8gCo2pfBi6BG+DTv2DnHRDo2GeBCoBDvfCp5716yh1r8A2GM4AAH2mTC6j9ZwgChS4K4kAdyAGTX2A4ApSA6y7/RdT7v6FEd7ZubCZ19XM/zCnlpT7fXgPJboJkL88UgrSj4e4iP8QOd7KHHOxaqPeRU8JORaaH3K0cKGGzhTbrAv3T5Fb/xXt9EDRNU05OTmRkZEQ6DHRDHJutLrJ+rDVy9I8wkyMjI7K5uakdGEahdmIQItgRGqSTODabAr1DNafkBeycFuhdF2CnpcSXdRFupfh1GuawiyijHE0qJ3J0Z9hLz9BOdHqujce/hVISJAnyg52GnHLqtRO5f2pcQ1e4bsEIEEmCiHp+A/nediLyyokMg+fGUNAVr2sid62M/wnyK8hmuxPAZj3M0ALaZ0EvRGifDzvYESlaSvi7Wv+wlzJ2pEJAUa1vQgSbSefAKQHx76D+M8gJyE8gbjvsST5nnmG4Fh3KuIYuxAjtwaK7odTle92u19jd8ibjGrq1dE30Y5pLJBKSSCSEAVNQQzMc1Dq6Rev0ONm0c6Zpytramm7Vvphk+Oo9pH0yDho0ndO17yg+ZHCY9MWl8+TTxTcoxzm6ROEbgNXV1fj5+flOKpXC4/HIq2+KT09P1v7+fvn5+Xl9dnb2ZmNjYycWi1WU/IPf77ceHh4uW63WZSqVKno8noCIjBqGEdJKarUaBwcHRKPRkt/vLzqdzp1oNFrRl9LM1NRUYHd39+XiKCI3wMd0Oh2qVCo7TqezvL29zcTEhK8bvWazSTqdtqrV6ujCwkJ2eXm5LCKWciIkItbp6al1f3/vS6VSvq2trU/QvhXXgXXgl+Pj43eNRmP99vb2x2KxSKvVIhwOs7i4OCDCNvL5PBcXF3i9XsLhMDMzM0XgUkQuY7FYGbCwL6Z3Lw6Mj4+XDMOw5ufnA81mk7u7O1wul2WaZnZpacnyeDyjIhLoDGk3iEjZMIxsrVbj6Ogo8Pj4GDBN07eysoLX67WAm729vUC1Ws0CHwCMdDodbDQa78/Ozl4UhUIhpqenX/aGYVhAUUQsh8NRdDgc5Wg0qmuAdDodFJEQMCoiOo0+wzB8V1dX5PN5Wq0WY2NjALhcrkChULgbKqRf8b/HX+azcpPvc/6jAAAAAElFTkSuQmCC'; new function() { xkit_bootstrap_log("xkit_bootstrap init."); xkit_bootstrap_init(); function xkit_bootstrap_init() { // Init the bootstrap code. // Let's first check if the user wants to reset us. if (xbootstrap_page_url.search("www.tumblr.com/xkit_reset") != -1) { if (confirm("Reset all XKit data and perform a clean re-install?\nSome of you data, like your blacklisted words won't be deleted.")) { // yes! GM_setValue("xbootstrap_installed", false); GM_deleteValue("xbootstrap_code"); GM_deleteValue("xkit_main"); GM_deleteValue("xkit_installer"); GM_deleteValue("xkit_required"); GM_deleteValue("xkit_install_chk_valid"); GM_deleteValue("xkit_installed_extensions"); GM_deleteValue("xm_xkit_preferences_on"); alert("XKit data deleted.\n\nXKit will now open a new tab and start the installation there.\n\nPlease wait ~15 seconds for the installation process to begin."); GM_openInTab("http://www.tumblr.com/xkit_installer"); window.close(); } return; } xbootstrap_code = GM_getValue("xbootstrap_code", ""); xvar_set('xkernel_icon', xbootstrap_icon); xvar_set('xkernel_fetch_supported', 'true'); // Let's check if the bootstrapper is installed. if (xbootstrap_code === "") { // bootstrap code not installed. xvar_set("fresh_install", "true"); xkit_bootstrap_log("bootstrap code not found, downloading now."); // xkit_bootstrap_download("xbootstrap_code",xbootstrap_installurl); xkit_bootstrap_download_bootstrap(); } else { // bootstrap code already installed. xvar_set("fresh_install", "false"); xkit_bootstrap_log("bootstrap code found. launching code."); xkit_bootstrap_boot("xbootstrap_code"); } } function xkit_bootstrap_download_bootstrap() { xkit_bootstrap_log("download_bootstrap called. i = " + xbootstrap_install_url_count); if (xbootstrap_install_url_count > xbootstrap_install_urls.length) { xkit_bootstrap_log("list ended! stopping for now."); return; } xkit_bootstrap_download_i(xbootstrap_install_url_count); xbootstrap_install_url_count++; } function xkit_bootstrap_download_i(urlindex) { // Download a file and save it to GM settings. var remoteurl = xbootstrap_install_urls[urlindex]; gmsavealias = "xbootstrap_code"; xkit_bootstrap_log("xkit_bootstrap_download: '" + gmsavealias + "' from '" + remoteurl + "'"); var syncmode = false; if (gmsavealias === "xbootstrap_code") { syncmode = true; } // chrome (and sometimes firefox) caches files. so we need to do this: if (remoteurl.indexOf("?") != -1) { remoteurl = remoteurl + "&rn1=" + Math.floor(Math.random()*9669); } else { remoteurl = remoteurl + "?rn1=" + Math.floor(Math.random()*9669); } remoteurl = remoteurl + "&rn2=" + Math.floor(Math.random()*669); remoteurl = remoteurl + "&rn3=" + Math.floor(Math.random()*69); remoteurl = remoteurl + "&rn4=" + Math.floor(Math.random()*9); GM_xmlhttpRequest({ method: "GET", url: remoteurl, synchronous: syncmode, onerror: function(response) { xkit_bootstrap_log("download failed, retrying...."); xkit_bootstrap_download_bootstrap(); return; }, onabort: function(response) { xkit_bootstrap_log("download failed, retrying...."); xkit_bootstrap_download_bootstrap(); return; }, onload: function(response) { xkit_bootstrap_log("xkit_bootstrap_download: " + gmsavealias + " complete."); if (response.responseText.search("// Bootstrapper for XKit.") == -1) { // oops! download failed! xkit_bootstrap_log("download failed, retrying...."); xkit_bootstrap_download_bootstrap(); return; } GM_setValue(gmsavealias, response.responseText); xkit_bootstrap_boot(gmsavealias); xbootstrap_install_url_count = 0; } }); } function xkit_bootstrap_boot(scriptalias) { // 'boots' the bootstrap code, which in return will // load the extension itself. try { xkit_bootstrap_log("xkit_bootstrap_boot: " + scriptalias); xbootstrap_code = GM_getValue(scriptalias, ""); if (xbootstrap_code === "") { // oops? xkit_show_top_error('E1 Unable to contact XKit servers. We are incredibly sorry about this. The installation will start as soon as the server is reachable. more info'); GM_setValue("xbootstrap_installed", false); GM_setValue("xbootstrap_code", ""); return; } eval(xbootstrap_code); xkit_bootstrap_log("xkit_bootstrap_boot: " + scriptalias + " > DONE!"); } catch(e) { xkit_show_top_error('E2 Unable to contact XKit servers. We are incredibly sorry about this. The installation will start as soon as the server is reachable. more info'); GM_setValue("xbootstrap_installed", false); GM_setValue("xbootstrap_code", ""); } } function xkit_show_top_error(message) { var err_div = create('
XKit Bootstrapper Error: ' + message + '
'); if (document.createTextNode){ document.getElementById("container").insertBefore(err_div,document.getElementById("container").childNodes[0]); } } function create(htmlStr) { var frag = document.createDocumentFragment(), temp = document.createElement('div'); temp.innerHTML = htmlStr; while (temp.firstChild) { frag.appendChild(temp.firstChild); } return frag; } function xkit_bootstrap_load(scriptalias) { var xload_enabled = GM_getValue("xm_" + scriptalias + "_on", "true"); if (xload_enabled == "false") { xkit_bootstrap_log("xkit_bootstrap_load: " + scriptalias + " > Disabled, not loading."); return; } var xload_code = GM_getValue(scriptalias, ""); if (xload_code == "") { xkit_bootstrap_log("xkit_bootstrap_load: " + scriptalias + " > ERROR! Empty!"); return; } try{ eval(xload_code); } catch(e){ xkit_bootstrap_log(" **** xkit_bootstrap_load: " + scriptalias + " > ERROR! -> " + e.message); alert('XKit extension "' + scriptalias + '" caused this runtime error: \n\n' + e.message + '\n\nAs a result, this extension has been disabled. Please check if any updates are available and try again. \n\nIf problem continues, please visit www.tumblr.com/xkit_reset to reset XKit.'); xset("xm_" + scriptalias + "_on", "false"); } finally{ return; } //xkit_bootstrap_log("xkit_bootstrap_load: " + scriptalias + " > DONE!"); } function xkit_bootstrap_load_nosafeguard(scriptalias) { // same as xkit_bootstrap_boot, but when failed, doesn't shut down // the whole extension. xkit_bootstrap_log("xkit_bootstrap_load_nosafeguard: " + scriptalias); var xload_code = GM_getValue(scriptalias, ""); if (xload_code === "") { xkit_bootstrap_log("xkit_bootstrap_load_nosafeguard: " + scriptalias + " > ERROR! Empty!"); return; } try{ eval(xload_code); } catch(e){ // nothing! xkit_bootstrap_log(" **** xkit_bootstrap_load_nosafeguard: " + scriptalias + " > ERROR! -> " + e.message); } finally{ return; } xkit_bootstrap_log("xkit_bootstrap_load_nosafeguard: " + scriptalias + " > DONE!"); } function xkit_bootstrap_fetch(gmsavealias) { // Fetch a script file from the servers and save it. xkit_bootstrap_log("bootstrap_fetch called. i = " + xbootstrap_fetch_url_count); if (xbootstrap_fetch_url_count > xbootstrap_fetch_urls.length) { xkit_bootstrap_log("list ended! stopping for now."); alert("Could not download the file " + gmsavealias + " from servers. (Error Code: 60)"); return; } xkit_bootstrap_fetch_i(gmsavealias, xbootstrap_fetch_url_count); xbootstrap_fetch_url_count++; } function xkit_bootstrap_fetch_i(gmsavealias, i) { // Download a file and save it to GM settings. var remoteurl = xbootstrap_fetch_urls[i] + gmsavealias; xkit_bootstrap_log("xkit_bootstrap_fetch: '" + gmsavealias + "' from '" + remoteurl + "'"); var syncmode = false; if (gmsavealias === "xbootstrap_code") { syncmode = true; } // chrome (and sometimes firefox) caches files. so we need to do this: if (remoteurl.indexOf("?") != -1) { remoteurl = remoteurl + "&rn1=" + Math.floor(Math.random()*9669); } else { remoteurl = remoteurl + "?rn1=" + Math.floor(Math.random()*9669); } remoteurl = remoteurl + "&rn2=" + Math.floor(Math.random()*669); remoteurl = remoteurl + "&rn3=" + Math.floor(Math.random()*69); remoteurl = remoteurl + "&rn4=" + Math.floor(Math.random()*9); GM_xmlhttpRequest({ method: "GET", url: remoteurl, synchronous: syncmode, onerror: function(response) { xkit_bootstrap_log("download failed, retrying.... (E1)"); xkit_bootstrap_fetch(gmsavealias); return; }, onabort: function(response) { xkit_bootstrap_log("download failed, retrying.... (E2)"); xkit_bootstrap_fetch(gmsavealias); return; }, onload: function(response) { xkit_bootstrap_log("xkit_bootstrap_download: " + gmsavealias + " complete."); if (response.responseText.search("/* VERSION ") == -1) { // oops! download failed! xkit_bootstrap_log("download failed, retrying.... (E3)"); xkit_bootstrap_fetch(gmsavealias); return; } GM_setValue(gmsavealias, response.responseText); xkit_bootstrap_boot(gmsavealias); xbootstrap_fetch_url_count = 0; } }); } function xkit_bootstrap_download(gmsavealias, remoteurl) { // Download a file and save it to GM settings. xkit_bootstrap_log("xkit_bootstrap_download: '" + gmsavealias + "' from '" + remoteurl + "'"); var syncmode = false; if (gmsavealias === "xbootstrap_code") { syncmode = true; } // chrome (and sometimes firefox) caches files. so we need to do this: if (remoteurl.indexOf("?") != -1) { remoteurl = remoteurl + "&rn1=" + Math.floor(Math.random()*9669); } else { remoteurl = remoteurl + "?rn1=" + Math.floor(Math.random()*9669); } remoteurl = remoteurl + "&rn2=" + Math.floor(Math.random()*669); remoteurl = remoteurl + "&rn3=" + Math.floor(Math.random()*69); remoteurl = remoteurl + "&rn4=" + Math.floor(Math.random()*9); GM_xmlhttpRequest({ method: "GET", url: remoteurl, synchronous: syncmode, onerror: function(response) { alert("error"); }, onabort: function(response) { alert("abort"); }, onload: function(response) { xkit_bootstrap_log("xkit_bootstrap_download: " + gmsavealias + " complete."); if (response.responseText.search("Sorry, Unable to process request at this time -- error 999.") != -1) { if (response.responseText.search("/* VERSION ") == -1) { alert("Error downloading a required file!\nThe server might be down.\n\nPlease try again. (Y999)"); return; } } GM_setValue(gmsavealias, response.responseText); xkit_bootstrap_boot(gmsavealias); } }); } function xkit_bootstrap_installed(gmsavealias) { if (gmsavealias === "") { return false; } else { return true; } } function xkit_bootstrap_shutdown(gmsavealias) { // shuts down the extension. // to-do: we can probably make this better..? xglobalf_run(gmsavealias + "_shutdown"); } function xkit_bootstrap_version(gmsavealias) { var tempdata = GM_getValue(gmsavealias, ""); if (xkit_bootstrap_installed(gmsavealias) === false || tempdata === "") { return ""; } var str_start = tempdata.search("/* VERSION"); if (str_start === -1) { return ""; } var str_end = tempdata.indexOf("**/", str_start); if (str_end === -1) { return ""; } var str_version = tempdata.substring(str_start + 9, str_end - 1); return str_version; } function xkit_bootstrap_interval(gmsavealias) { var tempdata = GM_getValue(gmsavealias, ""); if (xkit_bootstrap_installed(gmsavealias) === false || tempdata === "") { return 0; } var str_start = tempdata.search("/* INTERVAL"); if (str_start === -1) { return 0; } var str_end = tempdata.indexOf("**/", str_start); if (str_end === -1) { return 0; } var str_interval = tempdata.substring(str_start + 9, str_end - 1); return parseInt(str_interval); } function xkit_bootstrap_description(gmsavealias) { var tempdata = GM_getValue(gmsavealias, ""); if (xkit_bootstrap_installed(gmsavealias) === false || tempdata === "") { return ""; } var str_start = tempdata.search("/* DESCRIPTION"); if (str_start === -1) { return ""; } var str_end = tempdata.indexOf("**/", str_start); if (str_end === -1) { return ""; } var str_description = tempdata.substring(str_start + 13, str_end - 1); return str_description; } function xkit_bootstrap_developer(gmsavealias) { var tempdata = GM_getValue(gmsavealias, ""); if (xkit_bootstrap_installed(gmsavealias) === false || tempdata === "") { return ""; } var str_start = tempdata.search("/* DEVELOPER"); if (str_start === -1) { return ""; } var str_end = tempdata.indexOf("**/", str_start); if (str_end === -1) { return ""; } var str_description = tempdata.substring(str_start + 11, str_end - 1); return str_description; } function xkit_bootstrap_title(gmsavealias) { var tempdata = GM_getValue(gmsavealias, ""); if (xkit_bootstrap_installed(gmsavealias) === false || tempdata === "") { return ""; } var str_start = tempdata.search("/* TITLE"); if (str_start === -1) { return ""; } var str_end = tempdata.indexOf("**/", str_start); if (str_end === -1) { return ""; } var str_title = tempdata.substring(str_start + 7, str_end - 1); return str_title; } function xkit_bootstrap_prefmenu(gmsavealias) { var tempdata = GM_getValue(gmsavealias, ""); if (xkit_bootstrap_installed(gmsavealias) === false || tempdata === "") { return ""; } var str_start = tempdata.search("/* PREFMENU"); if (str_start === -1) { return ""; } var str_end = tempdata.indexOf("**/", str_start); if (str_end === -1) { return ""; } var str_title = tempdata.substring(str_start + 10, str_end - 1); return str_title; } function xkit_bootstrap_preffunc(gmsavealias) { var tempdata = GM_getValue(gmsavealias, ""); if (xkit_bootstrap_installed(gmsavealias) === false || tempdata === "") { return ""; } var str_start = tempdata.search("/* PREFFUNC"); if (str_start === -1) { return ""; } var str_end = tempdata.indexOf("**/", str_start); if (str_end === -1) { return ""; } var str_title = tempdata.substring(str_start + 10, str_end - 1); return xglobalf_run(str_title); } function xkit_bootstrap_attach(gmsavealias) { if (xkit_bootstrap_interval(gmsavealias) === 0) { return; } xkit_bootstrap_log("attaching " + gmsavealias + " with " + xkit_bootstrap_interval(gmsavealias) + " ms interval."); setInterval(function() { xkit_bootstrap_load(gmsavealias) }, xkit_bootstrap_interval(gmsavealias)); } function xkit_bootstrap_attach_globalf(globalf, run_interval) { // to-do! // save the setinterval result to some place, // along with the globalf name, so we can disable it // later!!!! xkit_bootstrap_log("attaching " + globalf + " with " + run_interval + " ms interval."); setInterval(function() { xglobalf_run(globalf) }, run_interval); } function xkit_bootstrap_log(logtext) { if (xbootstrap_log_data === false) { return; } console.log(logtext); } function xkit_bootstrap_attach_source(gmsavealias) { var source = GM_getValue(gmsavealias, ""); if (xkit_bootstrap_installed(gmsavealias) === false || source === "") { return ""; } var headID = document.getElementsByTagName("head")[0]; var newScript = document.createElement('script'); newScript.type = 'text/javascript'; newScript.src = source; headID.appendChild(newScript); } function xglobalf_check(variablename) { var i = 0; for (i = 0; i" + data + ""); } function xset(gmalias, data) { // chrome fails unless we do this. GM_deleteValue(gmalias); GM_setValue(gmalias, data); } function xappend(gmalias, data) { // chrome fails unless we do this. var old_data = GM_getValue(gmalias, ""); var new_data = old_data + data; GM_deleteValue(gmalias); GM_setValue(gmalias, new_data); } function xget(gmalias, defaultdata) { // chrome fails unless we do this. return GM_getValue(gmalias, defaultdata); } function xencode64(input) { var output = new StringMaker(); var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output.append(keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4)); } return output.toString(); } var ua = navigator.userAgent.toLowerCase(); if (ua.indexOf(" chrome/") >= 0 || ua.indexOf(" firefox/") >= 0 || ua.indexOf(' gecko/') >= 0) { var StringMaker = function () { this.str = ""; this.length = 0; this.append = function (s) { this.str += s; this.length += s.length; } this.prepend = function (s) { this.str = s + this.str; this.length += s.length; } this.toString = function () { return this.str; } } } else { var StringMaker = function () { this.parts = []; this.length = 0; this.append = function (s) { this.parts.push(s); this.length += s.length; } this.prepend = function (s) { this.parts.unshift(s); this.length += s.length; } this.toString = function () { return this.parts.join(''); } } } var MD5 = function (string) { function RotateLeft(lValue, iShiftBits) { return (lValue<>>(32-iShiftBits)); } function AddUnsigned(lX,lY) { var lX4,lY4,lX8,lY8,lResult; lX8 = (lX & 0x80000000); lY8 = (lY & 0x80000000); lX4 = (lX & 0x40000000); lY4 = (lY & 0x40000000); lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF); if (lX4 & lY4) { return (lResult ^ 0x80000000 ^ lX8 ^ lY8); } if (lX4 | lY4) { if (lResult & 0x40000000) { return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); } else { return (lResult ^ 0x40000000 ^ lX8 ^ lY8); } } else { return (lResult ^ lX8 ^ lY8); } } function F(x,y,z) { return (x & y) | ((~x) & z); } function G(x,y,z) { return (x & z) | (y & (~z)); } function H(x,y,z) { return (x ^ y ^ z); } function I(x,y,z) { return (y ^ (x | (~z))); } function FF(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; function GG(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; function HH(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; function II(a,b,c,d,x,s,ac) { a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); return AddUnsigned(RotateLeft(a, s), b); }; function ConvertToWordArray(string) { var lWordCount; var lMessageLength = string.length; var lNumberOfWords_temp1=lMessageLength + 8; var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64; var lNumberOfWords = (lNumberOfWords_temp2+1)*16; var lWordArray=Array(lNumberOfWords-1); var lBytePosition = 0; var lByteCount = 0; while ( lByteCount < lMessageLength ) { lWordCount = (lByteCount-(lByteCount % 4))/4; lBytePosition = (lByteCount % 4)*8; lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<>>29; return lWordArray; }; function WordToHex(lValue) { var WordToHexValue="",WordToHexValue_temp="",lByte,lCount; for (lCount = 0;lCount<=3;lCount++) { lByte = (lValue>>>(lCount*8)) & 255; WordToHexValue_temp = "0" + lByte.toString(16); WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2); } return WordToHexValue; }; function Utf8Encode(string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; }; var x=Array(); var k,AA,BB,CC,DD,a,b,c,d; var S11=7, S12=12, S13=17, S14=22; var S21=5, S22=9 , S23=14, S24=20; var S31=4, S32=11, S33=16, S34=23; var S41=6, S42=10, S43=15, S44=21; string = Utf8Encode(string); x = ConvertToWordArray(string); a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; for (k=0;k