!function(n,t,i){"undefined"!=typeof module&&module.exports?module.exports=i():"function"==typeof define&&define.amd?define(i):t[n]=i()}("Fingerprint",this,function(){"use strict";var n=function(n){var t,i;t=Array.prototype.forEach;i=Array.prototype.map;this.each=function(n,i,r){var u,e,f;if(null!==n)if(t&&n.forEach===t)n.forEach(i,r);else if(n.length===+n.length){for(u=0,e=n.length;e>u;u++)if(i.call(r,n[u],u,n)==={})return}else for(f in n)if(n.hasOwnProperty(f)&&i.call(r,n[f],f,n)==={})return};this.map=function(n,t,r){var u=[];return null==n?u:i&&n.map===i?n.map(t,r):(this.each(n,function(n,i,f){u[u.length]=t.call(r,n,i,f)}),u)};"object"==typeof n?(this.hasher=n.hasher,this.screen_resolution=n.screen_resolution,this.canvas=n.canvas,this.ie_activex=n.ie_activex):"function"==typeof n&&(this.hasher=n)};return n.prototype={get:function(){var n=[],t;return(n.push(navigator.userAgent),n.push(navigator.language),n.push(screen.colorDepth),this.screen_resolution)&&(t=this.getScreenResolution(),"undefined"!=typeof t&&n.push(this.getScreenResolution().join("x"))),n.push((new Date).getTimezoneOffset()),n.push(this.hasSessionStorage()),n.push(this.hasLocalStorage()),n.push(!!window.indexedDB),document.body?n.push(typeof document.body.addBehavior):n.push("undefined"),n.push(typeof openDatabase),n.push(navigator.cpuClass),n.push(navigator.platform),n.push(navigator.doNotTrack),n.push(this.getPluginsString()),this.canvas&&this.isCanvasSupported()&&n.push(this.getCanvasFingerprint()),this.hasher?this.hasher(n.join("###"),31):this.murmurhash3_32_gc(n.join("###"),31)},murmurhash3_32_gc:function(n,t){var o,h,r,s,f,e,i,u;for(o=3&n.length,h=n.length-o,r=t,f=3432918353,e=461845907,u=0;h>u;)i=255&n.charCodeAt(u)|(255&n.charCodeAt(++u))<<8|(255&n.charCodeAt(++u))<<16|(255&n.charCodeAt(++u))<<24,++u,i=(65535&i)*f+(((i>>>16)*f&65535)<<16)&4294967295,i=i<<15|i>>>17,i=(65535&i)*e+(((i>>>16)*e&65535)<<16)&4294967295,r^=i,r=r<<13|r>>>19,s=5*(65535&r)+((5*(r>>>16)&65535)<<16)&4294967295,r=(65535&s)+27492+(((s>>>16)+58964&65535)<<16);switch(i=0,o){case 3:i^=(255&n.charCodeAt(u+2))<<16;case 2:i^=(255&n.charCodeAt(u+1))<<8;case 1:i^=255&n.charCodeAt(u);i=(65535&i)*f+(((i>>>16)*f&65535)<<16)&4294967295;i=i<<15|i>>>17;i=(65535&i)*e+(((i>>>16)*e&65535)<<16)&4294967295;r^=i}return r^=n.length,r^=r>>>16,r=2246822507*(65535&r)+((2246822507*(r>>>16)&65535)<<16)&4294967295,r^=r>>>13,r=3266489909*(65535&r)+((3266489909*(r>>>16)&65535)<<16)&4294967295,r^=r>>>16,r>>>0},hasLocalStorage:function(){try{return!!window.localStorage}catch(n){return!0}},hasSessionStorage:function(){try{return!!window.sessionStorage}catch(n){return!0}},isCanvasSupported:function(){var n=document.createElement("canvas");return!(!n.getContext||!n.getContext("2d"))},isIE:function(){return"Microsoft Internet Explorer"===navigator.appName?!0:!("Netscape"!==navigator.appName||!/Trident/.test(navigator.userAgent))},getPluginsString:function(){return this.isIE()&&this.ie_activex?this.getIEPluginsString():this.getRegularPluginsString()},getRegularPluginsString:function(){return this.map(navigator.plugins,function(n){var t=this.map(n,function(n){return[n.type,n.suffixes].join("~")}).join(",");return[n.name,n.description,t].join("::")},this).join(";")},getIEPluginsString:function(){if(window.ActiveXObject)return this.map(["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"],function(n){try{return new ActiveXObject(n),n}catch(t){return null}}).join(";");return""},getScreenResolution:function(){return[screen.height,screen.width]},getCanvasFingerprint:function(){var t=document.createElement("canvas"),n=t.getContext("2d"),i="http://valve.github.io";return n.textBaseline="top",n.font="14px 'Arial'",n.textBaseline="alphabetic",n.fillStyle="#f60",n.fillRect(125,1,62,20),n.fillStyle="#069",n.fillText(i,2,15),n.fillStyle="rgba(102, 204, 0, 0.7)",n.fillText(i,4,17),t.toDataURL()}},n})