{
:browser => [
[
/WSC6X|WTH11/i
], [[:name, 'Shopify POS Go']],[
%r{.*Shopify/\d+\s\((iPhone|iPad)\;\siOS\s[\d\.]+}i
], [[:name, 'Shopify Mobile']], [
%r{.*Dalvik/[a-z0-9\.]+.*Shopify\s[\d+\.\/]+}i
], [[:name, 'Shopify Mobile']], [
%r{.*(Shopify\sPOS)\/([\d\.]+)\s\((iPhone|iPad|iPod\stouch)\;}i,
], [:name, :version], [
%r{^Dalvik/[a-z0-9\.]+.*(Shopify\sPOS)\s(\d(?:\.\d+)*)(\/\d*)*}i,
], [:name, :version], [
%r{.*(\sPOS\s-).*\s([\d+\.]+)(\/\d*)*\s}i,
], [[:name, 'Shopify POS'], :version], [
%r{(Shopify POS)\/([\d\.]+)[^\/]*\/(Android)\/(\d+)}i,
], [[:name, 'Shopify POS'], :version], [
%r{(Shopify POS)\/([\d\.]+)[^\/]*\/(iOS)\/([\d\.]+)}i,
], [[:name, 'Shopify POS'], :version], [
%r{.*(Shopify\sPOS)\s.*Android.*\s([\d+\.]+)(\/\d*)*\s}i,
], [:name, :version], [
%r{^(okhttp)\/([\d\.]+)}i
], [:name, :version], [
%r{.*(Shopify Mobile)\/(?:iPhone\sOS|iOS)\/([\d\.]+) \((iPhone|iPad|iPod)}i
], [[:name, 'Shopify Mobile'], :version], [
%r{.*(Shopify POS Next|Shopify POS)\/(?:iOS)\/([\d\.]+) \((iPhone|iPad|iPod)}i
], [[:name, 'Shopify POS'], :version], [
%r{.*(Shopify Mobile)\/Android\/([\d\.]+)(?: \((debug(?:|-push))\))? \(Build (\d+) with API (\d+)}i
], [[:name, 'Shopify Mobile'], :version, :debug_mode, :build, :sdk_version], [
/^(ShopifyFoundation)/i,
], [:name], [
%r{.*(Shopify Ping)\/(?:iPhone\sOS|iOS)\/([\d\.]+) \((iPhone|iPad|iPod)}i
], [[:name, 'Shopify Ping'], :version], [
/(opera\smini)\/((\d+)?[\w\.-]+)/i, /(opera\s[mobiletab]+).+:version\/((\d+)?[\w\.-]+)/i, /(opera).+:version\/((\d+)?[\w\.]+)/i, /(opera)[\/\s]+((\d+)?[\w\.]+)/i ], [:name, :version, :major, [:type, :opera]], [
/\s(opr)\/((\d+)?[\w\.]+)/i ], [[:name, 'Opera'], :version, :major, [:type, :opera]], [
/(kindle)\/((\d+)?[\w\.]+)/i, /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i, /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i ], [:name, :version, :major], [
/(?:ms|\()(ie)\s((\d+)[\w\.]+)/i ], [:name, :version, :major, [:type, :ie]], [
/Edge\/(\d+).\d+/i ], [:major, [:version, 10], [:name, 'Edge'], [:type, :edge]], [
/Mozilla\/5.0.*Windows NT 6\.\d.*Trident\/7\.\d.*rv:(\d+)\.\d*/i ], [:major, [:version, 7], [:name, 'Internet Explorer'], [:type, :ie]], [
/Mozilla\/5.0.*Windows NT 10\.\d.*Trident\/7\.\d.*rv:(\d+)\.\d*.*like\sGecko/i ], [:major, [:version, 10], [:name, 'Internet Explorer'], [:type, :ie]], [
/(rekonq)\/?((\d+)[\w\.]+)*/i, /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt)\/((\d+)?[\w\.-]+)/i ], [:name, :version, :major], [
/(yabrowser)\/((\d+)?[\w\.]+)/i ], [[:name, 'Yandex'], :version, :major], [
/(comodo_dragon)\/((\d+)?[\w\.]+)/i ], [[:name, 'Comodo Dragon'], :version, :major], [
/(chromium)\/((\d+)?[\w\.-]+)/i, /(chrome)\/v?((\d+)?[\w\.]+)/i ], [:name, :version, :major, [:type, :chrome]], [
/(omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i ], [:name, :version, :major], [
/(dolfin)\/((\d+)?[\w\.]+)/i ], [[:name, 'Dolphin'], :version, :major], [
/((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i ], [[:name, 'Chrome'], :version, :major, [:type, :chrome]], [
/(FxiOS)\/((\d+)?[\w\.]+)/i ], [[:name, 'Mobile Firefox'], :version, :major, [:type, :firefoxios]], [
/version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i ], [:version, :major, [:name, 'Mobile Safari'], [:type, :safari]], [
/Mozilla\/5.0 \((?:iPhone|iPad|iPod(?: Touch)?);(.*)AppleWebKit\/((\d+)?[\w\.]+).+?(mobile)\/\w?/i ], [:version, :major, [:name, 'Mobile Safari'], [:type, :safari]], [
/version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i ], [:version, :major, :name, [:type, :safari]], [
/webkit.+?(mobile\s?safari|safari)((\/[\w]+))/i ], [:name, [:major, STRING_MAP[:browser][:oldsafari][:major]], [:version, STRING_MAP[:browser][:oldsafari][:version]], [:type, :safari]], [
/(konqueror)\/((\d+)?[\w\.]+)/i, /(webkit|khtml)\/((\d+)?[\w\.]+)/i
], [:name, :version, :major], [
/(navigator|netscape)\/((\d+)?[\w\.-]+)/i ], [[:name, 'Netscape'], :version, :major], [
/(swiftfox)/i, /(iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i, /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i ], [:name, :version, :major], [
/(firefox)\/((\d+)?[\w\.-]+)/i, /(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i, ], [:name, :version, :major, [:type, :firefox]], [
/(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|word|excel)[\/\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 ], [:name, :version, :major]
],
:in_app_browser => [
[
/FBAN\/FBIOS/,
/FB_IAB\/FB4A/,
/FBAN\/MessengerForiOS/,
/FB_IAB\/MESSENGER/,
], [[:type, :facebook]], [
/Instagram/,
], [[:type, :instagram]],
],
:device => [
[
/WSC6X|WTH11/i
], [[:type, :handheld], [:name, 'Shopify POS Go']],[
%r{.*Shopify Mobile/(?:iPhone\sOS|iOS)/[\d\.]+ \((iPhone)([\d,]+)}i
], [[:type, :handheld], :model], [
%r{.*Shopify Mobile/(?:iPhone\sOS|iOS)/[\d\.]+ \((iPad)([\d,]+)}i
], [[:type, :tablet], :model], [
%r{.*Shopify Mobile/(?:iPhone\sOS|iOS)/[\d\.]+ \((iPod)([\d,]+)}i
], [[:type, :handheld], :model], [
%r{.*(?:Shopify POS Next|Shopify POS)/(?:iPhone\sOS|iOS)/[\d\.]+ \((iPhone)([\d,]+)}i
], [[:type, :handheld], :model], [
%r{.*(?:Shopify POS Next|Shopify POS)/(?:iPhone\sOS|iOS)/[\d\.]+ \((iPad)([\d,]+)}i
], [[:type, :tablet], :model], [
%r{.*(?:Shopify POS Next|Shopify POS)/(?:iPhone\sOS|iOS)/[\d\.]+ \((iPod)([\d,]+)}i
], [[:type, :handheld], :model], [
%r{.*Shopify POS\/[\d\.]+[^\/]*\/(iOS)\/[\d\.]+\/Apple\/((iPhone|iPod)[^\/]*)\/}i,
], [[:type, :handheld], :model], [
%r{.*Shopify POS\/[\d\.]+[^\/]*\/(iOS)\/[\d\.]+\/Apple\/(iPad[^\/]*)\/}i,
], [[:type, :tablet], :model], [
%r{.*Shopify Ping/(?:iPhone\sOS|iOS)/[\d\.]+ \((iPhone)([\d,]+)}i
], [[:type, :handheld], :model], [
%r{.*Shopify Mobile\/(Android)\/[\d\.]+(?: \(debug(?:|-push)\))? \(Build \d+ with API \d+ on (.*?) ([^\)]*)\)}i
], [[:type, :handheld], :vendor, :model], [
%r{.*Shopify POS\/[\d\.]+ \((iPhone)\;.*Scale/([\d\.]+)}i,
], [[:type, :handheld], :scale], [
%r{.*Shopify POS\/[\d\.]+ \((iPad)\;.*Scale/([\d\.]+)}i,
], [[:type, :tablet], :scale], [
%r{.*Shopify POS\/[\d\.]+ \((iPod touch)\;.*Scale/([\d\.]+)}i,
], [[:type, :handheld], :scale], [
%r{.*Shopify\sPOS.*\(.*(Android)\s[\d\.]+\;\s(.*)\sBuild/.*\)\sPOS.*[\d+\.]+}i,
], [[:type, :handheld], :model], [
%r{.*\(.*(Android)\s[\d\.]+\;\s(.*)\sBuild/.*\)\sPOS.*[\d+\.]+}i,
], [[:type, :handheld], :model], [
/\((playbook);[\w\s\);-]+(rim)/i ], [:model, :vendor, [:type, :tablet]], [
/\((ipad);[\w\s\);-]+(apple)/i ], [:model, :vendor, [:name, :ipad], [:type, :tablet]], [
/(hp).+(touchpad)/i, /(kindle)\/([\w\.]+)/i, /\s(nook)[\w\s]+build\/(\w+)/i, /(dell)\s(strea[kpr\s\d]*[\dko])/i ], [:vendor, :model, [:type, :tablet]], [
/\((?:iphone|ipod(?: touch)?);.+(apple)/i ], [:model, :vendor, [:name, :iphone], [:type, :handheld]], [
/(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 ], [:vendor, :model, [:type, :handheld]], [
/\((bb10);\s(\w+)/i ], [[:vendor, 'BlackBerry'], :model, [:type, :handheld]], [
/android.+((transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+))/i ], [[:vendor, 'Asus'], :model, [:type, :tablet]], [
/(sony)\s(tablet\s[ps])/i ], [:vendor, :model, [:type, :tablet]], [
/(nintendo)\s([wids3u]+)/i ], [:vendor, :model, [:type, :console]], [
/((playstation)\s[3portablevi]+)/i ], [[:vendor, 'Sony'], :model, [:type, :console]], [
/(sprint\s(\w+))/i ], [:vendor, :model, [:type, :handheld]], [
/(htc)[;_\s-]+([\w\s_]+(?=\))|\w+)*/i, /(zte)-(\w+)*/i, /(alcatel|geeksphone|huawei|lenovo|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]+)*/i ], [:vendor, [:model, lambda {|str| str && str.gsub(/_/, ' ') }], [:type, :handheld]], [
/\s((milestone|droid[2x]?))[globa\s]*\sbuild\//i, /(mot)[\s-]?(\w+)*/i
], [[:vendor, 'Motorola'], :model, [:type, :handheld]], [
/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]], [
/((s[cgp]h-\w+|gt-\w+|galaxy\snexus))/i,
/(sam[sung]*)[\s-]*(\w+-?[\w-]*)*/i,
/sec-((sgh\w+))/i
], [[:vendor, 'Samsung'], :model, [:type, :handheld]], [
/(sie)-(\w+)*/i ], [[:vendor, 'Siemens'], :model, [:type, :handheld]], [
/(maemo|nokia).*(n900|lumia\s\d+)/i, /(nokia)[\s_-]?([\w-]+)*/i
], [[:vendor, 'Nokia'], :model, [:type, :handheld]], [
/android\s3\.[-\s\w;]{10}((a\d{3}))/i ], [[:vendor, 'Acer'], :model, [:type, :tablet]], [
/android\s3\.[-\s\w;]{10}(lg?)-([06cv9]{3,4})/i ], [[:vendor, 'LG'], :model, [:type, :tablet]], [
/((nexus\s4))/i,
/(lg)[-e;\s\/]+(\w+)*/i
], [[:vendor, 'LG'], :model, [:type, :handheld]], [
/opera\smobi/i,
/android/i
], [[:type, :handheld]], [
/nitro/i ], [[:type, :console]], [
/(mobile|tablet);.+rv\:.+gecko\//i ], [:type, :vendor, :model]
],
:engine => [
[
/(presto)\/((\d+)[\w\.]+)/i ], [:name, :version, :major, [:type, :presto]], [
/(webkit)\/((\d+)[\w\.]+)/i ], [:name, :version, :major, [:type, :webkit]], [
/(trident)\/((\d+)[\w\.]+)/i ], [:name, :version, :major, [:type, :trident]], [
/(netfront|netsurf|amaya|lynx|w3m)\/((\d+)[\w\.]+)/i, /(khtml|tasman|links)[\/\s]\(?((\d+)[\w\.]+)/i, /(icab)[\/\s]([23]\.(\d+)[\d\.]+)/i ], [:name, :version, :major], [
/rv\:((\d+)[\w\.]+).*(gecko)/i ], [:version, :major, :name, [:type, :gecko]]
],
:os => [
[
/WSC6X|WTH11/i
], [[:name, 'Shopify Retail OS']],[
%r{.*Shopify/\d+\s\((?:iPhone|iPad)\;\s(iOS)\s([\d\.]+)}i
], [[:type, :ios], :version, [:name, 'iOS']], [
%r{.*Shopify\sPOS/[\d\.]+\s\((?:iPhone|iPad|iPod\stouch)\;\s(iOS)\s([\d\.]+)}i,
], [[:type, :ios], :version, [:name, 'iOS']], [
/^Dalvik.*(Android)\s([\d\.]+)\;\s.*\s[\d+\.]+/i,
], [[:type, :android], :version, [:name, 'Android']], [
/.*Shopify\sPOS\s.*(Android)\s([\d\.]+)\;\s.*\s[\d+\.]+\s/i,
], [[:type, :android], :version, [:name, 'Android']], [
%r{.*Shopify Mobile\/(iPhone\sOS|iOS)\/[\d\.]+ \(.*\/OperatingSystemVersion\((.*)\)}i
], [[:type, :ios], [:version, lambda { |str| str && str.scan(/\d+/).join(".") }], [:name, 'iOS']], [
%r{.*(Shopify Mobile)\/(?:iPhone\sOS|iOS)[\/\d\.]* \((iPhone|iPad|iPod).*\/([\d\.]+)\)}i
], [[:type, :ios], [:name, 'iOS'], :version], [
%r{.*(Shopify Mobile)\/(?:iPhone\sOS|iOS)[\/\d\.]* \((iPhone|iPad|iPod).*\/([\d\.]+) - Build [\d]*\)}i
], [[:type, :ios], [:name, 'iOS'], :version], [
%r{.*(Shopify POS Next|Shopify POS)\/(?:iPhone\sOS|iOS)[\/\d\.]* \((iPhone|iPad|iPod).*\/([\d\.]+)\)}i
], [[:type, :ios], [:name, 'iOS'], :version], [
%r{.*Shopify POS\/[\d\.]+[^\/]*\/(iOS)\/([\d\.]+)\/(Apple)\/(iPhone|iPad|iPod)[^\/]*\/}i
], [[:type, :ios], :version, [:name, 'iOS']], [
%r{.*Shopify Ping\/(iOS)\/[\d\.]+ \(.*\/([\d\.]+)\)}i
], [[:type, :ios], :version, [:name, 'iOS']], [
%r{.*Shopify Mobile\/(Android)\/[\d\.]+ }i
], [:name, [:type, :android]], [
/(windows)\snt\s6\.2;\s(arm)/i, /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i,
/(microsoft windows)/i
], [:name, [:version, STRING_MAP[:os][:windows][:version]], [:type, :windows]], [
/(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i
], [[:name, 'Windows'], [:version, STRING_MAP[:os][:windows][:version]], [:type, :windows]], [
/\((bb)(10);/i ], [[:name, 'BlackBerry'], :version, [:type, :blackberry]], [
/(blackberry)\w*\/?([\w\.]+)*/i, /(rim\stablet\sos)[\/\s-]?([\w\.]+)*/i ], [:name, :version, [:type, :blackberry]], [
/(android)[\/\s-]?([\w\.]+)*/i ], [:name, :version, [:type, :android]], [
/(tizen)\/([\w\.]+)/i, /(webos|palm\os|qnx|bada|meego)[\/\s-]?([\w\.]+)*/i ], [:name, :version], [
/(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i ], [[:name, 'Symbian'], :version],[
/mozilla.+\(mobile;.+gecko.+firefox/i ], [[:name, 'Firefox OS'], :version], [
/(nintendo|playstation)\s([wids3portablevu]+)/i, ], [:name, :version], [
/(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 ], [:name, :version, [:type, :linux]], [
/(cros)\s[\w]+\s([\w\.]+\w)/i ], [[:name, 'Chromium OS'], :version, [:type, :chromium_os]],[
/(sunos)\s?([\w\.]+\d)*/i ], [[:name, 'Solaris'], :version], [
/\s([frentopc-]{0,4}bsd|dragonfly)\s?([\w\.]+)*/i ], [:name, :version],[
/(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i ], [[:name, 'iOS'], [:version, lambda {|str| str && str.gsub(/_/, '.') }], [:type, :ios]], [
/(mac\sos\sx)\s?([\w\s\.]+\w)*/i ], [:name, [:version, lambda {|str| str && str.gsub(/_/, '.') }], [:type, :mac]], [
/(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 ], [:name, :version]
]
}