{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./webAO/evercookie.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Fingerprint","options","nativeForEach","nativeMap","_classCallCheck","this","Array","forEach","map","each","obj","iterator","context","length","results","index","list","_typeof","hasher","screen_resolution","screen_orientation","canvas","ie_activex","keys","push","navigator","userAgent","language","screen","colorDepth","getScreenResolution","join","Date","getTimezoneOffset","hasSessionStorage","hasLocalStorage","window","indexedDB","document","body","addBehavior","openDatabase","cpuClass","platform","doNotTrack","getPluginsString","isCanvasSupported","getCanvasFingerprint","murmurhash3_32_gc","seed","remainder","bytes","h1","h1b","c1","c2","k1","charCodeAt","localStorage","e","sessionStorage","elem","createElement","getContext","isIE","appName","test","getIEPluginsString","getRegularPluginsString","plugins","mimeTypes","mt","type","suffixes","description","ActiveXObject","height","width","ctx","txt","textBaseline","font","fillStyle","fillRect","fillText","toDataURL"],"mappings":"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","file":"fingerprint.b.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/*\r\n***************************************************\r\n** http://davealger.info\r\n***************************************************\r\n\r\nThis is a javascript only way to fingerprint a user with better than 90% accuracy in as few bytes as possible and no cookie storage!\r\n\r\nSpecial thanks to Valentin Vasilyev for the original fingerprintjs slightly modified and to Open Source Device Fingerprinting by Dark Wave Tech for the various identity functions\r\n\r\n***************************************************\r\n*/\r\nexport default class Fingerprint {\r\n\tconstructor(options) {\r\n\t\tvar nativeForEach, nativeMap;\r\n\t\tnativeForEach = Array.prototype.forEach;\r\n\t\tnativeMap = Array.prototype.map;\r\n\t\tthis.each = function(obj, iterator, context) {\r\n\t\t\tif (obj === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (nativeForEach && obj.forEach === nativeForEach) {\r\n\t\t\t\tobj.forEach(iterator, context);\r\n\t\t\t} else if (obj.length === +obj.length) {\r\n\t\t\t\tfor (var i = 0, l = obj.length; i < l; i++) {\r\n\t\t\t\t\tif (iterator.call(context, obj[i], i, obj) === {})\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfor (var key in obj) {\r\n\t\t\t\t\tif (obj.hasOwnProperty(key)) {\r\n\t\t\t\t\t\tif (iterator.call(context, obj[key], key, obj) === {})\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\t\tthis.map = function(obj, iterator, context) {\r\n\t\t\tvar results = [];\r\n\t\t\tif (obj == null)\r\n\t\t\t\treturn results;\r\n\t\t\tif (nativeMap && obj.map === nativeMap)\r\n\t\t\t\treturn obj.map(iterator, context);\r\n\t\t\tthis.each(obj, function(value, index, list) {\r\n\t\t\t\tresults[results.length] = iterator.call(context, value, index, list);\r\n\t\t\t});\r\n\t\t\treturn results;\r\n\t\t};\r\n\t\tif (typeof options == \"object\") {\r\n\t\t\tthis.hasher = options.hasher;\r\n\t\t\tthis.screen_resolution = options.screen_resolution;\r\n\t\t\tthis.screen_orientation = options.screen_orientation;\r\n\t\t\tthis.canvas = options.canvas;\r\n\t\t\tthis.ie_activex = options.ie_activex;\r\n\t\t} else if (typeof options == \"function\") {\r\n\t\t\tthis.hasher = options;\r\n\t\t}\r\n\t}\r\n}\r\nFingerprint.prototype = {\r\n\tget: function() {\r\n\t\tvar keys = [];\r\n\t\tkeys.push(navigator.userAgent);\r\n\t\tkeys.push(navigator.language);\r\n\t\tkeys.push(screen.colorDepth);\r\n\t\tif (this.screen_resolution) {\r\n\t\t\tvar resolution = this.getScreenResolution();\r\n\t\t\tif (typeof resolution !== \"undefined\") {\r\n\t\t\t\tkeys.push(this.getScreenResolution().join(\"x\"));\r\n\t\t\t}\r\n\t\t}\r\n\t\tkeys.push(new Date().getTimezoneOffset());\r\n\t\tkeys.push(this.hasSessionStorage());\r\n\t\tkeys.push(this.hasLocalStorage());\r\n\t\tkeys.push(!!window.indexedDB);\r\n\t\tif (document.body) {\r\n\t\t\tkeys.push(typeof(document.body.addBehavior));\r\n\t\t} else {\r\n\t\t\tkeys.push(typeof undefined);\r\n\t\t}\r\n\t\tkeys.push(typeof(window.openDatabase));\r\n\t\tkeys.push(navigator.cpuClass);\r\n\t\tkeys.push(navigator.platform);\r\n\t\tkeys.push(navigator.doNotTrack);\r\n\t\tkeys.push(this.getPluginsString());\r\n\t\tif (this.canvas && this.isCanvasSupported()) {\r\n\t\t\tkeys.push(this.getCanvasFingerprint());\r\n\t\t}\r\n\t\tif (this.hasher) {\r\n\t\t\treturn this.hasher(keys.join(\"###\"), 31);\r\n\t\t} else {\r\n\t\t\treturn this.murmurhash3_32_gc(keys.join(\"###\"), 31);\r\n\t\t}\r\n\t},\r\n\tmurmurhash3_32_gc: function(key, seed) {\r\n\t\tvar remainder, bytes, h1, h1b, c1, c2, k1, i;\r\n\t\tremainder = key.length & 3;\r\n\t\tbytes = key.length - remainder;\r\n\t\th1 = seed;\r\n\t\tc1 = 0xcc9e2d51;\r\n\t\tc2 = 0x1b873593;\r\n\t\ti = 0;\r\n\t\twhile (i < bytes) {\r\n\t\t\tk1 = ((key.charCodeAt(i) & 0xff)) | ((key.charCodeAt(++i) & 0xff) << 8) | ((key.charCodeAt(++i) & 0xff) << 16) | ((key.charCodeAt(++i) & 0xff) << 24);\r\n\t\t\t++i;\r\n\t\t\tk1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\tk1 = (k1 << 15) | (k1 >>> 17);\r\n\t\t\tk1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\th1 ^= k1;\r\n\t\t\th1 = (h1 << 13) | (h1 >>> 19);\r\n\t\t\th1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\r\n\t\t\th1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\r\n\t\t}\r\n\t\tk1 = 0;\r\n\t\tswitch (remainder) {\r\n\t\t\tcase 3:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\r\n\t\t\tcase 2:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\r\n\t\t\tcase 1:\r\n\t\t\t\tk1 ^= (key.charCodeAt(i) & 0xff);\r\n\t\t\t\tk1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\r\n\t\t\t\tk1 = (k1 << 15) | (k1 >>> 17);\r\n\t\t\t\tk1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\r\n\t\t\t\th1 ^= k1;\r\n\t\t}\r\n\t\th1 ^= key.length;\r\n\t\th1 ^= h1 >>> 16;\r\n\t\th1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\r\n\t\th1 ^= h1 >>> 13;\r\n\t\th1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\r\n\t\th1 ^= h1 >>> 16;\r\n\t\treturn h1 >>> 0;\r\n\t},\r\n\thasLocalStorage: function() {\r\n\t\ttry {\r\n\t\t\treturn !!window.localStorage;\r\n\t\t} catch (e) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n\thasSessionStorage: function() {\r\n\t\ttry {\r\n\t\t\treturn !!window.sessionStorage;\r\n\t\t} catch (e) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t},\r\n\tisCanvasSupported: function() {\r\n\t\tvar elem = document.createElement(\"canvas\");\r\n\t\treturn !!(elem.getContext && elem.getContext(\"2d\"));\r\n\t},\r\n\tisIE: function() {\r\n\t\tif (navigator.appName === \"Microsoft Internet Explorer\") {\r\n\t\t\treturn true;\r\n\t\t} else if (navigator.appName === \"Netscape\" && /Trident/.test(navigator.userAgent)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t},\r\n\tgetPluginsString: function() {\r\n\t\tif (this.isIE() && this.ie_activex) {\r\n\t\t\treturn this.getIEPluginsString();\r\n\t\t} else {\r\n\t\t\treturn this.getRegularPluginsString();\r\n\t\t}\r\n\t},\r\n\tgetRegularPluginsString: function() {\r\n\t\treturn this.map(navigator.plugins, function(p) {\r\n\t\t\tvar mimeTypes = this.map(p, function(mt) {\r\n\t\t\t\treturn [mt.type, mt.suffixes].join(\"~\");\r\n\t\t\t}).join(\",\");\r\n\t\t\treturn [p.name, p.description, mimeTypes].join(\"::\");\r\n\t\t}, this).join(\";\");\r\n\t},\r\n\tgetIEPluginsString: function() {\r\n\t\tif (window.ActiveXObject) {\r\n\t\t\tvar names = [\"ShockwaveFlash.ShockwaveFlash\", \"AcroPDF.PDF\", \"PDF.PdfCtrl\", \"QuickTime.QuickTime\", \"rmocx.RealPlayer G2 Control\", \"rmocx.RealPlayer G2 Control.1\", \"RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)\", \"RealVideo.RealVideo(tm) ActiveX Control (32-bit)\", \"RealPlayer\", \"SWCtl.SWCtl\", \"WMPlayer.OCX\", \"AgControl.AgControl\", \"Skype.Detection\"];\r\n\t\t\treturn this.map(names, function(name) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tnew ActiveXObject(name);\r\n\t\t\t\t\treturn name;\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}).join(\";\");\r\n\t\t} else {\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t},\r\n\tgetScreenResolution: function() {\r\n\t\tvar resolution;\r\n\t\tif (this.screen_orientation) {\r\n\t\t\tresolution = (screen.height > screen.width) ? [screen.height, screen.width] : [screen.width, screen.height];\r\n\t\t} else {\r\n\t\t\tresolution = [screen.height, screen.width];\r\n\t\t}\r\n\t\treturn resolution;\r\n\t},\r\n\tgetCanvasFingerprint: function() {\r\n\t\tvar canvas = document.createElement(\"canvas\");\r\n\t\tvar ctx = canvas.getContext(\"2d\");\r\n\t\tvar txt = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+-={}|[]\\:\\\"<>?;,.\";\r\n\t\tctx.textBaseline = \"top\";\r\n\t\tctx.font = \"14px 'Arial'\";\r\n\t\tctx.textBaseline = \"alphabetic\";\r\n\t\tctx.fillStyle = \"#f60\";\r\n\t\tctx.fillRect(125, 1, 62, 20);\r\n\t\tctx.fillStyle = \"#069\";\r\n\t\tctx.fillText(txt, 2, 15);\r\n\t\tctx.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n\t\tctx.fillText(txt, 4, 17);\r\n\t\treturn canvas.toDataURL();\r\n\t}\r\n};\r\n\r\n/**************************************************/\r\n\r\n/**\r\nhttp://www.darkwavetech.com/fingerprint/fingerprint_code.html\r\n**/\r\nfunction fingerprint_flash() {\r\n\t\"use strict\";\r\n\tvar strOnError, objPlayerVersion, strVersion, strOut;\r\n\r\n\tstrOnError = \"N/A\";\r\n\tobjPlayerVersion = null;\r\n\tstrVersion = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tobjPlayerVersion = swfobject.getFlashPlayerVersion();\r\n\t\tstrVersion = objPlayerVersion.major + \".\" + objPlayerVersion.minor + \".\" + objPlayerVersion.release;\r\n\t\tif (strVersion === \"0.0.0\") {\r\n\t\t\tstrVersion = \"N/A\";\r\n\t\t}\r\n\t\tstrOut = strVersion;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_browser() {\r\n\t\"use strict\";\r\n\tvar strOnError, strUserAgent, numVersion, strBrowser, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstrUserAgent = null;\r\n\tnumVersion = null;\r\n\tstrBrowser = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t\tif (/msie (\\d+\\.\\d+);/.test(strUserAgent)) { //test for MSIE x.x;\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tif (strUserAgent.indexOf(\"trident/6\") > -1) {\r\n\t\t\t\tnumVersion = 10;\r\n\t\t\t}\r\n\t\t\tif (strUserAgent.indexOf(\"trident/5\") > -1) {\r\n\t\t\t\tnumVersion = 9;\r\n\t\t\t}\r\n\t\t\tif (strUserAgent.indexOf(\"trident/4\") > -1) {\r\n\t\t\t\tnumVersion = 8;\r\n\t\t\t}\r\n\t\t\tstrBrowser = \"Internet Explorer \" + numVersion;\r\n\t\t} else if (strUserAgent.indexOf(\"trident/7\") > -1) { //IE 11+ gets rid of the legacy 'MSIE' in the user-agent string;\r\n\t\t\tnumVersion = 11;\r\n\t\t\tstrBrowser = \"Internet Explorer \" + numVersion;\r\n\t\t} else if (/firefox[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Firefox \" + numVersion;\r\n\t\t} else if (/opera[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Opera/x.x or Opera x.x (ignoring remaining decimal places);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Opera \" + numVersion;\r\n\t\t} else if (/chrome[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Chrome/x.x or Chrome x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Chrome \" + numVersion;\r\n\t\t} else if (/version[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Version/x.x or Version x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Safari \" + numVersion;\r\n\t\t} else if (/rv[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for rv/x.x or rv x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Mozilla \" + numVersion;\r\n\t\t} else if (/mozilla[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Mozilla/x.x or Mozilla x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Mozilla \" + numVersion;\r\n\t\t} else if (/binget[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for BinGet/x.x or BinGet x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (BinGet) \" + numVersion;\r\n\t\t} else if (/curl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Curl/x.x or Curl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (cURL) \" + numVersion;\r\n\t\t} else if (/java[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Java/x.x or Java x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Java) \" + numVersion;\r\n\t\t} else if (/libwww-perl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for libwww-perl/x.x or libwww-perl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (libwww-perl) \" + numVersion;\r\n\t\t} else if (/microsoft url control -[\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Microsoft URL Control - x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Microsoft URL Control) \" + numVersion;\r\n\t\t} else if (/peach[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for Peach/x.x or Peach x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Peach) \" + numVersion;\r\n\t\t} else if (/php[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for PHP/x.x or PHP x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (PHP) \" + numVersion;\r\n\t\t} else if (/pxyscand[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for pxyscand/x.x or pxyscand x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (pxyscand) \" + numVersion;\r\n\t\t} else if (/pycurl[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for pycurl/x.x or pycurl x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (PycURL) \" + numVersion;\r\n\t\t} else if (/python-urllib[\\/\\s](\\d+\\.\\d+)/.test(strUserAgent)) { //test for python-urllib/x.x or python-urllib x.x (ignoring remaining digits);\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Library (Python URLlib) \" + numVersion;\r\n\t\t} else if (/appengine-google/.test(strUserAgent)) { //test for AppEngine-Google;\r\n\t\t\tnumVersion = Number(RegExp.$1); // capture x.x portion and store as a number\r\n\t\t\tstrBrowser = \"Cloud (Google AppEngine) \" + numVersion;\r\n\t\t} else {\r\n\t\t\tstrBrowser = \"Unknown\";\r\n\t\t}\r\n\t\tstrOut = strBrowser;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_canvas() {\r\n\t\"use strict\";\r\n\tvar strOnError, canvas, strCText, strText, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tcanvas = null;\r\n\tstrCText = null;\r\n\tstrText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`~1!2@3#4$5%6^7&8*9(0)-_=+[{]}|;:',<.>/?\";\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tcanvas = document.createElement(\"canvas\");\r\n\t\tstrCText = canvas.getContext(\"2d\");\r\n\t\tstrCText.textBaseline = \"top\";\r\n\t\tstrCText.font = \"14px 'Arial'\";\r\n\t\tstrCText.textBaseline = \"alphabetic\";\r\n\t\tstrCText.fillStyle = \"#f60\";\r\n\t\tstrCText.fillRect(125, 1, 62, 20);\r\n\t\tstrCText.fillStyle = \"#069\";\r\n\t\tstrCText.fillText(strText, 2, 15);\r\n\t\tstrCText.fillStyle = \"rgba(102, 204, 0, 0.7)\";\r\n\t\tstrCText.fillText(strText, 4, 17);\r\n\t\tstrOut = canvas.toDataURL();\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_connection() {\r\n\t\"use strict\";\r\n\tvar strOnError, strConnection, strOut;\r\n\r\n\tstrOnError = \"N/A\";\r\n\tstrConnection = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\t// only on android\r\n\t\tstrConnection = navigator.connection.type;\r\n\t\tstrOut = strConnection;\r\n\t} catch (err) {\r\n\t\t// return N/A if navigator.connection object does not apply to this device\r\n\t\treturn strOnError;\r\n\t}\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_cookie() {\r\n\t\"use strict\";\r\n\tvar strOnError, bolCookieEnabled, bolOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tbolCookieEnabled = null;\r\n\tbolOut = null;\r\n\r\n\ttry {\r\n\t\tbolCookieEnabled = (navigator.cookieEnabled) ? true : false;\r\n\r\n\t\t//if not IE4+ nor NS6+\r\n\t\tif (typeof navigator.cookieEnabled === \"undefined\" && !bolCookieEnabled) {\r\n\t\t\tdocument.cookie = \"testcookie\";\r\n\t\t\tbolCookieEnabled = (document.cookie.indexOf(\"testcookie\") !== -1) ? true : false;\r\n\t\t}\r\n\t\tbolOut = bolCookieEnabled;\r\n\t\treturn bolOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_display() {\r\n\t\"use strict\";\r\n\tvar strSep, strPair, strOnError, strScreen, strDisplay, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrPair = \"=\";\r\n\tstrOnError = \"Error\";\r\n\tstrScreen = null;\r\n\tstrDisplay = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrScreen = window.screen;\r\n\t\tif (strScreen) {\r\n\t\t\tstrDisplay = strScreen.colorDepth + strSep + strScreen.width + strSep + strScreen.height + strSep + strScreen.availWidth + strSep + strScreen.availHeight;\r\n\t\t}\r\n\t\tstrOut = strDisplay;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_fontsmoothing() {\r\n\t\"use strict\";\r\n\tvar strOnError, strFontSmoothing, canvasNode, ctx, i, j, imageData, alpha, strOut;\r\n\r\n\tstrOnError = \"Unknown\";\r\n\tstrFontSmoothing = null;\r\n\tcanvasNode = null;\r\n\tctx = null;\r\n\timageData = null;\r\n\talpha = null;\r\n\tstrOut = null;\r\n\r\n\tif (typeof(screen.fontSmoothingEnabled) !== \"undefined\") {\r\n\t\tstrFontSmoothing = screen.fontSmoothingEnabled;\r\n\t} else {\r\n\t\ttry {\r\n\t\t\tfontsmoothing = \"false\";\r\n\t\t\tcanvasNode = document.createElement(\"canvas\");\r\n\t\t\tcanvasNode.width = \"35\";\r\n\t\t\tcanvasNode.height = \"35\";\r\n\t\t\tcanvasNode.style.display = \"none\";\r\n\t\t\tdocument.body.appendChild(canvasNode);\r\n\t\t\tctx = canvasNode.getContext(\"2d\");\r\n\t\t\tctx.textBaseline = \"top\";\r\n\t\t\tctx.font = \"32px Arial\";\r\n\t\t\tctx.fillStyle = \"black\";\r\n\t\t\tctx.strokeStyle = \"black\";\r\n\t\t\tctx.fillText(\"O\", 0, 0);\r\n\t\t\tfor (j = 8; j <= 32; j = j + 1) {\r\n\t\t\t\tfor (i = 1; i <= 32; i = i + 1) {\r\n\t\t\t\t\timageData = ctx.getImageData(i, j, 1, 1).data;\r\n\t\t\t\t\talpha = imageData[3];\r\n\t\t\t\t\tif (alpha !== 255 && alpha !== 0) {\r\n\t\t\t\t\t\tstrFontSmoothing = \"true\"; // font-smoothing must be on.\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstrOut = strFontSmoothing;\r\n\t\t} catch (err) {\r\n\t\t\treturn strOnError;\r\n\t\t}\r\n\t}\r\n\tstrOut = strFontSmoothing;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_fonts() {\r\n\t\"use strict\";\r\n\tvar strOnError, style, fonts, count, template, fragment, divs, i, font, div, body, result, e;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstyle = null;\r\n\tfonts = null;\r\n\tfont = null;\r\n\tcount = 0;\r\n\ttemplate = null;\r\n\tdivs = null;\r\n\te = null;\r\n\tdiv = null;\r\n\tbody = null;\r\n\ti = 0;\r\n\r\n\ttry {\r\n\t\tstyle = \"position: absolute; visibility: hidden; display: block !important\";\r\n\t\tfonts = [\"8bitoperator\", \"Abadi MT Condensed Light\", \"Adobe Fangsong Std\", \"Adobe Hebrew\", \"Adobe Ming Std\", \"Agency FB\", \"Aharoni\", \"Andalus\", \"Angsana New\", \"AngsanaUPC\", \"Aparajita\", \"Arab\", \"Arabic Transparent\", \"Arabic Typesetting\", \"Arial Baltic\", \"Arial Black\", \"Arial CE\", \"Arial CYR\", \"Arial Greek\", \"Arial TUR\", \"Arial\", \"Arimo\", \"Batang\", \"BatangChe\", \"Bauhaus 93\", \"Bell MT\", \"Berlin Sans FB\", \"Bitstream Vera Serif\", \"Bodoni MT\", \"Bookman Old Style\", \"Braggadocio\", \"Broadway\", \"Browallia New\", \"BrowalliaUPC\", \"Calibri Light\", \"Calibri\", \"Californian FB\", \"Cambria Math\", \"Cambria\", \"Candara\", \"Castellar\", \"Casual\", \"Centaur\", \"Century\", \"Century Gothic\", \"Chalkduster\", \"Colonna MT\", \"Comic Sans MS\", \"Consolas\", \"Constantia\", \"Copperplate Gothic Light\", \"Corbel\", \"Cordia New\", \"CordiaUPC\", \"Courier New Baltic\", \"Courier New CE\", \"Courier New CYR\", \"Courier New Greek\", \"Courier New TUR\", \"Courier New\", \"DejaVu Sans\", \"DFKai-SB\", \"DaunPenh\", \"David\", \"DejaVu LGC Sans Mono\", \"Desdemona\", \"DilleniaUPC\", \"DokChampa\", \"Dotum\", \"DotumChe\", \"Dubai\", \"Ebrima\", \"Engravers MT\", \"Eras Bold ITC\", \"Estrangelo Edessa\", \"EucrosiaUPC\", \"Euphemia\", \"Eurostile\", \"FangSong\", \"Forte\", \"FrankRuehl\", \"Franklin Gothic Heavy\", \"Franklin Gothic Medium\", \"FreesiaUPC\", \"French Script MT\", \"Gabriola\", \"Gautami\", \"Georgia\", \"Gigi\", \"Gisha\", \"Goudy Old Style\", \"Gulim\", \"GulimChe\", \"GungSeo\", \"Gungsuh\", \"GungsuhChe\", \"Haettenschweiler\", \"Harrington\", \"Hei S\", \"HeiT\", \"Heisei Kaku Gothic\", \"Hiragino Sans GB\", \"Impact\", \"Informal Roman\", \"IrisUPC\", \"Iskoola Pota\", \"JasmineUPC\", \"KacstOne\", \"KaiTi\", \"Kalinga\", \"Kartika\", \"Khmer UI\", \"Kino MT\", \"KodchiangUPC\", \"Kokila\", \"Kozuka Gothic Pr6N\", \"Lao UI\", \"Latha\", \"Leelawadee\", \"Levenim MT\", \"LilyUPC\", \"Lohit Gujarati\", \"Loma\", \"Lucida Bright\", \"Lucida Console\", \"Lucida Fax\", \"Lucida Sans Unicode\", \"MS Gothic\", \"MS Mincho\", \"MS PGothic\", \"MS PMincho\", \"MS Reference Sans Serif\", \"MS UI Gothic\", \"MV Boli\", \"Magneto\", \"Malgun Gothic\", \"Mangal\", \"Marlett\", \"Matura MT Script Capitals\", \"Meiryo UI\", \"Meiryo\", \"Menlo\", \"Microsoft Himalaya\", \"Microsoft JhengHei\", \"Microsoft New Tai Lue\", \"Microsoft PhagsPa\", \"Microsoft Sans Serif\", \"Microsoft Tai Le\", \"Microsoft Uighur\", \"Microsoft YaHei\", \"Microsoft Yi Baiti\", \"MingLiU\", \"MingLiU-ExtB\", \"MingLiU_HKSCS\", \"MingLiU_HKSCS-ExtB\", \"Miriam Fixed\", \"Miriam\", \"Mongolian Baiti\", \"MoolBoran\", \"More Perfect DOS VGA\", \"MS Outlook\", \"NSimSun\", \"Narkisim\", \"News Gothic MT\", \"Niagara Solid\", \"Nyala\", \"OCR A\", \"OpenSymbol\", \"PMingLiU\", \"PMingLiU-ExtB\", \"Palace Script MT\", \"Palatino Linotype\", \"Papyrus\", \"Perpetua\", \"Plantagenet Cherokee\", \"Playbill\", \"Prelude Bold\", \"Prelude Condensed Bold\", \"Prelude Condensed Medium\", \"Prelude Medium\", \"PreludeCompressedWGL Black\", \"PreludeCompressedWGL Bold\", \"PreludeCompressedWGL Light\", \"PreludeCompressedWGL Medium\", \"PreludeCondensedWGL Black\", \"PreludeCondensedWGL Bold\", \"PreludeCondensedWGL Light\", \"PreludeCondensedWGL Medium\", \"PreludeWGL Black\", \"PreludeWGL Bold\", \"PreludeWGL Light\", \"PreludeWGL Medium\", \"Raavi\", \"Rachana\", \"Rockwell\", \"Rod\", \"Sakkal Majalla\", \"Sawasdee\", \"Script MT Bold\", \"Segoe Print\", \"Segoe Script\", \"Segoe UI Emoji\", \"Segoe UI Historic\", \"Segoe UI Light\", \"Segoe UI Semibold\", \"Segoe UI Symbol\", \"Segoe UI\", \"Shonar Bangla\", \"Showcard Gothic\", \"Shruti\", \"SimHei\", \"SimSun\", \"SimSun-ExtB\", \"Simplified Arabic Fixed\", \"Simplified Arabic\", \"Snap ITC\", \"Sylfaen\", \"Symbol\", \"Tahoma\", \"TeamViewer13\", \"Times New Roman Baltic\", \"Times New Roman CE\", \"Times New Roman CYR\", \"Times New Roman Greek\", \"Times New Roman TUR\", \"Times New Roman\", \"TlwgMono\", \"Traditional Arabic\", \"Trebuchet MS\", \"Tunga\", \"Tw Cen MT Condensed Extra Bold\", \"Ubuntu\", \"Umpush\", \"Univers\", \"Utopia\", \"Utsaah\", \"Vani\", \"Verdana\", \"Vijaya\", \"Vladimir Script\", \"Vrinda\", \"Webdings\", \"Wide Latin\", \"Wingdings\", \"Yu Gothic\"];\r\n\t\tcount = fonts.length;\r\n\t\ttemplate = \"ww\" + \"ww\";\r\n\t\tfragment = document.createDocumentFragment();\r\n\t\tdivs = [];\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\tfont = fonts[i];\r\n\t\t\tdiv = document.createElement(\"div\");\r\n\t\t\tfont = font.replace(/['\"<>]/g, \"\");\r\n\t\t\tdiv.innerHTML = template.replace(/X/g, font);\r\n\t\t\tdiv.style.cssText = style;\r\n\t\t\tfragment.appendChild(div);\r\n\t\t\tdivs.push(div);\r\n\t\t}\r\n\t\tbody = document.body;\r\n\t\tbody.insertBefore(fragment, body.firstChild);\r\n\t\tresult = [];\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\te = divs[i].getElementsByTagName(\"b\");\r\n\t\t\tif (e[0].offsetWidth === e[1].offsetWidth) {\r\n\t\t\t\tresult.push(fonts[i]);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// do not combine these two loops, remove child will cause reflow\r\n\t\t// and induce severe performance hit\r\n\t\tfor (i = 0; i < count; i = i + 1) {\r\n\t\t\tbody.removeChild(divs[i]);\r\n\t\t}\r\n\t\treturn result.join(\"|\");\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_formfields() {\r\n\t\"use strict\";\r\n\tvar i, j, numOfForms, numOfInputs, strFormsInPage, strFormsInputsData, strInputsInForm, strTmp, strOut;\r\n\r\n\ti = 0;\r\n\tj = 0;\r\n\tnumOfForms = 0;\r\n\tnumOfInputs = 0;\r\n\tstrFormsInPage = \"\";\r\n\tstrFormsInputsData = [];\r\n\tstrInputsInForm = \"\";\r\n\tstrTmp = \"\";\r\n\tstrOut = \"\";\r\n\r\n\tstrFormsInPage = document.getElementsByTagName(\"form\");\r\n\tnumOfForms = strFormsInPage.length;\r\n\tstrFormsInputsData.push(\"url=\" + window.location.href);\r\n\tfor (i = 0; i < numOfForms; i = i + 1) {\r\n\t\tstrFormsInputsData.push(\"FORM=\" + strFormsInPage[i].name);\r\n\t\tstrInputsInForm = strFormsInPage[i].getElementsByTagName(\"input\");\r\n\t\tnumOfInputs = strInputsInForm.length;\r\n\t\tfor (j = 0; j < numOfInputs; j = j + 1) {\r\n\t\t\tif (strInputsInForm[j].type !== \"hidden\") {\r\n\t\t\t\tstrFormsInputsData.push(\"Input=\" + strInputsInForm[j].name);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tstrTmp = strFormsInputsData.join(\"|\");\r\n\tstrOut = strTmp;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_java() {\r\n\t\"use strict\";\r\n\tvar strOnError, strJavaEnabled, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tstrJavaEnabled = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tif (navigator.javaEnabled()) {\r\n\t\t\tstrJavaEnabled = \"true\";\r\n\t\t} else {\r\n\t\t\tstrJavaEnabled = \"false\";\r\n\t\t}\r\n\t\tstrOut = strJavaEnabled;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_language() {\r\n\t\"use strict\";\r\n\tvar strSep, strPair, strOnError, strLang, strTypeLng, strTypeBrLng, strTypeSysLng, strTypeUsrLng, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrPair = \"=\";\r\n\tstrOnError = \"Error\";\r\n\tstrLang = null;\r\n\tstrTypeLng = null;\r\n\tstrTypeBrLng = null;\r\n\tstrTypeSysLng = null;\r\n\tstrTypeUsrLng = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\tstrTypeLng = typeof(navigator.language);\r\n\t\tstrTypeBrLng = typeof(navigator.browserLanguage);\r\n\t\tstrTypeSysLng = typeof(navigator.systemLanguage);\r\n\t\tstrTypeUsrLng = typeof(navigator.userLanguage);\r\n\r\n\t\tif (strTypeLng !== \"undefined\") {\r\n\t\t\tstrLang = \"lang\" + strPair + navigator.language + strSep;\r\n\t\t} else if (strTypeBrLng !== \"undefined\") {\r\n\t\t\tstrLang = \"lang\" + strPair + navigator.browserLanguage + strSep;\r\n\t\t} else {\r\n\t\t\tstrLang = \"lang\" + strPair + strSep;\r\n\t\t}\r\n\t\tif (strTypeSysLng !== \"undefined\") {\r\n\t\t\tstrLang += \"syslang\" + strPair + navigator.systemLanguage + strSep;\r\n\t\t} else {\r\n\t\t\tstrLang += \"syslang\" + strPair + strSep;\r\n\t\t}\r\n\t\tif (strTypeUsrLng !== \"undefined\") {\r\n\t\t\tstrLang += \"userlang\" + strPair + navigator.userLanguage;\r\n\t\t} else {\r\n\t\t\tstrLang += \"userlang\" + strPair;\r\n\t\t}\r\n\t\tstrOut = strLang;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_silverlight() {\r\n\t\"use strict\";\r\n\tvar strOnError, objControl, objPlugin, strSilverlightVersion, strOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tobjControl = null;\r\n\tobjPlugin = null;\r\n\tstrSilverlightVersion = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\ttry {\r\n\t\t\tobjControl = new ActiveXObject(\"AgControl.AgControl\");\r\n\t\t\tif (objControl.IsVersionSupported(\"5.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"5.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"4.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"4.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"3.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"3.x\";\r\n\t\t\t} else if (objControl.IsVersionSupported(\"2.0\")) {\r\n\t\t\t\tstrSilverlightVersion = \"2.x\";\r\n\t\t\t} else {\r\n\t\t\t\tstrSilverlightVersion = \"1.x\";\r\n\t\t\t}\r\n\t\t\tobjControl = null;\r\n\t\t} catch (e) {\r\n\t\t\tobjPlugin = navigator.plugins[\"Silverlight Plug-In\"];\r\n\t\t\tif (objPlugin) {\r\n\t\t\t\tif (objPlugin.description === \"1.0.30226.2\") {\r\n\t\t\t\t\tstrSilverlightVersion = \"2.x\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrSilverlightVersion = parseInt(objPlugin.description[0], 10);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tstrSilverlightVersion = \"N/A\";\r\n\t\t\t}\r\n\t\t}\r\n\t\tstrOut = strSilverlightVersion;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_os() {\r\n\t\"use strict\";\r\n\tvar strSep, strOnError, strUserAgent, strPlatform, strOS, strOSBits, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrOnError = \"Error\";\r\n\tstrUserAgent = null;\r\n\tstrPlatform = null;\r\n\tstrOS = null;\r\n\tstrOSBits = null;\r\n\tstrOut = null;\r\n\r\n\ttry {\r\n\t\t/* navigator.userAgent is supported by all major browsers */\r\n\t\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t\t/* navigator.platform is supported by all major browsers */\r\n\t\tstrPlatform = navigator.platform.toLowerCase();\r\n\t\tif (strUserAgent.indexOf(\"windows nt 6.3\") !== -1) {\r\n\t\t\tstrOS = \"Windows 8.1\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.2\") !== -1) {\r\n\t\t\tstrOS = \"Windows 8\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.1\") !== -1) {\r\n\t\t\tstrOS = \"Windows 7\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 10.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows 10\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 6.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows Vista/Windows Server 2008\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.2\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP x64/Windows Server 2003\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.1\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.01\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000, Service Pack 1 (SP1)\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows xp\") !== -1) {\r\n\t\t\tstrOS = \"Windows XP\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows 2000\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows nt 5.0\") !== -1) {\r\n\t\t\tstrOS = \"Windows 2000\";\r\n\t\t} else if (strUserAgent.indexOf(\"iemobile\") !== -1) {\r\n\t\t\tstrOS = \"Windows Mobile\";\r\n\t\t} else if (strUserAgent.indexOf(\"wm5 pie\") !== -1) {\r\n\t\t\tstrOS = \"Windows Mobile\";\r\n\t\t} else if (strUserAgent.indexOf(\"windows\") !== -1) {\r\n\t\t\tstrOS = \"Windows (Unknown Version)\";\r\n\t\t} else if (strUserAgent.indexOf(\"openbsd\") !== -1) {\r\n\t\t\tstrOS = \"Open BSD\";\r\n\t\t} else if (strUserAgent.indexOf(\"sunos\") !== -1) {\r\n\t\t\tstrOS = \"Sun OS\";\r\n\t\t} else if (strUserAgent.indexOf(\"ubuntu\") !== -1) {\r\n\t\t\tstrOS = \"Ubuntu\";\r\n\t\t} else if (strUserAgent.indexOf(\"ipad\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iPad)\";\r\n\t\t} else if (strUserAgent.indexOf(\"ipod\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iTouch)\";\r\n\t\t} else if (strUserAgent.indexOf(\"iphone\") !== -1) {\r\n\t\t\tstrOS = \"iOS (iPhone)\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x beta\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Beta (Kodiak)\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.0\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Cheetah\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.1\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Puma\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.2\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Jaguar\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.3\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Panther\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.4\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Tiger\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.5\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Leopard\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.6\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Snow Leopard\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x 10.7\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX Lion\";\r\n\t\t} else if (strUserAgent.indexOf(\"mac os x\") !== -1) {\r\n\t\t\tstrOS = \"Mac OSX (Version Unknown)\";\r\n\t\t} else if (strUserAgent.indexOf(\"macintosh\") !== -1) {\r\n\t\t\tstrOS = \"Mac OS Classic\";\r\n\t\t} else if (strUserAgent.indexOf(\"googletv\") !== -1) {\r\n\t\t\tstrOS = \"Android (GoogleTV)\";\r\n\t\t} else if (strUserAgent.indexOf(\"android\") !== -1) {\r\n\t\t\tstrOS = \"Android\";\r\n\t\t} else if (strUserAgent.indexOf(\"x11\") !== -1) {\r\n\t\t\tstrOS = \"UNIX\";\r\n\t\t} else if (strUserAgent.indexOf(\"nix\") !== -1) {\r\n\t\t\tstrOS = \"UNIX\";\r\n\t\t} else if (strUserAgent.indexOf(\"linux\") !== -1) {\r\n\t\t\tstrOS = \"Linux\";\r\n\t\t} else if (strUserAgent.indexOf(\"qnx\") !== -1) {\r\n\t\t\tstrOS = \"QNX\";\r\n\t\t} else if (strUserAgent.indexOf(\"os/2\") !== -1) {\r\n\t\t\tstrOS = \"IBM OS/2\";\r\n\t\t} else if (strUserAgent.indexOf(\"beos\") !== -1) {\r\n\t\t\tstrOS = \"BeOS\";\r\n\t\t} else if (strUserAgent.indexOf(\"playbook\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry (Playbook)\";\r\n\t\t} else if (strUserAgent.indexOf(\"wnd.rim\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry (IE/FF Emulator)\";\r\n\t\t} else if (strUserAgent.indexOf(\"blackberry\") !== -1) {\r\n\t\t\tstrOS = \"Blackberry\";\r\n\t\t} else if (strUserAgent.indexOf(\"palm\") !== -1) {\r\n\t\t\tstrOS = \"Palm OS\";\r\n\t\t} else if (strUserAgent.indexOf(\"webos\") !== -1) {\r\n\t\t\tstrOS = \"WebOS\";\r\n\t\t} else if (strUserAgent.indexOf(\"hpwos\") !== -1) {\r\n\t\t\tstrOS = \"WebOS (HP)\";\r\n\t\t} else if (strUserAgent.indexOf(\"kindle\") !== -1) {\r\n\t\t\tstrOS = \"Kindle\";\r\n\t\t} else if (strUserAgent.indexOf(\"wii\") !== -1) {\r\n\t\t\tstrOS = \"Nintendo (Wii)\";\r\n\t\t} else if (strUserAgent.indexOf(\"nintendo ds\") !== -1) {\r\n\t\t\tstrOS = \"Nintendo (DS)\";\r\n\t\t} else if (strUserAgent.indexOf(\"playstation 3\") !== -1) {\r\n\t\t\tstrOS = \"Sony (Playstation Console)\";\r\n\t\t} else if (strUserAgent.indexOf(\"playstation portable\") !== -1) {\r\n\t\t\tstrOS = \"Sony (Playstation Portable)\";\r\n\t\t} else if (strUserAgent.indexOf(\"webtv\") !== -1) {\r\n\t\t\tstrOS = \"MSN TV (WebTV)\";\r\n\t\t} else if (strUserAgent.indexOf(\"inferno\") !== -1) {\r\n\t\t\tstrOS = \"Inferno\";\r\n\t\t} else {\r\n\t\t\tstrOS = \"Unknown\";\r\n\t\t}\r\n\t\tif (strPlatform.indexOf(\"x64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"wow64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"win64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"win32\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x64\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x32\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"x86\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits*\";\r\n\t\t} else if (strPlatform.indexOf(\"ppc\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"alpha\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"68k\") !== -1) {\r\n\t\t\tstrOSBits = \"64 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"iphone\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else if (strPlatform.indexOf(\"android\") !== -1) {\r\n\t\t\tstrOSBits = \"32 bits\";\r\n\t\t} else {\r\n\t\t\tstrOSBits = \"Unknown\";\r\n\t\t}\r\n\t\tstrOut = strOS + strSep + strOSBits;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_useragent() {\r\n\t\"use strict\";\r\n\tvar strSep, strTmp, strUserAgent, strOut;\r\n\r\n\tstrSep = \"|\";\r\n\tstrTmp = null;\r\n\tstrUserAgent = null;\r\n\tstrOut = null;\r\n\r\n\t/* navigator.userAgent is supported by all major browsers */\r\n\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\t/* navigator.platform is supported by all major browsers */\r\n\tstrTmp = strUserAgent + strSep + navigator.platform;\r\n\t/* navigator.cpuClass only supported in IE */\r\n\tif (navigator.cpuClass) {\r\n\t\tstrTmp += strSep + navigator.cpuClass;\r\n\t}\r\n\t/* navigator.browserLanguage only supported in IE, Safari and Chrome */\r\n\tif (navigator.browserLanguage) {\r\n\t\tstrTmp += strSep + navigator.browserLanguage;\r\n\t} else {\r\n\t\tstrTmp += strSep + navigator.language;\r\n\t}\r\n\tstrOut = strTmp;\r\n\treturn strOut;\r\n}\r\n\r\nfunction fingerprint_timezone() {\r\n\t\"use strict\";\r\n\tvar strOnError, dtDate, numOffset, numGMTHours, numOut;\r\n\r\n\tstrOnError = \"Error\";\r\n\tdtDate = null;\r\n\tnumOffset = null;\r\n\tnumGMTHours = null;\r\n\tnumOut = null;\r\n\r\n\ttry {\r\n\t\tdtDate = new Date();\r\n\t\tnumOffset = dtDate.getTimezoneOffset();\r\n\t\tnumGMTHours = (numOffset / 60) * (-1);\r\n\t\tnumOut = numGMTHours;\r\n\t\treturn numOut;\r\n\t} catch (err) {\r\n\t\treturn strOnError;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_touch() {\r\n\t\"use strict\";\r\n\tvar bolTouchEnabled, bolOut;\r\n\r\n\tbolTouchEnabled = false;\r\n\tbolOut = null;\r\n\r\n\ttry {\r\n\t\tif (document.createEvent(\"TouchEvent\")) {\r\n\t\t\tbolTouchEnabled = true;\r\n\t\t}\r\n\t\tbolOut = bolTouchEnabled;\r\n\t\treturn bolOut;\r\n\t} catch (ignore) {\r\n\t\tbolOut = bolTouchEnabled\r\n\t\treturn bolOut;\r\n\t}\r\n}\r\n\r\nfunction fingerprint_truebrowser() {\r\n\t\"use strict\";\r\n\tvar strBrowser, strUserAgent, strOut;\r\n\r\n\tstrBrowser = \"Unknown\";\r\n\tstrUserAgent = null;\r\n\tstrOut = null;\r\n\r\n\tstrUserAgent = navigator.userAgent.toLowerCase();\r\n\r\n\t/* Checks for different browsers, cannot use Try/Catch block */\r\n\tif (document.all && document.getElementById && navigator.savePreferences && (strUserAgent.indexOf(\"Netfront\") < 0) && navigator.appName !== \"Blazer\") {\r\n\t\tstrBrowser = \"Escape 5\";\r\n\t} else if (navigator.vendor === \"KDE\") {\r\n\t\tstrBrowser = \"Konqueror\";\r\n\t} else if (document.childNodes && !document.all && !navigator.taintEnabled && !navigator.accentColorName) {\r\n\t\tstrBrowser = \"Safari\";\r\n\t} else if (document.childNodes && !document.all && !navigator.taintEnabled && navigator.accentColorName) {\r\n\t\tstrBrowser = \"OmniWeb 4.5+\";\r\n\t} else if (navigator.__ice_version) {\r\n\t\tstrBrowser = \"ICEBrowser\";\r\n\t} else if (window.ScriptEngine && ScriptEngine().indexOf(\"InScript\") + 1 && document.createElement) {\r\n\t\tstrBrowser = \"iCab 3+\";\r\n\t} else if (window.ScriptEngine && ScriptEngine().indexOf(\"InScript\") + 1) {\r\n\t\tstrBrowser = \"iCab 2-\";\r\n\t} else if (strUserAgent.indexOf(\"hotjava\") + 1 && (navigator.accentColorName) === \"undefined\") {\r\n\t\tstrBrowser = \"HotJava\";\r\n\t} else if (document.layers && !document.classes) {\r\n\t\tstrBrowser = \"Omniweb 4.2-\";\r\n\t} else if (document.layers && !navigator.mimeTypes[\"*\"]) {\r\n\t\tstrBrowser = \"Escape 4\";\r\n\t} else if (document.layers) {\r\n\t\tstrBrowser = \"Netscape 4\";\r\n\t} else if (window.opera && document.getElementsByClassName) {\r\n\t\tstrBrowser = \"Opera 9.5+\";\r\n\t} else if (window.opera && window.getComputedStyle) {\r\n\t\tstrBrowser = \"Opera 8\";\r\n\t} else if (window.opera && document.childNodes) {\r\n\t\tstrBrowser = \"Opera 7\";\r\n\t} else if (window.opera) {\r\n\t\tstrBrowser = \"Opera \" + window.opera.version();\r\n\t} else if (navigator.appName.indexOf(\"WebTV\") + 1) {\r\n\t\tstrBrowser = \"WebTV\";\r\n\t} else if (strUserAgent.indexOf(\"netgem\") + 1) {\r\n\t\tstrBrowser = \"Netgem NetBox\";\r\n\t} else if (strUserAgent.indexOf(\"opentv\") + 1) {\r\n\t\tstrBrowser = \"OpenTV\";\r\n\t} else if (strUserAgent.indexOf(\"ipanel\") + 1) {\r\n\t\tstrBrowser = \"iPanel MicroBrowser\";\r\n\t} else if (document.getElementById && !document.childNodes) {\r\n\t\tstrBrowser = \"Clue browser\";\r\n\t} else if (navigator.product && navigator.product.indexOf(\"Hv\") === 0) {\r\n\t\tstrBrowser = \"Tkhtml Hv3+\";\r\n\t} else if (typeof InstallTrigger !== \"undefined\") {\r\n\t\tstrBrowser = \"Firefox\";\r\n\t} else if (window.atob) {\r\n\t\tstrBrowser = \"Internet Explorer 10+\";\r\n\t} else if (XDomainRequest && window.performance) {\r\n\t\tstrBrowser = \"Internet Explorer 9\";\r\n\t} else if (XDomainRequest) {\r\n\t\tstrBrowser = \"Internet Explorer 8\";\r\n\t} else if (document.documentElement && document.documentElement.style.maxHeight !== \"undefined\") {\r\n\t\tstrBrowser = \"Internet Explorer 7\"; //xxxxx\r\n\t} else if (document.compatMode && document.all) {\r\n\t\tstrBrowser = \"Internet Explorer 6\"; //xxxxx\r\n\t} else if (window.createPopup) {\r\n\t\tstrBrowser = \"Internet Explorer 5.5\";\r\n\t} else if (window.attachEvent) {\r\n\t\tstrBrowser = \"Internet Explorer 5\";\r\n\t} else if (document.all && navigator.appName !== \"Microsoft Pocket Internet Explorer\") {\r\n\t\tstrBrowser = \"Internet Explorer 4\";\r\n\t} else if ((strUserAgent.indexOf(\"msie\") + 1) && window.ActiveXObject) {\r\n\t\tstrBrowser = \"Pocket Internet Explorer\";\r\n\t} else if (document.getElementById && ((strUserAgent.indexOf(\"netfront\") + 1) || navigator.appName === \"Blazer\" || navigator.product === \"Gecko\" || (navigator.appName.indexOf(\"PSP\") + 1) || (navigator.appName.indexOf(\"PLAYSTATION 3\") + 1))) {\r\n\t\tstrBrowser = \"NetFront 3+\";\r\n\t} else if (navigator.product === \"Gecko\" && !navigator.savePreferences) {\r\n\t\tstrBrowser = \"Gecko engine (Mozilla, Netscape 6+ etc.)\";\r\n\t} else if (window.chrome) {\r\n\t\tstrBrowser = \"Chrome\";\r\n\t}\r\n\tstrOut = strBrowser;\r\n\treturn strOut;\r\n}\r\n\r\nvar glbOnError = \"N/A\"\r\nvar glbSep = \"|\";\r\n\r\nfunction activeXDetect(componentClassID) {\r\n\t\"use strict\";\r\n\tvar strComponentVersion, strOut;\r\n\r\n\tstrComponentVersion = \"\";\r\n\tstrOut = \"\";\r\n\r\n\ttry {\r\n\t\tstrComponentVersion = document.body.getComponentVersion(\"{\" + componentClassID + \"}\", \"ComponentID\");\r\n\t\tif (strComponentVersion !== null) {\r\n\t\t\tstrOut = strComponentVersion;\r\n\t\t} else {\r\n\t\t\tstrOut = false;\r\n\t\t}\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}\r\n\r\nfunction stripIllegalChars(strValue) {\r\n\t\"use strict\";\r\n\tvar iCounter, strOriginal, strOut;\r\n\r\n\tiCounter = 0;\r\n\tstrOriginal = \"\";\r\n\tstrOut = \"\";\r\n\r\n\ttry {\r\n\t\tstrOriginal = strValue.toLowerCase();\r\n\t\tfor (iCounter = 0; iCounter < strOriginal.length; iCounter = iCounter + 1) {\r\n\t\t\tif (strOriginal.charAt(iCounter) !== \"\\n\" && strOriginal.charAt(iCounter) !== \"/\" && strOriginal.charAt(iCounter) !== \"\\\\\") {\r\n\t\t\t\tstrOut = strOut + strOriginal.charAt(iCounter);\r\n\t\t\t} else if (strOriginal.charAt(iCounter) === \"\\n\") {\r\n\t\t\t\tstrOut = strOut + \"n\";\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}\r\n\r\nfunction hashtable_containsKey(key) {\r\n\t\"use strict\";\r\n\tvar bolExists, iCounter;\r\n\r\n\tbolExists = false;\r\n\tiCounter = 0;\r\n\r\n\tfor (iCounter = 0; iCounter < this.hashtable.length; iCounter = iCounter + 1) {\r\n\t\tif (iCounter === key && this.hashtable[iCounter] !== null) {\r\n\t\t\tbolExists = true;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\treturn bolExists;\r\n}\r\n\r\nfunction hashtable_get(key) {\r\n\t\"use strict\";\r\n\treturn this.hashtable[key];\r\n}\r\n\r\nfunction hashtable_keys() {\r\n\t\"use strict\";\r\n\tvar keys, iCounter;\r\n\r\n\tkeys = [];\r\n\tiCounter = 0;\r\n\r\n\tfor (iCounter in this.hashtable) {\r\n\t\tif (this.hashtable[iCounter] !== null) {\r\n\t\t\tkeys.push(iCounter);\r\n\t\t}\r\n\t}\r\n\treturn keys;\r\n}\r\n\r\nfunction hashtable_put(key, value) {\r\n\t\"use strict\";\r\n\tif (key === null || value === null) {\r\n\t\tthrow \"NullPointerException {\" + key + \"},{\" + value + \"}\";\r\n\t}\r\n\tthis.hashtable[key] = value;\r\n}\r\n\r\nfunction hashtable_size() {\r\n\t\"use strict\";\r\n\tvar iSize, iCounter, iOut;\r\n\r\n\tiSize = 0;\r\n\tiCounter = 0;\r\n\tiOut = 0;\r\n\r\n\tfor (iCounter in this.hashtable) {\r\n\t\tif (this.hashtable[iCounter] !== null) {\r\n\t\t\tiSize = iSize + 1;\r\n\t\t}\r\n\t}\r\n\tiOut = iSize;\r\n\treturn iOut;\r\n}\r\n\r\nfunction Hashtable() {\r\n\t\"use strict\";\r\n\tthis.containsKey = hashtable_containsKey;\r\n\tthis.get = hashtable_get;\r\n\tthis.keys = hashtable_keys;\r\n\tthis.put = hashtable_put;\r\n\tthis.size = hashtable_size;\r\n\tthis.hashtable = [];\r\n}\r\n\r\n/* Detect Plugins */\r\nfunction fingerprint_plugins() {\r\n\t\"use strict\";\r\n\tvar htIEComponents, strKey, strName, strVersion, strTemp, bolFirst, iCount, strMimeType, strOut;\r\n\r\n\ttry {\r\n\t\t/* Create hashtable of IE components */\r\n\t\thtIEComponents = new Hashtable();\r\n\t\thtIEComponents.put(\"7790769C-0471-11D2-AF11-00C04FA35D02\", \"AddressBook\"); // Address Book\r\n\t\thtIEComponents.put(\"47F67D00-9E55-11D1-BAEF-00C04FC2D130\", \"AolArtFormat\"); // AOL ART Image Format Support\r\n\t\thtIEComponents.put(\"76C19B38-F0C8-11CF-87CC-0020AFEECF20\", \"ArabicDS\"); // Arabic Text Display Support\r\n\t\thtIEComponents.put(\"76C19B34-F0C8-11CF-87CC-0020AFEECF20\", \"ChineseSDS\"); // Chinese (Simplified) Text Display Support\r\n\t\thtIEComponents.put(\"76C19B33-F0C8-11CF-87CC-0020AFEECF20\", \"ChineseTDS\"); // Chinese (traditional) Text Display Support\r\n\t\thtIEComponents.put(\"238F6F83-B8B4-11CF-8771-00A024541EE3\", \"CitrixICA\"); // Citrix ICA Client\r\n\t\thtIEComponents.put(\"283807B5-2C60-11D0-A31D-00AA00B92C03\", \"DirectAnim\"); // DirectAnimation\r\n\t\thtIEComponents.put(\"44BBA848-CC51-11CF-AAFA-00AA00B6015C\", \"DirectShow\"); // DirectShow\r\n\t\thtIEComponents.put(\"9381D8F2-0288-11D0-9501-00AA00B911A5\", \"DynHTML\"); // Dynamic HTML Data Binding\r\n\t\thtIEComponents.put(\"4F216970-C90C-11D1-B5C7-0000F8051515\", \"DynHTML4Java\"); // Dynamic HTML Data Binding for Java\r\n\t\thtIEComponents.put(\"D27CDB6E-AE6D-11CF-96B8-444553540000\", \"Flash\"); // Macromedia Flash\r\n\t\thtIEComponents.put(\"76C19B36-F0C8-11CF-87CC-0020AFEECF20\", \"HebrewDS\"); // Hebrew Text Display Support\r\n\t\thtIEComponents.put(\"630B1DA0-B465-11D1-9948-00C04F98BBC9\", \"IEBrwEnh\"); // Internet Explorer Browsing Enhancements\r\n\t\thtIEComponents.put(\"08B0E5C0-4FCB-11CF-AAA5-00401C608555\", \"IEClass4Java\"); // Internet Explorer Classes for Java\r\n\t\thtIEComponents.put(\"45EA75A0-A269-11D1-B5BF-0000F8051515\", \"IEHelp\"); // Internet Explorer Help\r\n\t\thtIEComponents.put(\"DE5AED00-A4BF-11D1-9948-00C04F98BBC9\", \"IEHelpEng\"); // Internet Explorer Help Engine\r\n\t\thtIEComponents.put(\"89820200-ECBD-11CF-8B85-00AA005B4383\", \"IE5WebBrw\"); // Internet Explorer 5/6 Web Browser\r\n\t\thtIEComponents.put(\"5A8D6EE0-3E18-11D0-821E-444553540000\", \"InetConnectionWiz\"); // Internet Connection Wizard\r\n\t\thtIEComponents.put(\"76C19B30-F0C8-11CF-87CC-0020AFEECF20\", \"JapaneseDS\"); // Japanese Text Display Support\r\n\t\thtIEComponents.put(\"76C19B31-F0C8-11CF-87CC-0020AFEECF20\", \"KoreanDS\"); // Korean Text Display Support\r\n\t\thtIEComponents.put(\"76C19B50-F0C8-11CF-87CC-0020AFEECF20\", \"LanguageAS\"); // Language Auto-Selection\r\n\t\thtIEComponents.put(\"08B0E5C0-4FCB-11CF-AAA5-00401C608500\", \"MsftVM\"); // Microsoft virtual machine\r\n\t\thtIEComponents.put(\"5945C046-LE7D-LLDL-BC44-00C04FD912BE\", \"MSNMessengerSrv\"); // MSN Messenger Service\r\n\t\thtIEComponents.put(\"44BBA842-CC51-11CF-AAFA-00AA00B6015B\", \"NetMeetingNT\"); // NetMeeting NT\r\n\t\thtIEComponents.put(\"3AF36230-A269-11D1-B5BF-0000F8051515\", \"OfflineBrwPack\"); // Offline Browsing Pack\r\n\t\thtIEComponents.put(\"44BBA840-CC51-11CF-AAFA-00AA00B6015C\", \"OutlookExpress\"); // Outlook Express\r\n\t\thtIEComponents.put(\"76C19B32-F0C8-11CF-87CC-0020AFEECF20\", \"PanEuropeanDS\"); // Pan-European Text Display Support\r\n\t\thtIEComponents.put(\"4063BE15-3B08-470D-A0D5-B37161CFFD69\", \"QuickTime\"); // Apple Quick Time\r\n\t\thtIEComponents.put(\"DE4AF3B0-F4D4-11D3-B41A-0050DA2E6C21\", \"QuickTimeCheck\"); // Apple Quick Time Check\r\n\t\thtIEComponents.put(\"3049C3E9-B461-4BC5-8870-4C09146192CA\", \"RealPlayer\"); // RealPlayer Download and Record Plugin for IE\r\n\t\thtIEComponents.put(\"2A202491-F00D-11CF-87CC-0020AFEECF20\", \"ShockwaveDir\"); // Macromedia Shockwave Director\r\n\t\thtIEComponents.put(\"3E01D8E0-A72B-4C9F-99BD-8A6E7B97A48D\", \"Skype\"); // Skype\r\n\t\thtIEComponents.put(\"CC2A9BA0-3BDD-11D0-821E-444553540000\", \"TaskScheduler\"); // Task Scheduler\r\n\t\thtIEComponents.put(\"76C19B35-F0C8-11CF-87CC-0020AFEECF20\", \"ThaiDS\"); // Thai Text Display Support\r\n\t\thtIEComponents.put(\"3BF42070-B3B1-11D1-B5C5-0000F8051515\", \"Uniscribe\"); // Uniscribe\r\n\t\thtIEComponents.put(\"4F645220-306D-11D2-995D-00C04F98BBC9\", \"VBScripting\"); // Visual Basic Scripting Support v5.6\r\n\t\thtIEComponents.put(\"76C19B37-F0C8-11CF-87CC-0020AFEECF20\", \"VietnameseDS\"); // Vietnamese Text Display Support\r\n\t\thtIEComponents.put(\"10072CEC-8CC1-11D1-986E-00A0C955B42F\", \"VML\"); // Vector Graphics Rendering (VML)\r\n\t\thtIEComponents.put(\"90E2BA2E-DD1B-4CDE-9134-7A8B86D33CA7\", \"WebEx\"); // WebEx Productivity Tools\r\n\t\thtIEComponents.put(\"73FA19D0-2D75-11D2-995D-00C04F98BBC9\", \"WebFolders\"); // Web Folders\r\n\t\thtIEComponents.put(\"89820200-ECBD-11CF-8B85-00AA005B4340\", \"WinDesktopUpdateNT\"); // Windows Desktop Update NT\r\n\t\thtIEComponents.put(\"9030D464-4C02-4ABF-8ECC-5164760863C6\", \"WinLive\"); // Windows Live ID Sign-in Helper\r\n\t\thtIEComponents.put(\"6BF52A52-394A-11D3-B153-00C04F79FAA6\", \"WinMediaPlayer\"); // Windows Media Player (Versions 7, 8 or 9)\r\n\t\thtIEComponents.put(\"22D6F312-B0F6-11D0-94AB-0080C74C7E95\", \"WinMediaPlayerTrad\"); // Windows Media Player (Traditional Versions)\r\n\r\n\t\tstrTemp = \"\";\r\n\t\tbolFirst = true;\r\n\r\n\t\t/* strOpera gives full path of the file, extract the filenames, ignoring description and length */\r\n\t\tif (navigator.plugins.length > 0) {\r\n\t\t\tfor (iCount = 0; iCount < navigator.plugins.length; iCount = iCount + 1) {\r\n\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\tstrTemp += navigator.plugins[iCount].name;\r\n\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrTemp += glbSep + navigator.plugins[iCount].name;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else if (navigator.mimeTypes.length > 0) {\r\n\t\t\tstrMimeType = navigator.mimeTypes;\r\n\t\t\tfor (iCount = 0; iCount < strMimeType.length; iCount = iCount + 1) {\r\n\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\tstrTemp += strMimeType[iCount].description;\r\n\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstrTemp += glbSep + strMimeType[iCount].description;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tdocument.body.addBehavior(\"#default#clientCaps\");\r\n\t\t\tstrKey = htIEComponents.keys();\r\n\t\t\tfor (iCount = 0; iCount < htIEComponents.size(); iCount = iCount + 1) {\r\n\t\t\t\tstrVersion = activeXDetect(strKey[iCount]);\r\n\t\t\t\tstrName = htIEComponents.get(strKey[iCount]);\r\n\t\t\t\tif (strVersion) {\r\n\t\t\t\t\tif (bolFirst === true) {\r\n\t\t\t\t\t\tstrTemp = strName + glbPair + strVersion;\r\n\t\t\t\t\t\tbolFirst = false;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstrTemp += glbSep + strName + glbPair + strVersion;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstrTemp = strTemp.replace(/,/g, \".\");\r\n\t\t}\r\n\t\tstrTemp = stripIllegalChars(strTemp);\r\n\t\tif (strTemp === \"\") {\r\n\t\t\tstrTemp = \"None\";\r\n\t\t}\r\n\t\tstrOut = strTemp;\r\n\t\treturn strOut;\r\n\t} catch (err) {\r\n\t\treturn glbOnError;\r\n\t}\r\n}"],"sourceRoot":""}