Branch Coverage

blib/lib/HTTP/BrowserDetect.pm
Criterion Covered Total %
branch 788 898 87.7


line true false branch
501 2 7299 unless (defined $user_agent)
505 7299 2 defined $user_agent ? :
530 5539 44821 unless $self->{'os_tests'}
554 5804 26192 unless $self->{'robot_tests'}
567 4848 19505 unless $self->{'version_tests'}
577 7301 13772 unless $self->{'device_tests'}
584 0 1 if (defined $user_agent) { }
656 30 7271 if ($ua =~ m[edge/([\d\.]+)]) { }
944 6327 elsif ($ua =~ m[trident/([\w\.\d]*)]) { }
732 5595 elsif (index($ua, 'gecko') != -1 and index($ua, 'like gecko') == -1) { }
2670 2925 elsif ($ua =~ m[applewebkit/([\d.\+]+)] and not $tests->{'edgehtml'}) { }
138 2787 elsif ($ua =~ m[presto/([\d.]+)]) { }
12 2775 elsif ($ua =~ m[khtml/([\d.]+)]) { }
667 660 72 if ($ua =~ /\([^)]*rv:([\w.\d]*)/)
679 1608 1062 if ($ua =~ m[(?:chrome|chromium|crios)/(\d+)])
681 582 1026 if ($chrome_version >= 38)
686 582 2088 if ($is_blink) { }
706 12 7289 if (index($ua, 'galeon') != -1) { }
6 7283 elsif (index($ua, 'epiphany') != -1) { }
24 7259 elsif ($ua =~ m[(?:edg|edga|edgios)/[\d.]+]) { }
30 7229 elsif ($ua =~ m[edge/[\d.]+]) { }
636 6593 elsif ($ua =~ m[
78 6515 elsif ($self->{'user_agent'} =~ / \[ FB (?: AN | _IAB ) /x) { }
264 6251 elsif ($ua =~ m[opera|opr\/]) { }
1730 4521 elsif ($tests->{'trident'} or index($ua, 'msie') != -1 or index($ua, 'microsoft internet explorer') != -1) { }
12 4509 elsif (0 < index($self->{'user_agent'}, ' Instagram ')) { }
12 4497 elsif (index($ua, 'brave') != -1) { }
72 4425 elsif (index($ua, 'silk') != -1) { }
6 4419 elsif (index($ua, 'samsungbrowser') != -1) { }
336 4083 elsif (index($ua, 'ucbrowser') != -1) { }
36 4047 elsif (0 < index($self->{'user_agent'}, ' YaBrowser/')) { }
1386 2661 elsif (index($ua, 'chrome/') != -1 or index($ua, 'crios') != -1) { }
42 2619 elsif (index($ua, 'blackberry') != -1 or index($ua, 'bb10') != -1 or index($ua, 'rim tablet os') != -1) { }
960 1659 elsif ((index($ua, 'safari') != -1) or (index($ua, 'applewebkit') != -1)) { }
0 1659 elsif (index($ua, 'neoplanet') != -1) { }
0 1659 elsif (index($ua, 'webtv') != -1) { }
6 1653 elsif (index($ua, 'nintendo 3ds') != -1) { }
0 1653 elsif (index($ua, 'nintendo dsi') != -1) { }
42 1611 elsif (index($ua, 'playstation 3') != -1 or index($ua, 'playstation portable') != -1 or index($ua, 'netfront') != -1) { }
6 1605 elsif (index($ua, 'browsex') != -1) { }
18 1587 elsif (index($ua, 'polaris') != -1) { }
168 1419 elsif (index($ua, 'mozilla') != -1 and index($ua, 'compatible') == -1) { }
12 1407 elsif (index($ua, 'staroffice') != -1) { }
6 1401 elsif (index($ua, 'icab') != -1) { }
6 1395 elsif (index($ua, 'lotus-notes') != -1) { }
24 1371 elsif (index($ua, 'konqueror') != -1) { }
6 1365 elsif (index($ua, 'lynx') != -1) { }
6 1359 elsif (index($ua, 'elinks') != -1) { }
12 1347 elsif (index($ua, 'links') != -1) { }
0 1347 elsif (index($ua, 'mosaic') != -1) { }
6 1341 elsif (index($ua, 'emacs') != -1) { }
30 1311 elsif (index($ua, 'obigo') != -1) { }
54 1257 elsif (index($ua, 'teleca') != -1) { }
36 1221 elsif (index($ua, 'libcurl') != -1 or $ua =~ /^curl/) { }
6 1215 elsif (index($ua, 'puf/') != -1) { }
6 1209 elsif (index($ua, 'applecoremedia/') != -1) { }
6 1203 elsif (index($ua, 'androiddownloadmanager') != -1) { }
12 1191 elsif (index($ua, 'dalvik') != -1) { }
6 1185 elsif (index($ua, 'apple-pubsub') != -1) { }
6 1179 elsif (index($ua, 'imagesearcherpro') != -1) { }
746 6 630 $1 eq 'fxios' ? :
784 42 1688 if (index($ua, "aol") != -1 or index($ua, "america online browser") != -1)
850 12 1374 if (index($ua, "chromium") != -1)
868 276 684 if (index($ua, " mobile safari/") != -1 or index($ua, "mobilesafari") != -1)
873 18 942 if (index($ua, "puffin") != -1)
884 0 0 if (index($ua, "2.") != -1)
923 108 60 if (index($ua, 'netscape') != -1 or not $tests->{'gecko'}) { }
6 54 elsif (index($ua, 'seamonkey') != -1) { }
1009 6122 1179 if defined $browser
1014 462 6839 if index($ua, "x11") != -1
1015 1086 6215 if index($ua, ".net clr") != -1
1017 18 7283 if (index($ua, "realplayer") != -1)
1034 12 6 if ($ua =~ m[realplayer/([\d+\.]+)]) { }
6 0 elsif ($ua =~ /realplayer\s(\w+)/) { }
1038 12 0 if defined $self->{'minor'}
1045 18 7283 if (index($ua, "(r1 ") != -1)
1055 42 7259 if ($self->android and index($ua, "; wv)") != -1)
1068 78 186 if not ref $m and 0 < index($self->{'user_agent'}, $m)
1069 0 186 if "Regexp" eq ref $m and $self->{'user_agent'} =~ /$m/
1125 18 8837 if (index($ua, 'libwww-perl') != -1 or index($ua, 'lwp-') != -1) { }
12 8825 elsif (index($ua, 'slurp') != -1) { }
6 8819 elsif (index($ua, 'yahoo') != -1 and index($ua, 'jp.co.yahoo') == -1) { }
6 8813 elsif (index($ua, 'msnbot-mobile') != -1) { }
0 8813 elsif (index($ua, 'bingbot-mobile') != -1) { }
6 8807 elsif (index($ua, 'msnbot') != -1) { }
30 8777 elsif (index($ua, 'binglocalsearch') != -1 or index($ua, 'bingbot') != -1 or index($ua, 'bingpreview') != -1) { }
6 8771 elsif (index($ua, 'microsoft office existence discovery') != -1) { }
6 8765 elsif (index($ua, 'ahrefsbot') != -1) { }
0 8765 elsif (index($ua, 'altavista') != -1) { }
12 8753 elsif (index($ua, 'apache-httpclient') != -1) { }
6 8747 elsif ($ua =~ /\( *\) *\{ *\: *\; */) { }
0 8747 elsif (index($ua, 'ask jeeves/teoma') != -1) { }
18 8729 elsif (index($ua, 'baiduspider') != -1) { }
36 8693 elsif (index($ua, 'libcurl') != -1 or $ua =~ /^curl/) { }
6 8687 elsif (index($ua, 'facebookexternalhit') != -1) { }
6 8681 elsif (index($ua, 'getright') != -1) { }
12 8669 elsif (index($ua, 'adsbot-google') != -1) { }
6 8663 elsif (index($ua, 'mediapartners-google') != -1) { }
6 8657 elsif (index($ua, 'google favicon') != -1) { }
6 8651 elsif (index($ua, 'googlebot-image') != -1) { }
6 8645 elsif (index($ua, 'googlebot-news') != -1) { }
6 8639 elsif (index($ua, 'googlebot-video') != -1) { }
18 8621 elsif (index($ua, 'googlebot-mobile') != -1) { }
42 8579 elsif (index($ua, 'googlebot') != -1) { }
6 8573 elsif ($ua =~ /go.*package http/) { }
6 8567 elsif ($ua =~ /^http_request/) { }
0 8567 elsif ($ua =~ /^http_request/) { }
6 8561 elsif (index($ua, 'indy library') != -1) { }
0 8561 elsif (index($ua, 'infoseek') != -1) { }
6 8555 elsif (index($ua, 'ips-agent') != -1) { }
0 8555 elsif (index($ua, 'lecodechecker') != -1) { }
12 8543 elsif (index($ua, 'linkchecker') != -1) { }
0 8543 elsif (index($ua, 'lycos') != -1) { }
12 8531 elsif (index($ua, 'mechanize') != -1) { }
6 8525 elsif (index($ua, 'mj12bot/') != -1) { }
18 8507 elsif (index($ua, 'nutch') != -1) { }
6 8501 elsif (index($ua, 'puf/') != -1) { }
0 8501 elsif (index($ua, 'scooter') != -1) { }
6 8495 elsif (index($ua, 'special_archiver') != -1) { }
12 8483 elsif (index($ua, 'wget') == 0) { }
6 8477 elsif (index($ua, 'yandexbot') != -1) { }
6 8471 elsif (index($ua, 'yandeximages') != -1) { }
6 8465 elsif (index($ua, 'headlesschrome') != -1) { }
42 8423 elsif ($ua =~ /^java/ and not $self->{'browser'}) { }
0 8423 elsif (index($ua, 'jdk') != -1) { }
6 8417 elsif (index($ua, 'jakarta commons-httpclient') != -1) { }
6 8411 elsif (index($ua, 'google-http-java-client') != -1) { }
12 8399 elsif (index($ua, 'python-urllib') != -1) { }
6 8393 elsif (index($ua, 'researchscan.comsys.rwth-aachen.de') != -1) { }
1128 18 0 (index($ua, 'libwww-perl') != -1) ? :
1339 54 259289 if (index($ua, lc $match) != -1)
1348 23 8825 if ($browser_tests->{'applecoremedia'} or $browser_tests->{'dalvik'} or $browser_tests->{'adm'})
1354 516 8339 if ($r) { }
0 8339 elsif ($ua =~ /seek (?! mo (?: toolbar )? \s+ \d+\.\d+ )/x) { }
42 8297 elsif ($ua =~ /search (?! [\w\s]* toolbar \b | bar \b | erpro \b )/x) { }
246 8051 elsif ($self->{'user_agent'} =~ m[([\w /\.\-]+)[ \;\(\)]*\+https?\:]i) { }
1358 462 54 unless ($id)
1362 516 0 unless (exists $robot_tests->{'robot_id'})
1369 276 240 unless defined $robot_fragment
1395 8009 204247 if ($ROBOT_FRAGMENT_EXCEPTIONS{$fragment})
1397 0 8009 unless $ROBOT_FRAGMENT_EXCEPTIONS{$fragment}
1398 8 8001 if (index($ua, $exception) != -1)
1404 311 211937 if (index($ua, $fragment) != -1)
1412 599 8256 if (exists $robot_tests->{'robot'} and $robot_tests->{'robot'} eq "unknown")
1417 1115 7740 if (defined $robot_fragment)
1422 1043 72 if ($self->{'user_agent'} =~ m[\s* # Beginning whitespace
1431 36 287 if ($self->{'user_agent'} eq $full_string and $self->{'user_agent'} =~ m[\/.*\/] and $self->{'user_agent'} =~ m[
1448 678 365 if ($full_string and $full_string =~ s[[/ \.v]*(\d+)(\.\d+)?([\.\w]*)$][]) { }
1458 353 690 unless (defined $self->{'robot_string'})
1464 6242 2613 if (not exists $self->{'robot_version'})
1484 0 7296 if (index($ua, "16bit") != -1)
1490 2964 4332 if (index($ua, "win") != -1)
1491 12 2952 if (index($ua, 'win16') != -1 or index($ua, 'windows 3') != -1 or index($ua, 'windows 16-bit') != -1) { }
72 2880 elsif (index($ua, 'win95') != -1 or index($ua, 'windows 95') != -1) { }
30 2850 elsif (index($ua, 'win 9x 4.90') != -1 or index($ua, 'windows me') != -1) { }
24 2826 elsif (index($ua, 'win98') != -1 or index($ua, 'windows 98') != -1) { }
12 2814 elsif (index($ua, 'windows 2000') != -1) { }
12 2802 elsif (index($ua, 'windows ce') != -1) { }
54 2748 elsif (index($ua, 'windows phone') != -1) { }
1497 6 6 if (index($ua, 'windows 3.1') != -1) { }
1539 6 48 if (index($ua, 'windows phone os 7.0') != -1) { }
12 36 elsif (index($ua, 'windows phone os 7.5') != -1) { }
12 24 elsif (index($ua, 'windows phone 8.0') != -1) { }
18 6 elsif (index($ua, 'windows phone 8.1') != -1) { }
6 0 elsif (index($ua, 'windows phone 10.0') != -1) { }
1557 3804 3492 if (index($ua, "nt") != -1)
1558 90 3714 if (index($ua, 'nt 5.0') != -1 or index($ua, 'nt5') != -1) { }
984 2730 elsif (index($ua, 'nt 5.1') != -1) { }
126 2604 elsif (index($ua, 'nt 5.2') != -1) { }
204 2400 elsif (index($ua, 'nt 6.0') != -1) { }
966 1434 elsif (index($ua, 'nt 6.1') != -1) { }
96 1338 elsif (index($ua, 'nt 6.2') != -1) { }
78 1260 elsif (index($ua, 'nt 6.3') != -1) { }
36 1224 elsif (index($ua, 'nt 10.0') != -1) { }
54 1170 elsif (index($ua, 'winnt') != -1 or index($ua, 'windows nt') != -1 or index($ua, 'nt4') != -1 or index($ua, 'nt3') != -1) { }
1613 2850 4446 if ($os) { }
462 3984 elsif (index($ua, 'macintosh') != -1 or index($ua, 'mac_') != -1) { }
420 3564 elsif ($ua =~ /\b(ipad|iphone|ipod)\b/) { }
1050 2514 elsif (index($ua, 'android') != -1) { }
498 2016 elsif (index($ua, 'inux') != -1) { }
42 1974 elsif ($tests->{'x11'} and index($ua, 'cros') != -1) { }
6 1968 elsif (index($ua, 'amiga') != -1) { }
6 1962 elsif (index($ua, 'os/2') != -1) { }
6 1956 elsif (index($ua, 'solaris') != -1) { }
0 1956 elsif (index($ua, 'samsung') == -1 and index($ua, 'sun') != -1) { }
0 1956 elsif (index($ua, 'irix') != -1) { }
0 1956 elsif (index($ua, 'hp-ux') != -1) { }
0 1956 elsif (index($ua, 'aix') != -1) { }
0 1956 elsif ($ua =~ /\bsco\b/ or index($ua, 'unix_sv') != -1) { }
0 1956 elsif (index($ua, 'unix_system_v') != -1) { }
0 1956 elsif ($ua =~ /\bncr\b/) { }
0 1956 elsif (index($ua, 'reliantunix') != -1) { }
0 1956 elsif (index($ua, 'dec') != -1 or index($ua, 'osf1') != -1 or index($ua, 'declpha') != -1 or index($ua, 'alphaserver') != -1 or index($ua, 'ultrix') != -1 or index($ua, 'alphastation') != -1) { }
0 1956 elsif (index($ua, 'sinix') != -1) { }
30 1926 elsif (index($ua, 'bsd') != -1) { }
12 1914 elsif ($tests->{'x11'}) { }
0 1914 elsif (index($ua, 'vax') != -1 or index($ua, 'openvms') != -1) { }
12 1902 elsif (index($ua, 'bb10') != -1) { }
6 1896 elsif (index($ua, 'rim tablet os') != -1) { }
6 1890 elsif (index($ua, 'playstation 3') != -1) { }
6 1884 elsif (index($ua, 'playstation portable') != -1) { }
54 1830 elsif (index($ua, 'windows') != -1) { }
18 1812 elsif (index($ua, 'win32') != -1) { }
144 1668 elsif ($self->{'user_agent'} =~ /(brew)|(\bbmp\b)/i) { }
1617 0 2850 if index($ua, "win32") != -1
1623 438 24 if (index($ua, 'mac os x') != -1) { }
1630 0 462 if (index($ua, '68k') != -1 or index($ua, '68000') != -1) { }
126 336 elsif (index($ua, 'ppc') != -1 or index($ua, 'powerpc') != -1) { }
1678 0 0 if index($ua, "i86") != -1
1679 0 0 if index($ua, "sunos 4") != -1
1680 0 0 if index($ua, "sunos 5") != -1
1686 0 0 if (index($ua, "irix5") != -1)
1687 0 0 if (index($ua, "irix6") != -1)
1693 0 0 if index($ua, "09.") != -1
1694 0 0 if index($ua, "10.") != -1
1700 0 0 if (index($ua, "aix 1") != -1)
1701 0 0 if (index($ua, "aix 2") != -1)
1702 0 0 if (index($ua, "aix 3") != -1)
1703 0 0 if (index($ua, "aix 4") != -1)
1740 30 0 if ($self->{'user_agent'} =~ /(\w*bsd\w*)/i)
1744 30 0 if index($ua, "freebsd") != -1
1783 102 42 if ($1) { }
1799 12 6 if (not $os and $browser_tests->{'firefox'} and index($ua, "fennec") == -1 and $self->mobile || $self->tablet)
1808 2592 4704 if ($os and not $os_string)
1823 526 2030 if (not defined $os) { }
26 2004 elsif ($os eq 'winphone') { }
194 1810 elsif ($os eq 'macosx') { }
174 1636 elsif ($os eq 'ios') { }
19 1617 elsif ($os eq 'chromeos') { }
491 1126 elsif ($os eq 'android') { }
6 1120 elsif ($os eq 'firefoxos') { }
71 1049 elsif ($os eq 'brew') { }
1828 26 0 if ($ua =~ /windows phone (?:os )?(\d+)(\.?\d*)([\.\d]*)/)
1833 157 37 if ($ua =~ /os x (\d+)[\._](\d+)[\._]?(\d*)/)
1834 136 21 length $3 ? :
1838 172 2 if ($ua =~ / os (\d+)[\._ ](\d+)[\._ ]?(\d*)/)
1839 115 57 length $3 ? :
1843 19 0 if ($ua =~ / cros \S* (\d+)(\.?\d*)([\.\d]*)/)
1848 473 18 if ($ua =~ /android (\d+)(\.?\d*)([\w\-\.]*)[\;\)]/)
1853 6 0 if ($ua =~ m[firefox/(\d+)(\.?\d*)([\.\d]*)])
1858 52 19 if ($ua =~ /(brew|\bbmp) (\d+)(\.?\d*)([\.\d]*)/)
1887 263 6984 if (defined $browser and $browser eq 'opera') { }
204 6780 elsif (not defined $browser and $ua =~ m[\b compatible; \s* [\w\-]* [/\s] ( [0-9]+ ) (?: .([0-9]+) (\S*) )? ;]x) { }
969 5811 elsif (not $browser) { }
24 5787 elsif ($browser_tests->{'edge'}) { }
956 4831 elsif ($browser_tests->{'safari'}) { }
6 4825 elsif ($browser_tests->{'fxios'}) { }
78 4747 elsif ($tests->{'meta_app'}) { }
12 4735 elsif ($browser_tests->{'instagram'}) { }
1708 3027 elsif ($browser_tests->{'ie'}) { }
6 3021 elsif ($browser eq 'n3ds') { }
6 3015 elsif ($browser eq 'browsex') { }
6 3009 elsif ($ua =~ m[netscape6/(\d+)\.(\d+)([\d.]*)]) { }
12 2997 elsif ($browser eq 'brave') { }
18 2979 elsif ($browser eq 'chrome' and $ua =~ m[crios/(\d+)\.(\d+)([\d.]*)]) { }
6 2973 elsif ($browser eq 'pubsub' and $ua =~ m[apple-pubsub/(\d+)\.?(\d+)?([\d.]*)]) { }
78 2895 elsif ($browser eq 'obigo' and $self->{'user_agent'} =~ m[(obigo[\w\-]*|teleca)[\/ ]\w(\d+)(\w*)]i) { }
18 2877 elsif ($browser eq 'polaris' and $ua =~ m[polaris[ \/](\d+)\.?(\d+)?([\d\.]*)]) { }
333 2544 elsif ($browser eq 'ucbrowser' and $ua =~ m[ucbrowser[\/ ]*(\d+)\.?(\d+)?([\d\.]*)]) { }
6 2538 elsif ($browser eq 'samsung' and $ua =~ m[samsungbrowser/(\d+)\.(\d+)\s]) { }
36 2502 elsif ($browser_tests->{'yandex_browser'}) { }
1897 90 173 if ($ua =~ m[\AOpera.*\sVersion/(\d*)\.(\d*)\z]i) { }
48 125 elsif ($ua =~ m[\bOPR/(\d+)\.(\d+)]i) { }
125 0 elsif ($ua =~ m[Opera[ /](\d+).(\d+)]i) { }
1926 24 0 unless defined $major
1934 890 66 if (do {
54 12 elsif ($ua =~ m[applewebkit\/([\d\.]{1,})]xi) { }
1947 890 0 if (my($safari_build, $safari_minor) = split(/\./, $1, 3))
1950 825 65 if defined $safari_minor
1954 54 0 if (my($safari_build, $safari_minor) = split(/\./, $1, 3))
1957 42 12 if $safari_minor
1970 60 18 if ($ua =~ m[ \b fbav/ ([^;]*) ]x)
1972 60 0 if ($beta)
1982 12 0 if ($self->{'user_agent'} =~ / \b Instagram [ ]+ ([0-9.]+) [ ] /x)
1984 12 0 if ($beta)
1993 1618 90 if ($ua =~ /\b msie \s ( [0-9\.]+ ) ( [a-z]+ [a-z0-9]* )? ;/x) { }
72 18 elsif ($ua =~ /\b rv: ( [0-9\.]+ ) \b/x) { }
6 12 elsif ($ua =~ m[\b compatible; \s* [\w\-]* [/\s] ( [0-9]+ ) (?: .([0-9]+) (\S*) )? ;]x) { }
1997 30 1588 if $2
2012 6 0 if ($ua =~ m[Nintendo 3DS;.*\sVersion/(\d*)\.(\d*)]i)
2018 6 0 if ($ua =~ /BrowseX \((\d+)\.(\d+)([\d.]*)/i)
2040 12 0 if ($ua =~ m[brave/(\d+)\.(\d+)([\d.]*)])
2084 36 0 if ($self->{'user_agent'} =~ m[ \b YaBrowser / ([0-9.]+) [ ] ]x)
2086 36 0 if ($beta)
2094 2520 4727 if (not defined $major and defined $self->{'browser_string'})
2096 2322 198 if ($version_index != -1)
2099 2310 12 if ($version_str =~ m[/(\d+)\.(\d+)([\w.]*)])
2108 1185 6062 unless (defined $major)
2109 24 1161 if ($ua =~ m[version/(\d+)\.(\d+)([\w.]*)])
2118 1161 6086 unless (defined $major)
2135 324 6923 unless (defined $major)
2137 0 324 if ($ua =~ m[[A-Za-z]+/(\d+)\;])
2144 509 6738 unless $major
2145 4720 2527 unless $minor
2146 1298 5949 if defined $beta and $beta eq ""
2150 166 7081 if ($browser_tests->{'netscape'})
2153 12 154 if $major == 2
2154 18 148 if $major == 3
2155 24 142 if $major == 4
2156 112 54 if $major >= 4
2157 6 160 if $major == 4 and $minor == 5
2158 94 72 if $major == 4 and ".$minor" >= "0.5" or $major >= 5
2161 6 160 if defined $beta and (index($beta, "gold") != -1)
2163 82 84 if $major == 5 or $major == 6
2165 88 78 if $major >= 5
2167 6 160 if ($browser eq "seamonkey")
2178 1708 5539 if ($browser_tests->{'ie'})
2179 23 1685 if $major == 3
2180 36 1672 if $major == 4
2181 1673 35 if $major >= 4
2182 71 1637 if $major == 5
2183 1637 71 if $major >= 5
2184 23 1685 if $major == 5 and $minor == 5
2185 1589 119 if ".$minor" >= "0.5" or $major >= 6
2186 386 1322 if $major == 6
2187 321 1387 if $major == 7
2188 603 1105 if $major == 8
2189 112 1596 if $major == 9
2190 66 1642 if $major == 10
2191 72 1636 if $major == 11
2200 41 7206 if ($browser_tests->{'aol'})
2203 6 35 if index($ua, "aol 3.0") != -1 or $version_tests->{'ie3'}
2206 0 41 if (index($ua, "aol 4.0") != -1) or $version_tests->{'ie4'}
2207 0 41 if index($ua, "aol 5.0") != -1
2208 6 35 if index($ua, "aol 6.0") != -1
2209 0 41 if index($ua, "navio") != -1
2212 263 6984 if ($browser_tests->{'opera'})
2213 6 257 if index($ua, "opera 3") != -1 or index($ua, "opera/3") != -1
2215 0 263 if (index($ua, "opera 4") != -1) or index($ua, "opera/4") != -1 and (index($ua, "nintendo dsi") == -1)
2219 0 263 if (index($ua, "opera 5") != -1) or (index($ua, "opera/5") != -1)
2222 12 251 if (index($ua, "opera 6") != -1) or (index($ua, "opera/6") != -1)
2225 30 233 if (index($ua, "opera 7") != -1) or (index($ua, "opera/7") != -1)
2250 55 8260 if (index($ua, 'windows phone') != -1) { }
1056 7204 elsif (index($ua, 'android') != -1 or index($ua, 'silk-accelerated') != -1) { }
42 7162 elsif (index($ua, 'blackberry') != -1 or index($ua, 'bb10') != -1 or index($ua, 'rim tablet os') != -1) { }
18 7144 elsif (index($ua, 'ipod') != -1) { }
162 6982 elsif (index($ua, 'ipad') != -1) { }
240 6742 elsif (index($ua, 'iphone') != -1) { }
6 6736 elsif (index($ua, 'webos') != -1) { }
12 6724 elsif (index($ua, 'kindle') != -1) { }
0 6724 elsif (index($ua, 'audrey') != -1) { }
0 6724 elsif (index($ua, 'i-opener') != -1) { }
0 6724 elsif (index($ua, 'avantgo') != -1) { }
0 6724 elsif (index($ua, 'palmos') != -1) { }
6 6718 elsif (index($ua, 'playstation 3') != -1) { }
6 6712 elsif (index($ua, 'playstation portable') != -1) { }
6 6706 elsif (index($ua, 'nintendo dsi') != -1) { }
6 6700 elsif (index($ua, 'nintendo 3ds') != -1) { }
582 6118 elsif ($browser_tests->{'obigo'} or $browser_tests->{'ucbrowser'} or index($ua, 'up.browser') != -1 or index($ua, 'nokia') != -1 and index($ua, 'windows phone') == -1 or index($ua, 'alcatel') != -1 or $ua =~ /\bbrew\b/ or $ua =~ /\bbmp\b/ or index($ua, 'ericsson') != -1 or index($ua, 'sie-') == 0 or index($ua, 'wmlib') != -1 or index($ua, ' wap') != -1 or index($ua, 'wap ') != -1 or index($ua, 'wap/') != -1 or index($ua, '-wap') != -1 or index($ua, 'wap-') != -1 or index($ua, 'wap') == 0 or index($ua, 'wapper') != -1 or index($ua, 'zetor') != -1) { }
2380 7977 338 unless ($device_tests->{'tablet'})
2434 276 8039 if ($browser_tests->{'ucbrowser'} and $self->{'user_agent'} =~ m[ucweb/2.0\s*\(([^\;\)]*\;){3,4}\s*([^\;\)]*?)\s*\)]i) { }
12 8027 elsif ($ua =~ m[^(\bmot-[^ /]+)]) { }
108 7919 elsif ($browser_tests->{'obigo'} || index($ua, 'brew') != -1 and $self->{'user_agent'} =~ m[\d+x\d+ ([\d\w\- ]+?)( \S+\/\S+)*$]i) { }
18 7901 elsif ($ua =~ m[windows phone os [^\)]+ iemobile/[^;]+; ([^;]+; [^;\)]+)]g) { }
12 7889 elsif ($ua =~ m[windows phone [^\)]+ iemobile/[^;]+; arm; touch; ([^;]+; [^;\)]+)]g) { }
18 7871 elsif ($ua =~ m[windows phone 8[^\)]+ iemobile/[^;]+; ([^;]+; [^;\)]+)]g) { }
12 7859 elsif ($ua =~ /bb10; ([^;\)]+)/g) { }
6 7853 elsif ($ua =~ /blackberry ([\w.]+)/) { }
18 7835 elsif ($ua =~ m[blackberry(\d+)/]) { }
12 7823 elsif ($ua =~ /silk-accelerated/) { }
978 6845 elsif ($self->{'user_agent'} =~ /android .*\; ([^;]*) build/i) { }
114 6731 elsif ($self->{'user_agent'} =~ m[\b((alcatel|huawei|lg|nokia|samsung|sonyericsson)[\w\-]*)/]i) { }
6 6725 elsif ($self->{'user_agent'} =~ /CrKey/) { }
613 6112 elsif ($device) { }
2490 54 924 if ($model =~ /^KF/ or $model =~ /kindle fire/i) { }
84 840 elsif ($device_tests->{'tablet'}) { }
2519 2203 6112 if ($device) { }
2527 2196 6119 if ($device_string)
2536 0 1733 unless defined $self->{'user_agent'}
2542 0 1702 unless defined $self->{'user_agent'}
2549 1899 371 unless exists $self->{'robot_string'}
2556 654 290 unless exists $self->{'robot_string'}
2569 0 0 $self->robot ? :
558 0 $self->{'robot_tests'}{'robot_id'} ? :
2575 0 425 unless exists $self->{'robot_string'}
2576 425 0 if ($self->{'robot_version'}) { }
2587 110 0 if (defined $major) { }
2588 109 1 if (defined $minor) { }
2621 0 4225 unless defined $self->{'user_agent'}
2622 1309 2916 unless $self->{'os_tests'}
2629 0 4206 unless defined $self->{'user_agent'}
2630 74 4132 unless $self->{'os_tests'}
2636 2556 1455 unless exists $self->{'os_version'}
2637 1975 2036 if ($self->{'os_version'}) { }
2648 478 521 defined $major ? :
2672 0 0 unless $self->{'version_tests'}
2684 68 628 if ($self->gecko) { }
2694 224 678 unless $self->{'version_tests'}
2696 902 0 defined $self->{'major'} ? :
2701 278 933 unless $self->{'version_tests'}
2709 170 771 unless $self->{'version_tests'}
2720 882 1 defined $major ? :
2749 21 1 defined $major ? :
2777 640 4196 if ($self->safari)
2781 467 173 if ($ua =~ m[
2794 140 33 if ($ua =~ m[ safari/ ( \d+ (?: \.\d+ )* ) ]x)
2797 95 45 unless ($version)
2806 85 393 if $self->_cmp_versions($build, $maybe_build) >= 0
2811 5 90 if $ua =~ m[safari/12x]
2814 5 130 unless defined $version
2817 1 129 if $minor =~ s/(\D.*)//
2819 1 129 $beta ? :
2823 1303 2926 unless $self->{'version_tests'}
2834 3878 5053 if @a == 0 or $a[0] < $b[0]
2835 3696 1357 if @b == 0 or $b[0] < $a[0]
2847 202 1211 $self->engine_string eq 'MSIE' ? :
193 1413 !$self->engine_string ? :
2855 720 5006 if ($self->gecko)
2859 1019 3987 if ($self->trident)
2863 595 3392 if ($self->ie)
2867 35 3357 if ($self->edgelegacy)
2871 583 2774 if ($self->blink)
2875 2187 587 if ($self->webkit)
2879 151 436 if ($self->presto)
2883 48 388 if ($self->netfront)
2887 16 372 if ($self->khtml)
2898 1307 276 $self->{'engine_version'} && $self->{'engine_version'} =~ /^(\d+(\.\d+)?)/ ? :
2905 1620 579 $self->{'engine_version'} && $self->{'engine_version'} =~ /^(\d+)/ ? :
2912 1520 583 $self->{'engine_version'} && $self->{'engine_version'} =~ /^\d+(\.\d+)/ ? :
2919 1126 306 $self->{'engine_version'} && $self->{'engine_version'} =~ /^\d+\.\d+([\.\d\+]*)/ ? :
2925 161 567 unless $self->{'version_tests'}
2948 0 4163 unless exists $self->{'device'}
2955 1014 797 unless exists $self->{'device_string'}
2967 268 1536 if ($self->safari)
2968 7 261 if ($self->major == 1 and $self->{'user_agent'} =~ /\s ( [a-z]{2} ) \)/msx)
2972 151 110 if ($self->{'user_agent'} =~ /\s ([a-z]{2})-([A-Za-z]{2})/msx)
2977 1 1645 if ($self->aol and $self->{'user_agent'} =~ /;([A-Z]{2})_([A-Z]{2})\)/)
2982 12 1633 if ($self->meta_app and $self->{'user_agent'} =~ m[ ;FBLC/ ([a-z]{2}) (?: [_-] ([A-Z]{2}) )? ]x)
2985 10 2 $2 ? :
2988 4 1629 if ($self->instagram and $self->{'user_agent'} =~ / (?: [(] | ;[ ] ) ([a-z]{2}) [_-] ([A-Z]{2}) [;)] /x)
2991 4 0 $2 ? :
2994 348 1281 if ($self->{'user_agent'} =~ /\b([a-z]{2})-([A-Za-z]{2})\b/msx)
2998 27 1254 if ($self->{'user_agent'} =~ /\[([a-z]{2})\]/msx)
3002 1119 135 if ($self->{'user_agent'} =~ /\(([^)]+)\)/msx)
3007 125 4584 if ($part =~ /^\s*([a-z]{2})\s*$/ and not $self->webview && $1 eq 'wv')
3025 1662 0 if $value
3028 1713 23 if $value
3031 0 1942 unless $self->{'device_tests'}
3032 374 1568 unless $self->{'os_tests'}
3033 497 1445 unless $self->{'robot_tests'}
3034 245 1697 unless $self->{'version_tests'}
3037 1177 3200 if $value
3040 3845 0 if $value
3043 785 0 if $value
3046 1953 440 if $value
3051 578 1364 if $self->device
3059 1 29 unless $self->{'robot_tests'}
3075 0 0 if $self->chrome and $self->browser_major and $self->browser_major >= 41
3081 0 0 if $self->opera and $self->browser_major and $self->browser_major == 40 || $self->browser_major >= 42