diff --git a/index.html b/index.html
index 7862389..3f03a6c 100644
--- a/index.html
+++ b/index.html
@@ -98,7 +98,7 @@
font-size: 1.5em;
}
-
+
diff --git a/src/ua-parser.js b/src/ua-parser.js
new file mode 100644
index 0000000..3e20d35
--- /dev/null
+++ b/src/ua-parser.js
@@ -0,0 +1,499 @@
+// UAParser.js v0.5.23
+// Lightweight JavaScript-based User-Agent string parser
+// https://github.com/faisalman/ua-parser-js
+//
+// Copyright © 2012-2013 Faisalman
+// Dual licensed under GPLv2 & MIT
+
+(function (window, undefined) {
+
+ 'use strict';
+
+ //////////////
+ // Constants
+ /////////////
+
+
+ var EMPTY = '',
+ UNKNOWN = '?',
+ FUNC_TYPE = 'function',
+ UNDEF_TYPE = 'undefined',
+ OBJ_TYPE = 'object',
+ MAJOR = 'major',
+ MODEL = 'model',
+ NAME = 'name',
+ TYPE = 'type',
+ VENDOR = 'vendor',
+ VERSION = 'version',
+ CONSOLE = 'console',
+ MOBILE = 'mobile',
+ TABLET = 'tablet';
+
+
+ ///////////
+ // Helper
+ //////////
+
+
+ var util = {
+ has : function (str1, str2) {
+ return str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1;
+ }
+ };
+
+
+ ///////////////
+ // Map helper
+ //////////////
+
+
+ var mapper = {
+
+ rgx : function () {
+
+ // loop through all regexes maps
+ for (var result, i = 0, j, k, p, q, matches, match, args = arguments; i < args.length; i += 2) {
+
+ var regex = args[i], // even sequence (0,2,4,..)
+ props = args[i + 1]; // odd sequence (1,3,5,..)
+
+ // construct object barebones
+ if (typeof(result) === UNDEF_TYPE) {
+ result = {};
+ for (p in props) {
+ q = props[p];
+ if (typeof(q) === OBJ_TYPE) {
+ result[q[0]] = undefined;
+ } else {
+ result[q] = undefined;
+ }
+ }
+ }
+
+ // try matching uastring with regexes
+ for (j = k = 0; j < regex.length; j++) {
+ matches = regex[j].exec(this.getUA());
+ if (!!matches) {
+ for (p in props) {
+ match = matches[++k];
+ q = props[p];
+ // check if given property is actually array
+ if (typeof(q) === OBJ_TYPE) {
+ if (q.length == 2) {
+ // assign given value, ignore regex match
+ result[q[0]] = q[1];
+ } else if (q.length == 3) {
+ // check whether function or regex
+ if (typeof(q[1]) === FUNC_TYPE && !(q[1].exec && q[1].test)) {
+ // call function (usually string mapper)
+ result[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;
+ } else {
+ // sanitize match using given regex
+ result[q[0]] = match ? match.replace(q[1], q[2]) : undefined;
+ }
+ }
+ } else {
+ result[q] = match ? match : undefined;
+ }
+ }
+ break;
+ }
+ }
+
+ if(!!matches) break; // break the loop immediately if match found
+ }
+ return result;
+ },
+
+ str : function (str, map) {
+
+ for (var i in map) {
+ // check if array
+ if (typeof(map[i]) === OBJ_TYPE && map[i].length > 0) {
+ for (var j in map[i]) {
+ if (util.has(map[i][j], str)) {
+ return (i === UNKNOWN) ? undefined : i;
+ }
+ }
+ } else if (util.has(map[i], str)) {
+ return (i === UNKNOWN) ? undefined : i;
+ }
+ }
+ return str;
+ }
+ };
+
+
+ ///////////////
+ // String map
+ //////////////
+
+
+ var maps = {
+
+ browser : {
+ oldsafari : {
+ major : {
+ '1' : ['/8', '/1', '/3'],
+ '2' : '/4',
+ '?' : '/'
+ },
+ version : {
+ '1.0' : '/8',
+ '1.2' : '/1',
+ '1.3' : '/3',
+ '2.0' : '/412',
+ '2.0.2' : '/416',
+ '2.0.3' : '/417',
+ '2.0.4' : '/419',
+ '?' : '/'
+ }
+ }
+ },
+
+ device : {
+ sprint : {
+ model : {
+ 'Evo Shift 4G' : '7373KT'
+ },
+ vendor : {
+ 'HTC' : 'APA',
+ 'Sprint' : 'Sprint'
+ }
+ }
+ },
+
+ os : {
+ windows : {
+ version : {
+ 'ME' : '4.90',
+ 'NT 3.11' : 'NT3.51',
+ 'NT 4.0' : 'NT4.0',
+ '2000' : 'NT 5.0',
+ 'XP' : ['NT 5.1', 'NT 5.2'],
+ 'Vista' : 'NT 6.0',
+ '7' : 'NT 6.1',
+ '8' : 'NT 6.2',
+ 'RT' : 'ARM'
+ }
+ }
+ }
+ };
+
+
+ //////////////
+ // Regex map
+ /////////////
+
+
+ var regexes = {
+
+ browser : [[
+
+ // Presto based
+ /(opera\smini)\/((\d+)?[\w\.-]+)/i, // Opera Mini
+ /(opera\s[mobiletab]+).+version\/((\d+)?[\w\.-]+)/i, // Opera Mobi/Tablet
+ /(opera).+version\/((\d+)?[\w\.]+)/i, // Opera > 9.80
+ /(opera)[\/\s]+((\d+)?[\w\.]+)/i // Opera < 9.80
+
+ ], [NAME, VERSION, MAJOR], [
+
+ /\s(opr)\/((\d+)?[\w\.]+)/i // Opera Webkit
+ ], [[NAME, 'Opera'], VERSION, MAJOR], [
+
+ // Mixed
+ /(kindle)\/((\d+)?[\w\.]+)/i, // Kindle
+ /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i,
+ // Lunascape/Maxthon/Netfront/Jasmine/Blazer
+
+ // Trident based
+ /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i,
+ // Avant/IEMobile/SlimBrowser/Baidu
+ /ms(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer
+
+ // Webkit/KHTML based
+ /(rekonq)((?:\/)[\w\.]+)*/i, // Rekonq
+ /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt)\/((\d+)?[\w\.-]+)/i
+ // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt
+ ], [NAME, VERSION, MAJOR], [
+
+ /(yabrowser)\/((\d+)?[\w\.]+)/i // Yandex
+ ], [[NAME, 'Yandex'], VERSION, MAJOR], [
+
+ /(comodo_dragon)\/((\d+)?[\w\.]+)/i // Comodo Dragon
+ ], [[NAME, /_/g, ' '], VERSION, MAJOR], [
+
+ /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i
+ // Chrome/OmniWeb/Arora/Tizen/Nokia
+ ], [NAME, VERSION, MAJOR], [
+
+ /(dolfin)\/((\d+)?[\w\.]+)/i // Dolphin
+ ], [[NAME, 'Dolphin'], VERSION, MAJOR], [
+
+ /((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i // Chrome for Android/iOS
+ ], [[NAME, 'Chrome'], VERSION, MAJOR], [
+
+ /version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i // Mobile Safari
+ ], [VERSION, MAJOR, [NAME, 'Mobile Safari']], [
+
+ /version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile
+ ], [VERSION, MAJOR, NAME], [
+
+ /webkit.+?(mobile\s?safari|safari)((\/[\w\.]+))/i // Safari < 3.0
+ ], [NAME, [MAJOR, mapper.str, maps.browser.oldsafari.major], [VERSION, mapper.str, maps.browser.oldsafari.version]], [
+
+ /(konqueror)\/((\d+)?[\w\.]+)/i, // Konqueror
+ /(webkit|khtml)\/((\d+)?[\w\.]+)/i
+ ], [NAME, VERSION, MAJOR], [
+
+ // Gecko based
+ /(navigator|netscape)\/((\d+)?[\w\.-]+)/i // Netscape
+ ], [[NAME, 'Netscape'], VERSION, MAJOR], [
+ /(swiftfox)/i, // Swiftfox
+ /(iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i,
+ // Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror
+ /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i,
+ // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix
+ /(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla
+
+ // Other
+ /(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?((\d+)?[\w\.]+)/i,
+ // UCBrowser/Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf
+ /(links)\s\(((\d+)?[\w\.]+)/i, // Links
+ /(gobrowser)\/?((\d+)?[\w\.]+)*/i, // GoBrowser
+ /(ice\s?browser)\/v?((\d+)?[\w\._]+)/i, // ICE Browser
+ /(mosaic)[\/\s]((\d+)?[\w\.]+)/i // Mosaic
+ ], [NAME, VERSION, MAJOR]
+ ],
+
+ device : [[
+
+ /\((ipad|playbook);[\w\s\);-]+(rim|apple)/i // iPad/PlayBook
+ ], [MODEL, VENDOR, [TYPE, TABLET]], [
+
+ /(hp).+(touchpad)/i, // HP TouchPad
+ /(kindle)\/([\w\.]+)/i, // Kindle
+ /\s(nook)[\w\s]+build\/(\w+)/i, // Nook
+ /(dell)\s(strea[kpr\s\d]*[\dko])/i // Dell Streak
+ ], [VENDOR, MODEL, [TYPE, TABLET]], [
+
+ /\((ip[honed]+);.+(apple)/i // iPod/iPhone
+ ], [MODEL, VENDOR, [TYPE, MOBILE]], [
+
+ /(blackberry)[\s-]?(\w+)/i, // BlackBerry
+ /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola)[\s_-]?([\w-]+)*/i,
+ // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Huawei/Meizu/Motorola
+ /(hp)\s([\w\s]+\w)/i, // HP iPAQ
+ /(asus)-?(\w+)/i // Asus
+ ], [VENDOR, MODEL, [TYPE, MOBILE]], [
+ /\((bb10);\s(\w+)/i // BlackBerry 10
+ ], [[VENDOR, 'BlackBerry'], MODEL, [TYPE, MOBILE]], [
+
+ /android.+((transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+))/i // Asus Tablets
+ ], [[VENDOR, 'Asus'], MODEL, [TYPE, TABLET]], [
+
+ /(sony)\s(tablet\s[ps])/i // Sony Tablets
+ ], [VENDOR, MODEL, [TYPE, TABLET]], [
+
+ /(nintendo)\s([wids3u]+)/i // Nintendo
+ ], [VENDOR, MODEL, [TYPE, CONSOLE]], [
+
+ /((playstation)\s[3portablevi]+)/i // Playstation
+ ], [[VENDOR, 'Sony'], MODEL, [TYPE, CONSOLE]], [
+
+ /(sprint\s(\w+))/i // Sprint Phones
+ ], [[VENDOR, mapper.str, maps.device.sprint.vendor], [MODEL, mapper.str, maps.device.sprint.model], [TYPE, MOBILE]], [
+
+ /(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i, // HTC
+ /(zte)-(\w+)*/i, // ZTE
+ /(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|;\ssony)[_\s-]?([\w-]+)*/i
+ // Alcatel/GeeksPhone/Huawei/Lenovo/Nexian/Panasonic/Sony
+ ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [
+
+ /\s((milestone|droid[2x]?))[globa\s]*\sbuild\//i, // Motorola
+ /(mot)[\s-]?(\w+)*/i
+ ], [[VENDOR, 'Motorola'], MODEL, [TYPE, MOBILE]], [
+ /android.+\s((mz60\d|xoom[\s2]{0,2}))\sbuild\//i
+ ], [[VENDOR, 'Motorola'], MODEL, [TYPE, TABLET]], [
+
+ /android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n8000|sgh-t8[56]9))/i
+ ], [[VENDOR, 'Samsung'], MODEL, [TYPE, TABLET]], [ // Samsung
+ /((s[cgp]h-\w+|gt-\w+|galaxy\snexus))/i,
+ /(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,
+ /sec-((sgh\w+))/i
+ ], [[VENDOR, 'Samsung'], MODEL, [TYPE, MOBILE]], [
+ /(sie)-(\w+)*/i // Siemens
+ ], [[VENDOR, 'Siemens'], MODEL, [TYPE, MOBILE]], [
+
+ /(maemo|nokia).*(n900|lumia\s\d+)/i, // Nokia
+ /(nokia)[\s_-]?([\w-]+)*/i
+ ], [[VENDOR, 'Nokia'], MODEL, [TYPE, MOBILE]], [
+
+ /android\s3\.[\s\w-;]{10}((a\d{3}))/i // Acer
+ ], [[VENDOR, 'Acer'], MODEL, [TYPE, TABLET]], [
+
+ /android\s3\.[\s\w-;]{10}(lg?)-([06cv9]{3,4})/i // LG
+ ], [[VENDOR, 'LG'], MODEL, [TYPE, TABLET]], [
+ /(lg)[e;\s-\/]+(\w+)*/i
+ ], [[VENDOR, 'LG'], MODEL, [TYPE, MOBILE]], [
+
+ /(mobile|tablet);.+rv\:.+gecko\//i // Unidentifiable
+ ], [TYPE, VENDOR, MODEL]
+ ],
+
+ engine : [[
+
+ /(presto)\/([\w\.]+)/i, // Presto
+ /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m
+ /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links
+ /(icab)[\/\s]([23]\.[\d\.]+)/i // iCab
+ ], [NAME, VERSION], [
+
+ /rv\:([\w\.]+).*(gecko)/i // Gecko
+ ], [VERSION, NAME]
+ ],
+
+ os : [[
+
+ // Windows based
+ /(windows)\snt\s6\.2;\s(arm)/i, // Windows RT
+ /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i
+ ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [
+ /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
+ ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [
+
+ // Mobile/Embedded OS
+ /\((bb)(10);/i // BlackBerry 10
+ ], [[NAME, 'BlackBerry'], VERSION], [
+ /(blackberry)\w*\/?([\w\.]+)*/i, // Blackberry
+ /(tizen)\/([\w\.]+)/i, // Tizen
+ /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i
+ // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo
+ ], [NAME, VERSION], [
+ /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i // Symbian
+ ], [[NAME, 'Symbian'], VERSION],[
+ /mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS
+ ], [[NAME, 'Firefox OS'], VERSION], [
+
+ // Console
+ /(nintendo|playstation)\s([wids3portablevu]+)/i, // Nintendo/Playstation
+
+ // GNU/Linux based
+ /(mint)[\/\s\(]?(\w+)*/i, // Mint
+ /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i,
+ // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware
+ // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk
+ /(hurd|linux)\s?([\w\.]+)*/i, // Hurd/Linux
+ /(gnu)\s?([\w\.]+)*/i // GNU
+ ], [NAME, VERSION], [
+
+ /(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS
+ ], [[NAME, 'Chromium OS'], VERSION],[
+
+ // Solaris
+ /(sunos)\s?([\w\.]+\d)*/i // Solaris
+ ], [[NAME, 'Solaris'], VERSION], [
+
+ // BSD based
+ /\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly
+ ], [NAME, VERSION],[
+
+ /(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i // iOS
+ ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [
+
+ /(mac\sos\sx)\s?([\w\s\.]+\w)*/i // Mac OS
+ ], [NAME, [VERSION, /_/g, '.']], [
+
+ // Other
+ /(haiku)\s(\w+)/i, // Haiku
+ /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, // AIX
+ /(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos)/i,
+ // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS
+ /(unix)\s?([\w\.]+)*/i // UNIX
+ ], [NAME, VERSION]
+ ]
+ };
+
+
+ /////////////////
+ // Constructor
+ ////////////////
+
+
+ var UAParser = function (uastring) {
+
+ var ua = uastring || ((window && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);
+
+ if (!(this instanceof UAParser)) {
+ return new UAParser(uastring).getResult();
+ }
+ this.getBrowser = function () {
+ return mapper.rgx.apply(this, regexes.browser);
+ };
+ this.getDevice = function () {
+ return mapper.rgx.apply(this, regexes.device);
+ };
+ this.getEngine = function () {
+ return mapper.rgx.apply(this, regexes.engine);
+ };
+ this.getOS = function () {
+ return mapper.rgx.apply(this, regexes.os);
+ };
+ this.getResult = function() {
+ return {
+ browser : this.getBrowser(),
+ engine : this.getEngine(),
+ os : this.getOS(),
+ device : this.getDevice()
+ };
+ };
+ this.getUA = function() {
+ return ua;
+ };
+ this.setUA = function (uastring) {
+ ua = uastring;
+ return this;
+ };
+ this.setUA(ua);
+ };
+
+
+ ///////////
+ // Export
+ //////////
+
+
+ // check js environment
+ if (typeof(exports) !== UNDEF_TYPE) {
+ // nodejs env
+ if (typeof(module) !== UNDEF_TYPE && module.exports) {
+ exports = module.exports = UAParser;
+ }
+ exports.UAParser = UAParser;
+ } else if (typeof(define) === FUNC_TYPE && define.amd) {
+ // requirejs env
+ define(function() {
+ return UAParser;
+ });
+ } else {
+ // browser env
+ window.UAParser = UAParser;
+ // jQuery specific (optional)
+ if (typeof(window.jQuery) !== UNDEF_TYPE) {
+ var $ = window.jQuery;
+ var parser = new UAParser();
+ $.ua = parser.getResult();
+ $.ua.get = function() {
+ return parser.getUA();
+ };
+ $.ua.set = function(uastring) {
+ parser.setUA(uastring);
+ var result = parser.getResult();
+ for (var prop in result) {
+ $.ua[prop] = result[prop];
+ }
+ };
+ }
+ }
+
+})(this);
diff --git a/src/ua-parser.min.js b/src/ua-parser.min.js
deleted file mode 100644
index 063e24a..0000000
--- a/src/ua-parser.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// UAParser.js v0.5.23
-// Lightweight JavaScript-based User-Agent string parser
-// https://github.com/faisalman/ua-parser-js
-//
-// Copyright © 2012-2013 Faisalman
-// Dual licensed under GPLv2 & MIT
-(function(e,t){"use strict";var n="",r="?",i="function",s="undefined",o="object",u="major",a="model",f="name",l="type",c="vendor",h="version",p="console",d="mobile",v="tablet",m={has:function(e,t){return t.toLowerCase().indexOf(e.toLowerCase())!==-1},is:function(e,t){return typeof e===t}},g={rgx:function(){for(var e,n=0,r,u,a,f,l,c,h=arguments;n0){for(var s in n[i])if(m.has(n[i][s],e))return i===r?t:i}else if(m.has(n[i],e))return i===r?t:i;return e}},y={browser:{oldsafari:{major:{1:["/8","/1","/3"],2:"/4","?":"/"},version:{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}}},device:{sprint:{model:{"Evo Shift 4G":"7373KT"},vendor:{HTC:"APA",Sprint:"Sprint"}}},os:{windows:{version:{ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",RT:"ARM"}}}},b={browser:[[/(opera\smini)\/((\d+)?[\w\.-]+)/i,/(opera\s[mobiletab]+).+version\/((\d+)?[\w\.-]+)/i,/(opera).+version\/((\d+)?[\w\.]+)/i,/(opera)[\/\s]+((\d+)?[\w\.]+)/i],[f,h,u],[/\s(opr)\/((\d+)?[\w\.]+)/i],[[f,"Opera"],h,u],[/(kindle)\/((\d+)?[\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i,/(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i,/ms(ie)\s((\d+)?[\w\.]+)/i,/(rekonq)((?:\/)[\w\.]+)*/i,/(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt)\/((\d+)?[\w\.-]+)/i],[f,h,u],[/(yabrowser)\/((\d+)?[\w\.]+)/i],[[f,"Yandex"],h,u],[/(comodo_dragon)\/((\d+)?[\w\.]+)/i],[[f,/_/g," "],h,u],[/(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i],[f,h,u],[/(dolfin)\/((\d+)?[\w\.]+)/i],[[f,"Dolphin"],h,u],[/((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i],[[f,"Chrome"],h,u],[/version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i],[h,u,[f,"Mobile Safari"]],[/version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i],[h,u,f],[/webkit.+?(mobile\s?safari|safari)((\/[\w\.]+))/i],[f,[u,g.str,y.browser.oldsafari.major],[h,g.str,y.browser.oldsafari.version]],[/(konqueror)\/((\d+)?[\w\.]+)/i,/(webkit|khtml)\/((\d+)?[\w\.]+)/i],[f,h,u],[/(navigator|netscape)\/((\d+)?[\w\.-]+)/i],[[f,"Netscape"],h,u],[/(swiftfox)/i,/(iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i,/(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i,/(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i,/(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?((\d+)?[\w\.]+)/i,/(links)\s\(((\d+)?[\w\.]+)/i,/(gobrowser)\/?((\d+)?[\w\.]+)*/i,/(ice\s?browser)\/v?((\d+)?[\w\._]+)/i,/(mosaic)[\/\s]((\d+)?[\w\.]+)/i],[f,h,u]],device:[[/\((ipad|playbook);[\w\s\);-]+(rim|apple)/i],[a,c,[l,v]],[/(hp).+(touchpad)/i,/(kindle)\/([\w\.]+)/i,/\s(nook)[\w\s]+build\/(\w+)/i,/(dell)\s(strea[kpr\s\d]*[\dko])/i],[c,a,[l,v]],[/\((ip[honed]+);.+(apple)/i],[a,c,[l,d]],[/(blackberry)[\s-]?(\w+)/i,/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|huawei|meizu|motorola)[\s_-]?([\w-]+)*/i,/(hp)\s([\w\s]+\w)/i,/(asus)-?(\w+)/i],[c,a,[l,d]],[/\((bb10);\s(\w+)/i],[[c,"BlackBerry"],a,[l,d]],[/android.+((transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+))/i],[[c,"Asus"],a,[l,v]],[/(sony)\s(tablet\s[ps])/i],[c,a,[l,v]],[/(nintendo)\s([wids3u]+)/i],[c,a,[l,p]],[/((playstation)\s[3portablevi]+)/i],[[c,"Sony"],a,[l,p]],[/(sprint\s(\w+))/i],[[c,g.str,y.device.sprint.vendor],[a,g.str,y.device.sprint.model],[l,d]],[/(htc)[;_\s-]+([\w\s]+(?=\))|\w+)*/i,/(zte)-(\w+)*/i,/(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|;\ssony)[_\s-]?([\w-]+)*/i],[c,[a,/_/g," "],[l,d]],[/\s((milestone|droid[2x]?))[globa\s]*\sbuild\//i,/(mot)[\s-]?(\w+)*/i],[[c,"Motorola"],a,[l,d]],[/android.+\s((mz60\d|xoom[\s2]{0,2}))\sbuild\//i],[[c,"Motorola"],a,[l,v]],[/android.+((sch-i[89]0\d|shw-m380s|gt-p\d{4}|gt-n8000|sgh-t8[56]9))/i],[[c,"Samsung"],a,[l,v]],[/((s[cgp]h-\w+|gt-\w+|galaxy\snexus))/i,/(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,/sec-((sgh\w+))/i],[[c,"Samsung"],a,[l,d]],[/(sie)-(\w+)*/i],[[c,"Siemens"],a,[l,d]],[/(maemo|nokia).*(n900|lumia\s\d+)/i,/(nokia)[\s_-]?([\w-]+)*/i],[[c,"Nokia"],a,[l,d]],[/android\s3\.[\s\w-;]{10}((a\d{3}))/i],[[c,"Acer"],a,[l,v]],[/android\s3\.[\s\w-;]{10}(lg?)-([06cv9]{3,4})/i],[[c,"LG"],a,[l,v]],[/(lg)[e;\s-\/]+(\w+)*/i],[[c,"LG"],a,[l,d]],[/(mobile|tablet);.+rv\:.+gecko\//i],[l,c,a]],engine:[[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i,/(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i,/(icab)[\/\s]([23]\.[\d\.]+)/i],[f,h],[/rv\:([\w\.]+).*(gecko)/i],[h,f]],os:[[/(windows)\snt\s6\.2;\s(arm)/i,/(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i],[f,[h,g.str,y.os.windows.version]],[/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i],[[f,"Windows"],[h,g.str,y.os.windows.version]],[/\((bb)(10);/i],[[f,"BlackBerry"],h],[/(blackberry)\w*\/?([\w\.]+)*/i,/(tizen)\/([\w\.]+)/i,/(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i],[f,h],[/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i],[[f,"Symbian"],h],[/mozilla.+\(mobile;.+gecko.+firefox/i],[[f,"Firefox OS"],h],[/(nintendo|playstation)\s([wids3portablevu]+)/i,/(mint)[\/\s\(]?(\w+)*/i,/(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i,/(hurd|linux)\s?([\w\.]+)*/i,/(gnu)\s?([\w\.]+)*/i],[f,h],[/(cros)\s[\w]+\s([\w\.]+\w)/i],[[f,"Chromium OS"],h],[/(sunos)\s?([\w\.]+\d)*/i],[[f,"Solaris"],h],[/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i],[f,h],[/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i],[[f,"iOS"],[h,/_/g,"."]],[/(mac\sos\sx)\s?([\w\s\.]+\w)*/i],[f,[h,/_/g,"."]],[/(haiku)\s(\w+)/i,/(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i,/(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos)/i,/(unix)\s?([\w\.]+)*/i],[f,h]]},w=function(t){var r=t||(e&&e.navigator&&e.navigator.userAgent?e.navigator.userAgent:n);if(!(this instanceof w))return(new w(t)).getResult();this.getBrowser=function(){return g.rgx.apply(this,b.browser)},this.getDevice=function(){return g.rgx.apply(this,b.device)},this.getEngine=function(){return g.rgx.apply(this,b.engine)},this.getOS=function(){return g.rgx.apply(this,b.os)},this.getResult=function(){return{browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice()}},this.getUA=function(){return r},this.setUA=function(e){return r=e,this},this.setUA(r)};if(!m.is(exports,s))!m.is(module,s)&&module.exports&&(exports=module.exports=w),exports.UAParser=w;else if(m.is(define,i)&&define.amd)define(function(){return w});else{e.UAParser=w;if(!m.is(e.jQuery,s)){var E=e.jQuery,S=new w;E.ua=S.getResult(),E.ua.get=function(){return S.getUA()},E.ua.set=function(e){S.setUA(e);var t=S.getResult();for(var n in t)E.ua[n]=t[n]}}}})(this);
\ No newline at end of file