{
  "user_agent_parsers": [
    {
      "regex": "(SeaMonkey|Camino)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)"
    },
    {
      "regex": "(Pale[Mm]oon)/(\\d+)\\.(\\d+)\\.?(\\d+)?",
      "family_replacement": "Pale Moon (Firefox Variant)"
    },
    {
      "regex": "(Fennec)/(\\d+)\\.(\\d+)\\.?([ab]?\\d+[a-z]*)",
      "family_replacement": "Firefox Mobile"
    },
    {
      "regex": "(Fennec)/(\\d+)\\.(\\d+)(pre)",
      "family_replacement": "Firefox Mobile"
    },
    {
      "regex": "(Fennec)/(\\d+)\\.(\\d+)",
      "family_replacement": "Firefox Mobile"
    },
    {
      "regex": "Mobile.*(Firefox)/(\\d+)\\.(\\d+)",
      "family_replacement": "Firefox Mobile"
    },
    {
      "regex": "(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?)",
      "family_replacement": "Firefox ($1)"
    },
    {
      "regex": "(Firefox)/(\\d+)\\.(\\d+)(a\\d+[a-z]*)",
      "family_replacement": "Firefox Alpha"
    },
    {
      "regex": "(Firefox)/(\\d+)\\.(\\d+)(b\\d+[a-z]*)",
      "family_replacement": "Firefox Beta"
    },
    {
      "regex": "(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(a\\d+[a-z]*)",
      "family_replacement": "Firefox Alpha"
    },
    {
      "regex": "(Firefox)-(?:\\d+\\.\\d+)?/(\\d+)\\.(\\d+)(b\\d+[a-z]*)",
      "family_replacement": "Firefox Beta"
    },
    {
      "regex": "(Namoroka|Shiretoko|Minefield)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?",
      "family_replacement": "Firefox ($1)"
    },
    {
      "regex": "(Firefox).*Tablet browser (\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "MicroB"
    },
    {
      "regex": "(MozillaDeveloperPreview)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)?"
    },
    {
      "regex": "(Flock)/(\\d+)\\.(\\d+)(b\\d+?)"
    },
    {
      "regex": "(RockMelt)/(\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Navigator)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Netscape"
    },
    {
      "regex": "(Navigator)/(\\d+)\\.(\\d+)([ab]\\d+)",
      "family_replacement": "Netscape"
    },
    {
      "regex": "(Netscape6)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Netscape"
    },
    {
      "regex": "(MyIBrow)/(\\d+)\\.(\\d+)",
      "family_replacement": "My Internet Browser"
    },
    {
      "regex": "(Opera Tablet).*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
    },
    {
      "regex": "(Opera)/.+Opera Mobi.+Version/(\\d+)\\.(\\d+)",
      "family_replacement": "Opera Mobile"
    },
    {
      "regex": "Opera Mobi",
      "family_replacement": "Opera Mobile"
    },
    {
      "regex": "(Opera Mini)/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Opera Mini)/att/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Opera)/9.80.*Version/(\\d+)\\.(\\d+)(?:\\.(\\d+))?"
    },
    {
      "regex": "(?:Mobile Safari).*(OPR)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Opera Mobile"
    },
    {
      "regex": "(?:Chrome).*(OPR)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Opera"
    },
    {
      "regex": "(hpw|web)OS/(\\d+)\\.(\\d+)(?:\\.(\\d+))?",
      "family_replacement": "webOS Browser"
    },
    {
      "regex": "(luakit)",
      "family_replacement": "LuaKit"
    },
    {
      "regex": "(Snowshoe)/(\\d+)\\.(\\d+).(\\d+)"
    },
    {
      "regex": "(Lightning)/(\\d+)\\.(\\d+)([ab]?\\d+[a-z]*)"
    },
    {
      "regex": "(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+(?:pre)?) \\(Swiftfox\\)",
      "family_replacement": "Swiftfox"
    },
    {
      "regex": "(Firefox)/(\\d+)\\.(\\d+)([ab]\\d+[a-z]*)? \\(Swiftfox\\)",
      "family_replacement": "Swiftfox"
    },
    {
      "regex": "(rekonq)/(\\d+)\\.(\\d+)\\.?(\\d+)? Safari",
      "family_replacement": "Rekonq"
    },
    {
      "regex": "rekonq",
      "family_replacement": "Rekonq"
    },
    {
      "regex": "(conkeror|Conkeror)/(\\d+)\\.(\\d+)\\.?(\\d+)?",
      "family_replacement": "Conkeror"
    },
    {
      "regex": "(konqueror)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Konqueror"
    },
    {
      "regex": "(WeTab)-Browser"
    },
    {
      "regex": "(Comodo_Dragon)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Comodo Dragon"
    },
    {
      "regex": "(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)"
    },
    {
      "regex": "(Symphony) (\\d+).(\\d+)"
    },
    {
      "regex": "(Minimo)"
    },
    {
      "regex": "(CrMo)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Chrome Mobile"
    },
    {
      "regex": "(CriOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Chrome Mobile iOS"
    },
    {
      "regex": "(Chrome)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+) Mobile",
      "family_replacement": "Chrome Mobile"
    },
    {
      "regex": "(chromeframe)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Chrome Frame"
    },
    {
      "regex": "(UCBrowser)[ /](\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "UC Browser"
    },
    {
      "regex": "(UC Browser)[ /](\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(UC Browser|UCBrowser|UCWEB)(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "UC Browser"
    },
    {
      "regex": "(SLP Browser)/(\\d+)\\.(\\d+)",
      "family_replacement": "Tizen Browser"
    },
    {
      "regex": "(SE 2\\.X) MetaSr (\\d+)\\.(\\d+)",
      "family_replacement": "Sogou Explorer"
    },
    {
      "regex": "(baidubrowser)[/\\s](\\d+)",
      "family_replacement": "Baidu Browser"
    },
    {
      "regex": "(FlyFlow)/(\\d+)\\.(\\d+)",
      "family_replacement": "Baidu Explorer"
    },
    {
      "regex": "(Pingdom.com_bot_version_)(\\d+)\\.(\\d+)",
      "family_replacement": "PingdomBot"
    },
    {
      "regex": "(facebookexternalhit)/(\\d+)\\.(\\d+)",
      "family_replacement": "FacebookBot"
    },
    {
      "regex": "(Twitterbot)/(\\d+)\\.(\\d+)",
      "family_replacement": "TwitterBot"
    },
    {
      "regex": "(Rackspace Monitoring)/(\\d+)\\.(\\d+)",
      "family_replacement": "RackspaceBot"
    },
    {
      "regex": "(PyAMF)/(\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(YaBrowser)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Yandex Browser"
    },
    {
      "regex": "(Chrome)/(\\d+)\\.(\\d+)\\.(\\d+).* MRCHROME",
      "family_replacement": "Mail.ru Chromium Browser"
    },
    {
      "regex": "(AOL) (\\d+)\\.(\\d+); AOLBuild (\\d+)"
    },
    {
      "regex": "(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Chromium|Chrome)/(\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser)/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Chromium|Chrome)/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\\d+)\\.(\\d+)\\.?(\\d+)?"
    },
    {
      "regex": "(Kindle)/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Android) Donut",
      "v2_replacement": "2",
      "v1_replacement": "1"
    },
    {
      "regex": "(Android) Eclair",
      "v2_replacement": "1",
      "v1_replacement": "2"
    },
    {
      "regex": "(Android) Froyo",
      "v2_replacement": "2",
      "v1_replacement": "2"
    },
    {
      "regex": "(Android) Gingerbread",
      "v2_replacement": "3",
      "v1_replacement": "2"
    },
    {
      "regex": "(Android) Honeycomb",
      "v1_replacement": "3"
    },
    {
      "regex": "(IEMobile)[ /](\\d+)\\.(\\d+)",
      "family_replacement": "IE Mobile"
    },
    {
      "regex": "(MSIE) (\\d+)\\.(\\d+).*XBLWP7",
      "family_replacement": "IE Large Screen"
    },
    {
      "regex": "(Firefox)/(\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Firefox)/(\\d+)\\.(\\d+)(pre|[ab]\\d+[a-z]*)?"
    },
    {
      "regex": "(Obigo)InternetBrowser"
    },
    {
      "regex": "(Obigo)\\-Browser"
    },
    {
      "regex": "(Obigo|OBIGO)[^\\d]*(\\d+)(?:.(\\d+))?",
      "family_replacement": "Obigo"
    },
    {
      "regex": "(MAXTHON|Maxthon) (\\d+)\\.(\\d+)",
      "family_replacement": "Maxthon"
    },
    {
      "regex": "(Maxthon|MyIE2|Uzbl|Shiira)",
      "v1_replacement": "0"
    },
    {
      "regex": "PLAYSTATION 3.+WebKit",
      "family_replacement": "NetFront NX"
    },
    {
      "regex": "PLAYSTATION 3",
      "family_replacement": "NetFront"
    },
    {
      "regex": "(PlayStation Portable)",
      "family_replacement": "NetFront"
    },
    {
      "regex": "(PlayStation Vita)",
      "family_replacement": "NetFront NX"
    },
    {
      "regex": "AppleWebKit.+ (NX)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "NetFront NX"
    },
    {
      "regex": "(Nintendo 3DS)",
      "family_replacement": "NetFront NX"
    },
    {
      "regex": "(BrowseX) \\((\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(NCSA_Mosaic)/(\\d+)\\.(\\d+)",
      "family_replacement": "NCSA Mosaic"
    },
    {
      "regex": "(POLARIS)/(\\d+)\\.(\\d+)",
      "family_replacement": "Polaris"
    },
    {
      "regex": "(Embider)/(\\d+)\\.(\\d+)",
      "family_replacement": "Polaris"
    },
    {
      "regex": "(BonEcho)/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Bon Echo"
    },
    {
      "regex": "M?QQBrowser",
      "family_replacement": "QQ Browser"
    },
    {
      "regex": "(iPod).+Version/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Mobile Safari"
    },
    {
      "regex": "(iPod).*Version/(\\d+)\\.(\\d+)",
      "family_replacement": "Mobile Safari"
    },
    {
      "regex": "(iPhone).*Version/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Mobile Safari"
    },
    {
      "regex": "(iPhone).*Version/(\\d+)\\.(\\d+)",
      "family_replacement": "Mobile Safari"
    },
    {
      "regex": "(iPad).*Version/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Mobile Safari"
    },
    {
      "regex": "(iPad).*Version/(\\d+)\\.(\\d+)",
      "family_replacement": "Mobile Safari"
    },
    {
      "regex": "(iPod|iPhone|iPad);.*CPU.*OS (\\d+)(?:_\\d+)?_(\\d+).*Mobile",
      "family_replacement": "Mobile Safari"
    },
    {
      "regex": "(iPod|iPhone|iPad)",
      "family_replacement": "Mobile Safari"
    },
    {
      "regex": "(AvantGo) (\\d+).(\\d+)"
    },
    {
      "regex": "(OneBrowser)/(\\d+).(\\d+)",
      "family_replacement": "ONE Browser"
    },
    {
      "regex": "(Avant)",
      "v1_replacement": "1"
    },
    {
      "regex": "(QtCarBrowser)",
      "v1_replacement": "1"
    },
    {
      "regex": "(iBrowser/Mini)(\\d+).(\\d+)",
      "family_replacement": "iBrowser Mini"
    },
    {
      "regex": "^(Nokia)",
      "family_replacement": "Nokia Services (WAP) Browser"
    },
    {
      "regex": "(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)\\.(\\d+)",
      "family_replacement": "Nokia Browser"
    },
    {
      "regex": "(NokiaBrowser)/(\\d+)\\.(\\d+).(\\d+)",
      "family_replacement": "Nokia Browser"
    },
    {
      "regex": "(NokiaBrowser)/(\\d+)\\.(\\d+)",
      "family_replacement": "Nokia Browser"
    },
    {
      "regex": "(BrowserNG)/(\\d+)\\.(\\d+).(\\d+)",
      "family_replacement": "Nokia Browser"
    },
    {
      "regex": "(Series60)/5\\.0",
      "v2_replacement": "0",
      "v1_replacement": "7",
      "family_replacement": "Nokia Browser"
    },
    {
      "regex": "(Series60)/(\\d+)\\.(\\d+)",
      "family_replacement": "Nokia OSS Browser"
    },
    {
      "regex": "(S40OviBrowser)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "Ovi Browser"
    },
    {
      "regex": "(Nokia)[EN]?(\\d+)"
    },
    {
      "regex": "(BB10);",
      "family_replacement": "BlackBerry WebKit"
    },
    {
      "regex": "(PlayBook).+RIM Tablet OS (\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "BlackBerry WebKit"
    },
    {
      "regex": "(Black[bB]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)",
      "family_replacement": "BlackBerry WebKit"
    },
    {
      "regex": "(Black[bB]erry)\\s?(\\d+)",
      "family_replacement": "BlackBerry"
    },
    {
      "regex": "(OmniWeb)/v(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Blazer)/(\\d+)\\.(\\d+)",
      "family_replacement": "Palm Blazer"
    },
    {
      "regex": "(Pre)/(\\d+)\\.(\\d+)",
      "family_replacement": "Palm Pre"
    },
    {
      "regex": "(Links) \\((\\d+)\\.(\\d+)"
    },
    {
      "regex": "(QtWeb) Internet Browser/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?",
      "family_replacement": "Amazon Silk"
    },
    {
      "regex": "(PhantomJS)/(\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(AppleWebKit)/(\\d+)\\.?(\\d+)?\\+ .* Safari",
      "family_replacement": "WebKit Nightly"
    },
    {
      "regex": "(Version)/(\\d+)\\.(\\d+)(?:\\.(\\d+))?.*Safari/",
      "family_replacement": "Safari"
    },
    {
      "regex": "(Safari)/\\d+"
    },
    {
      "regex": "(OLPC)/Update(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(OLPC)/Update()\\.(\\d+)",
      "v1_replacement": "0"
    },
    {
      "regex": "(SEMC\\-Browser)/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Teleca)",
      "family_replacement": "Teleca Browser"
    },
    {
      "regex": "(Phantom)/V(\\d+)\\.(\\d+)",
      "family_replacement": "Phantom Browser"
    },
    {
      "regex": "Trident(.*)rv.(\\d+)\\.(\\d+)",
      "family_replacement": "IE"
    },
    {
      "regex": "([MS]?IE) (\\d+)\\.(\\d+)",
      "family_replacement": "IE"
    },
    {
      "regex": "(python-requests)/(\\d+)\\.(\\d+)",
      "family_replacement": "Python Requests"
    }
  ],
  "os_parsers": [
    {
      "regex": "(Android) (\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"
    },
    {
      "regex": "(Android)\\-(\\d+)\\.(\\d+)(?:[.\\-]([a-z0-9]+))?"
    },
    {
      "regex": "(Android) Donut",
      "os_v2_replacement": "2",
      "os_v1_replacement": "1"
    },
    {
      "regex": "(Android) Eclair",
      "os_v2_replacement": "1",
      "os_v1_replacement": "2"
    },
    {
      "regex": "(Android) Froyo",
      "os_v2_replacement": "2",
      "os_v1_replacement": "2"
    },
    {
      "regex": "(Android) Gingerbread",
      "os_v2_replacement": "3",
      "os_v1_replacement": "2"
    },
    {
      "regex": "(Android) Honeycomb",
      "os_v1_replacement": "3"
    },
    {
      "regex": "(Silk-Accelerated=[a-z]{4,5})",
      "os_replacement": "Android"
    },
    {
      "regex": "(Windows (?:NT 5\\.2|NT 5\\.1))",
      "os_replacement": "Windows XP"
    },
    {
      "regex": "(XBLWP7)",
      "os_replacement": "Windows Phone"
    },
    {
      "regex": "(Windows NT 6\\.4)",
      "os_replacement": "Windows 10"
    },
    {
      "regex": "(Windows NT 6\\.3)",
      "os_replacement": "Windows 8.1"
    },
    {
      "regex": "(Windows NT 6\\.2)",
      "os_replacement": "Windows 8"
    },
    {
      "regex": "(Windows NT 6\\.1)",
      "os_replacement": "Windows 7"
    },
    {
      "regex": "(Windows NT 6\\.0)",
      "os_replacement": "Windows Vista"
    },
    {
      "regex": "(Win 9x 4\\.90)",
      "os_replacement": "Windows Me"
    },
    {
      "regex": "(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\\.0|Windows Vista|Windows 2000|Windows 3.1)"
    },
    {
      "regex": "(Windows NT 6\\.2; ARM;)",
      "os_replacement": "Windows RT"
    },
    {
      "regex": "(Windows NT 5\\.0)",
      "os_replacement": "Windows 2000"
    },
    {
      "regex": "(Windows Phone) (\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Windows Phone) OS (\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Windows ?Mobile)",
      "os_replacement": "Windows Mobile"
    },
    {
      "regex": "(WinNT4.0)",
      "os_replacement": "Windows NT 4.0"
    },
    {
      "regex": "(Win98)",
      "os_replacement": "Windows 98"
    },
    {
      "regex": "(Tizen)/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Mac OS X) (\\d+)[_.](\\d+)(?:[_.](\\d+))?"
    },
    {
      "regex": "Mac_PowerPC",
      "os_replacement": "Mac OS"
    },
    {
      "regex": "(?:PPC|Intel) (Mac OS X)"
    },
    {
      "regex": "(CPU OS|iPhone OS) (\\d+)_(\\d+)(?:_(\\d+))?",
      "os_replacement": "iOS"
    },
    {
      "regex": "(iPhone|iPad|iPod); Opera",
      "os_replacement": "iOS"
    },
    {
      "regex": "(iPhone|iPad|iPod).*Mac OS X.*Version/(\\d+)\\.(\\d+)",
      "os_replacement": "iOS"
    },
    {
      "regex": "(AppleTV)/(\\d+)\\.(\\d+)",
      "os_replacement": "ATV OS X"
    },
    {
      "regex": "(CrOS) [a-z0-9_]+ (\\d+)\\.(\\d+)(?:\\.(\\d+))?",
      "os_replacement": "Chrome OS"
    },
    {
      "regex": "([Dd]ebian)",
      "os_replacement": "Debian"
    },
    {
      "regex": "(Linux Mint)(?:/(\\d+))?"
    },
    {
      "regex": "(Mandriva)(?: Linux)?/(?:[\\d.-]+m[a-z]{2}(\\d+).(\\d))?"
    },
    {
      "regex": "(Symbian[Oo][Ss])/(\\d+)\\.(\\d+)",
      "os_replacement": "Symbian OS"
    },
    {
      "regex": "(Symbian/3).+NokiaBrowser/7\\.3",
      "os_replacement": "Symbian^3 Anna"
    },
    {
      "regex": "(Symbian/3).+NokiaBrowser/7\\.4",
      "os_replacement": "Symbian^3 Belle"
    },
    {
      "regex": "(Symbian/3)",
      "os_replacement": "Symbian^3"
    },
    {
      "regex": "(Series 60|SymbOS|S60)",
      "os_replacement": "Symbian OS"
    },
    {
      "regex": "(MeeGo)"
    },
    {
      "regex": "Symbian [Oo][Ss]",
      "os_replacement": "Symbian OS"
    },
    {
      "regex": "Series40;",
      "os_replacement": "Nokia Series 40"
    },
    {
      "regex": "(BB10);.+Version/(\\d+)\\.(\\d+)\\.(\\d+)",
      "os_replacement": "BlackBerry OS"
    },
    {
      "regex": "(Black[Bb]erry)[0-9a-z]+/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?",
      "os_replacement": "BlackBerry OS"
    },
    {
      "regex": "(Black[Bb]erry).+Version/(\\d+)\\.(\\d+)\\.(\\d+)(?:\\.(\\d+))?",
      "os_replacement": "BlackBerry OS"
    },
    {
      "regex": "(RIM Tablet OS) (\\d+)\\.(\\d+)\\.(\\d+)",
      "os_replacement": "BlackBerry Tablet OS"
    },
    {
      "regex": "(Play[Bb]ook)",
      "os_replacement": "BlackBerry Tablet OS"
    },
    {
      "regex": "(Black[Bb]erry)",
      "os_replacement": "BlackBerry OS"
    },
    {
      "regex": "\\(Mobile;.+Firefox/\\d+\\.\\d+",
      "os_replacement": "Firefox OS"
    },
    {
      "regex": "(BREW)[ /](\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(BREW);"
    },
    {
      "regex": "(Brew MP|BMP)[ /](\\d+)\\.(\\d+)\\.(\\d+)",
      "os_replacement": "Brew MP"
    },
    {
      "regex": "BMP;",
      "os_replacement": "Brew MP"
    },
    {
      "regex": "(GoogleTV) (\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(GoogleTV)/\\d+"
    },
    {
      "regex": "(WebTV)/(\\d+).(\\d+)"
    },
    {
      "regex": "(hpw|web)OS/(\\d+)\\.(\\d+)(?:\\.(\\d+))?",
      "os_replacement": "webOS"
    },
    {
      "regex": "(VRE);"
    },
    {
      "regex": "(Fedora|Red Hat|PCLinuxOS)/(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Red Hat|Puppy|PCLinuxOS)/(\\d+)\\.(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Windows|OpenBSD|FreeBSD|NetBSD|Android|WeTab)"
    },
    {
      "regex": "(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Gentoo|Mageia)"
    },
    {
      "regex": "(Linux)/(\\d+)\\.(\\d+)"
    },
    {
      "regex": "(Linux|BSD)"
    },
    {
      "regex": "SunOS",
      "os_replacement": "Solaris"
    }
  ],
  "device_parsers": [
    {
      "regex": "HTC ([A-Z][a-z0-9]+) Build",
      "device_replacement": "HTC $1"
    },
    {
      "regex": "HTC ([A-Z][a-z0-9 ]+) \\d+\\.\\d+\\.\\d+\\.\\d+",
      "device_replacement": "HTC $1"
    },
    {
      "regex": "HTC_Touch_([A-Za-z0-9]+)",
      "device_replacement": "HTC Touch ($1)"
    },
    {
      "regex": "USCCHTC(\\d+)",
      "device_replacement": "HTC $1 (US Cellular)"
    },
    {
      "regex": "Sprint APA(9292)",
      "device_replacement": "HTC $1 (Sprint)"
    },
    {
      "regex": "HTC ([A-Za-z0-9]+ [A-Z])",
      "device_replacement": "HTC $1"
    },
    {
      "regex": "HTC[-_/\\s]([A-Za-z0-9]+)",
      "device_replacement": "HTC $1"
    },
    {
      "regex": "(ADR[A-Za-z0-9]+)",
      "device_replacement": "HTC $1"
    },
    {
      "regex": "(HTC)"
    },
    {
      "regex": "(QtCarBrowser)",
      "device_replacement": "Tesla Model S"
    },
    {
      "regex": "(SamsungSGHi560)",
      "device_replacement": "Samsung SGHi560"
    },
    {
      "regex": "SonyEricsson([A-Za-z0-9]+)/",
      "device_replacement": "Ericsson $1"
    },
    {
      "regex": "PLAYSTATION 3",
      "device_replacement": "PlayStation 3"
    },
    {
      "regex": "(PlayStation Portable)"
    },
    {
      "regex": "(PlayStation Vita)"
    },
    {
      "regex": "(KFOT Build)",
      "device_replacement": "Kindle Fire"
    },
    {
      "regex": "(KFTT Build)",
      "device_replacement": "Kindle Fire HD"
    },
    {
      "regex": "(KFJWI Build)",
      "device_replacement": "Kindle Fire HD 8.9\" WiFi"
    },
    {
      "regex": "(KFJWA Build)",
      "device_replacement": "Kindle Fire HD 8.9\" 4G"
    },
    {
      "regex": "(Kindle Fire)"
    },
    {
      "regex": "(Kindle)"
    },
    {
      "regex": "(Silk)/(\\d+)\\.(\\d+)(?:\\.([0-9\\-]+))?",
      "device_replacement": "Kindle Fire"
    },
    {
      "regex": "Android[\\- ][\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}; WOWMobile (.+) Build"
    },
    {
      "regex": "Android[\\- ][\\d]+\\.[\\d]+\\-update1; [A-Za-z]{2}\\-[A-Za-z]{2}; (.+) Build"
    },
    {
      "regex": "Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}; (.+) Build"
    },
    {
      "regex": "Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+;[A-Za-z]{2}\\-[A-Za-z]{2};(.+) Build"
    },
    {
      "regex": "Android[\\- ][\\d]+\\.[\\d]+; [A-Za-z]{2}\\-[A-Za-z]{2}; (.+) Build"
    },
    {
      "regex": "Android[\\- ][\\d]+\\.[\\d]+\\.[\\d]+; (.+) Build"
    },
    {
      "regex": "Android[\\- ][\\d]+\\.[\\d]+; (.+) Build"
    },
    {
      "regex": "NokiaN([0-9]+)",
      "device_replacement": "Nokia N$1"
    },
    {
      "regex": "NOKIA([A-Za-z0-9\\v-]+)",
      "device_replacement": "Nokia $1"
    },
    {
      "regex": "Nokia([A-Za-z0-9\\v-]+)",
      "device_replacement": "Nokia $1"
    },
    {
      "regex": "NOKIA ([A-Za-z0-9\\-]+)",
      "device_replacement": "Nokia $1"
    },
    {
      "regex": "Nokia ([A-Za-z0-9\\-]+)",
      "device_replacement": "Nokia $1"
    },
    {
      "regex": "Lumia ([A-Za-z0-9\\-]+)",
      "device_replacement": "Lumia $1"
    },
    {
      "regex": "Symbian",
      "device_replacement": "Nokia"
    },
    {
      "regex": "BB10; ([A-Za-z0-9\\- ]+)\\)",
      "device_replacement": "BlackBerry $1"
    },
    {
      "regex": "(PlayBook).+RIM Tablet OS",
      "device_replacement": "BlackBerry Playbook"
    },
    {
      "regex": "Black[Bb]erry ([0-9]+);",
      "device_replacement": "BlackBerry $1"
    },
    {
      "regex": "Black[Bb]erry([0-9]+)",
      "device_replacement": "BlackBerry $1"
    },
    {
      "regex": "Black[Bb]erry;",
      "device_replacement": "BlackBerry"
    },
    {
      "regex": "(Pre)/(\\d+)\\.(\\d+)",
      "device_replacement": "Palm Pre"
    },
    {
      "regex": "(Pixi)/(\\d+)\\.(\\d+)",
      "device_replacement": "Palm Pixi"
    },
    {
      "regex": "(Touch[Pp]ad)/(\\d+)\\.(\\d+)",
      "device_replacement": "HP TouchPad"
    },
    {
      "regex": "HPiPAQ([A-Za-z0-9]+)/(\\d+).(\\d+)",
      "device_replacement": "HP iPAQ $1"
    },
    {
      "regex": "Palm([A-Za-z0-9]+)",
      "device_replacement": "Palm $1"
    },
    {
      "regex": "Treo([A-Za-z0-9]+)",
      "device_replacement": "Palm Treo $1"
    },
    {
      "regex": "webOS.*(P160UNA)/(\\d+).(\\d+)",
      "device_replacement": "HP Veer"
    },
    {
      "regex": "(AppleTV)",
      "device_replacement": "AppleTV"
    },
    {
      "regex": "AdsBot-Google-Mobile",
      "device_replacement": "Spider"
    },
    {
      "regex": "Googlebot-Mobile/(\\d+).(\\d+)",
      "device_replacement": "Spider"
    },
    {
      "regex": "(iPad) Simulator;"
    },
    {
      "regex": "(iPad);"
    },
    {
      "regex": "(iPod);"
    },
    {
      "regex": "(iPhone) Simulator;"
    },
    {
      "regex": "(iPhone);"
    },
    {
      "regex": "acer_([A-Za-z0-9]+)_",
      "device_replacement": "Acer $1"
    },
    {
      "regex": "acer_([A-Za-z0-9]+)_",
      "device_replacement": "Acer $1"
    },
    {
      "regex": "ALCATEL-([A-Za-z0-9]+)",
      "device_replacement": "Alcatel $1"
    },
    {
      "regex": "Alcatel-([A-Za-z0-9]+)",
      "device_replacement": "Alcatel $1"
    },
    {
      "regex": "Amoi\\-([A-Za-z0-9]+)",
      "device_replacement": "Amoi $1"
    },
    {
      "regex": "AMOI\\-([A-Za-z0-9]+)",
      "device_replacement": "Amoi $1"
    },
    {
      "regex": "Asus\\-([A-Za-z0-9]+)",
      "device_replacement": "Asus $1"
    },
    {
      "regex": "ASUS\\-([A-Za-z0-9]+)",
      "device_replacement": "Asus $1"
    },
    {
      "regex": "BIRD\\-([A-Za-z0-9]+)",
      "device_replacement": "Bird $1"
    },
    {
      "regex": "BIRD\\.([A-Za-z0-9]+)",
      "device_replacement": "Bird $1"
    },
    {
      "regex": "BIRD ([A-Za-z0-9]+)",
      "device_replacement": "Bird $1"
    },
    {
      "regex": "Dell ([A-Za-z0-9]+)",
      "device_replacement": "Dell $1"
    },
    {
      "regex": "DoCoMo/2\\.0 ([A-Za-z0-9]+)",
      "device_replacement": "DoCoMo $1"
    },
    {
      "regex": "([A-Za-z0-9]+)_W\\;FOMA",
      "device_replacement": "DoCoMo $1"
    },
    {
      "regex": "([A-Za-z0-9]+)\\;FOMA",
      "device_replacement": "DoCoMo $1"
    },
    {
      "regex": "Huawei([A-Za-z0-9]+)",
      "device_replacement": "Huawei $1"
    },
    {
      "regex": "HUAWEI-([A-Za-z0-9]+)",
      "device_replacement": "Huawei $1"
    },
    {
      "regex": "vodafone([A-Za-z0-9]+)",
      "device_replacement": "Huawei Vodafone $1"
    },
    {
      "regex": "i\\-mate ([A-Za-z0-9]+)",
      "device_replacement": "i-mate $1"
    },
    {
      "regex": "Kyocera\\-([A-Za-z0-9]+)",
      "device_replacement": "Kyocera $1"
    },
    {
      "regex": "KWC\\-([A-Za-z0-9]+)",
      "device_replacement": "Kyocera $1"
    },
    {
      "regex": "Lenovo\\-([A-Za-z0-9]+)",
      "device_replacement": "Lenovo $1"
    },
    {
      "regex": "Lenovo_([A-Za-z0-9]+)",
      "device_replacement": "Lenovo $1"
    },
    {
      "regex": "LG/([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "LG-LG([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "LGE-LG([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "LGE VX([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "LG ([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "LGE LG\\-AX([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "LG\\-([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "LGE\\-([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "LG([A-Za-z0-9]+)",
      "device_replacement": "LG $1"
    },
    {
      "regex": "(KIN)\\.One (\\d+)\\.(\\d+)",
      "device_replacement": "Microsoft $1"
    },
    {
      "regex": "(KIN)\\.Two (\\d+)\\.(\\d+)",
      "device_replacement": "Microsoft $1"
    },
    {
      "regex": "(Motorola)\\-([A-Za-z0-9]+)"
    },
    {
      "regex": "MOTO\\-([A-Za-z0-9]+)",
      "device_replacement": "Motorola $1"
    },
    {
      "regex": "MOT\\-([A-Za-z0-9]+)",
      "device_replacement": "Motorola $1"
    },
    {
      "regex": "(Nintendo WiiU)",
      "device_replacement": "Nintendo Wii U"
    },
    {
      "regex": "Nintendo (DS|3DS|DSi|Wii);",
      "device_replacement": "Nintendo $1"
    },
    {
      "regex": "Pantech([A-Za-z0-9]+)",
      "device_replacement": "Pantech $1"
    },
    {
      "regex": "Philips([A-Za-z0-9]+)",
      "device_replacement": "Philips $1"
    },
    {
      "regex": "Philips ([A-Za-z0-9]+)",
      "device_replacement": "Philips $1"
    },
    {
      "regex": "SAMSUNG-([A-Za-z0-9\\-]+)",
      "device_replacement": "Samsung $1"
    },
    {
      "regex": "SAMSUNG\\; ([A-Za-z0-9\\-]+)",
      "device_replacement": "Samsung $1"
    },
    {
      "regex": "Dreamcast",
      "device_replacement": "Sega Dreamcast"
    },
    {
      "regex": "Softbank/1\\.0/([A-Za-z0-9]+)",
      "device_replacement": "Softbank $1"
    },
    {
      "regex": "Softbank/2\\.0/([A-Za-z0-9]+)",
      "device_replacement": "Softbank $1"
    },
    {
      "regex": "(WebTV)/(\\d+).(\\d+)"
    },
    {
      "regex": "(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)",
      "device_replacement": "Generic Smartphone"
    },
    {
      "regex": "^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\\-|airn|alav|asus|attw|au\\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\\-n|bw\\-u|beck|benq|bilb|blac|c55/|cdm\\-|chtm|capi|comp|cond|craw|dall|dbte|dc\\-s|dica|ds\\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\\-|fly_|g\\-mo|g1 u|g560|gf\\-5|grun|gene|go.w|good|grad|hcit|hd\\-m|hd\\-p|hd\\-t|hei\\-|hp i|hpip|hs\\-c|htc |htc\\-|htca|htcg)",
      "device_replacement": "Generic Feature Phone"
    },
    {
      "regex": "^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\\-20|i\\-go|i\\-ma|i230|iac|iac\\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\\-|klon|lexi|lg g|lg\\-a|lg\\-b|lg\\-c|lg\\-d|lg\\-f|lg\\-g|lg\\-k|lg\\-l|lg\\-m|lg\\-o|lg\\-p|lg\\-s|lg\\-t|lg\\-u|lg\\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\\-|lge/|lynx|leno|m1\\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\\-|nem\\-|newg|neon)",
      "device_replacement": "Generic Feature Phone"
    },
    {
      "regex": "^(netf|noki|nzph|o2 x|o2\\-x|opwv|owg1|opti|oran|ot\\-s|p800|pand|pg\\-1|pg\\-2|pg\\-3|pg\\-6|pg\\-8|pg\\-c|pg13|phil|pn\\-2|pt\\-g|palm|pana|pire|pock|pose|psio|qa\\-a|qc\\-2|qc\\-3|qc\\-5|qc\\-7|qc07|qc12|qc21|qc32|qc60|qci\\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\\-|scp\\-|sdk/|se47|sec\\-|sec0|sec1|semc|sgh\\-|shar|sie\\-|sk\\-0|sl45|slid|smb3|smt5|sp01|sph\\-|spv |spv\\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\\-mo|t218|t250|t600|t610|t618|tcl\\-|tdg\\-|telm|tim\\-|ts70|tsm\\-|tsm3|tsm5|tx\\-9|tagt)",
      "device_replacement": "Generic Feature Phone"
    },
    {
      "regex": "^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\\-|your|zte\\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\\-|webc|whit|wmlb|xda\\-|xda_)",
      "device_replacement": "Generic Feature Phone"
    },
    {
      "regex": "(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\\-webcrawler|converacrawler|dataparksearch|findlinks|crawler)",
      "device_replacement": "Spider"
    }
  ]
}