/**
* Mobile Detect Library
* Motto: "Every business should have a mobile detection script to detect mobile readers"
*
* Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
* It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
*
* Homepage: http://mobiledetect.net
* GitHub: https://github.com/serbanghita/Mobile-Detect
* README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md
* CONTRIBUTING: https://github.com/serbanghita/Mobile-Detect/blob/master/docs/CONTRIBUTING.md
* KNOWN LIMITATIONS: https://github.com/serbanghita/Mobile-Detect/blob/master/docs/KNOWN_LIMITATIONS.md
* EXAMPLES: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples
*
* @license https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt MIT License
* @author Serban Ghita
* @author Nick Ilyin
* Original author: Victor Stanciu
*
* @version 2.8.33
*/
if ( ! class_exists( 'Mobile_Detect' ) ) {
class Mobile_Detect {
/**
* Mobile detection type.
*
* @deprecated since version 2.6.9
*/
const DETECTION_TYPE_MOBILE = 'mobile';
/**
* Extended detection type.
*
* @deprecated since version 2.6.9
*/
const DETECTION_TYPE_EXTENDED = 'extended';
/**
* A frequently used regular expression to extract version #s.
*
* @deprecated since version 2.6.9
*/
const VER = '([\w._\+]+)';
/**
* Top-level device.
*/
const MOBILE_GRADE_A = 'A';
/**
* Mid-level device.
*/
const MOBILE_GRADE_B = 'B';
/**
* Low-level device.
*/
const MOBILE_GRADE_C = 'C';
/**
* Stores the version number of the current release.
*/
const VERSION = '2.8.33';
/**
* A type for the version() method indicating a string return value.
*/
const VERSION_TYPE_STRING = 'text';
/**
* A type for the version() method indicating a float return value.
*/
const VERSION_TYPE_FLOAT = 'float';
/**
* A cache for resolved matches
* @var array
*/
protected $cache = array();
/**
* The User-Agent HTTP header is stored in here.
* @var string
*/
protected $userAgent = null;
/**
* HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE.
* @var array
*/
protected $httpHeaders = array();
/**
* CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer.
* @var array
*/
protected $cloudfrontHeaders = array();
/**
* The matching Regex.
* This is good for debug.
* @var string
*/
protected $matchingRegex = null;
/**
* The matches extracted from the regex expression.
* This is good for debug.
*
* @var string
*/
protected $matchesArray = null;
/**
* The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED.
*
* @deprecated since version 2.6.9
*
* @var string
*/
protected $detectionType = self::DETECTION_TYPE_MOBILE;
/**
* HTTP headers that trigger the 'isMobile' detection
* to be true.
*
* @var array
*/
protected static $mobileHeaders = array(
'HTTP_ACCEPT' => array(
'matches' => array(
// Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/
'application/x-obml2d',
// BlackBerry devices.
'application/vnd.rim.html',
'text/vnd.wap.wml',
'application/vnd.wap.xhtml+xml'
)
),
'HTTP_X_WAP_PROFILE' => null,
'HTTP_X_WAP_CLIENTID' => null,
'HTTP_WAP_CONNECTION' => null,
'HTTP_PROFILE' => null,
// Reported by Opera on Nokia devices (eg. C3).
'HTTP_X_OPERAMINI_PHONE_UA' => null,
'HTTP_X_NOKIA_GATEWAY_ID' => null,
'HTTP_X_ORANGE_ID' => null,
'HTTP_X_VODAFONE_3GPDPCONTEXT' => null,
'HTTP_X_HUAWEI_USERID' => null,
// Reported by Windows Smartphones.
'HTTP_UA_OS' => null,
// Reported by Verizon, Vodafone proxy system.
'HTTP_X_MOBILE_GATEWAY' => null,
// Seen this on HTC Sensation. SensationXE_Beats_Z715e.
'HTTP_X_ATT_DEVICEID' => null,
// Seen this on a HTC.
'HTTP_UA_CPU' => array( 'matches' => array( 'ARM' ) ),
);
/**
* List of mobile devices (phones).
*
* @var array
*/
protected static $phoneDevices = array(
'iPhone' => '\biPhone\b|\biPod\b',
// |\biTunes
'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+',
'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m|Android [0-9.]+; Pixel',
'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6',
// @todo: Is 'Dell Streak' a tablet or a phone? ;)
'Dell' => 'Dell[;]? (Streak|Aero|Venue|Venue Pro|Flash|Smoke|Mini 3iX)|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',
'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b|XT1068|XT1092|XT1052',
'Samsung' => '\bSamsung\b|SM-G950F|SM-G955F|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C|SM-A310F|GT-I9190|SM-J500FN|SM-G903F|SM-J330F',
'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323|M257)',
'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533',
'Asus' => 'Asus.*Galaxy|PadFone.*Mobile',
'NokiaLumia' => 'Lumia [0-9]{3,4}',
// http://www.micromaxinfo.com/mobiles/smartphones
// Added because the codes might conflict with Acer Tablets.
'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b',
// @todo Complete the regex.
'Palm' => 'PalmSource|Palm',
// avantgo|blazer|elaine|hiptop|plucker|xiino ;
'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature',
// Just for fun ;)
// http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)
// Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android.
'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
// http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
// http://fr.wikomobile.com
'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM',
'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)',
// Added simvalley mobile just for fun. They have some interesting devices.
// http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b',
// Wolfgang - a brand that is sold by Aldi supermarkets.
// http://www.wolfgangmobile.com/
'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q',
'Alcatel' => 'Alcatel',
'Nintendo' => 'Nintendo (3DS|Switch)',
// http://en.wikipedia.org/wiki/Amoi
'Amoi' => 'Amoi',
// http://en.wikipedia.org/wiki/INQ
'INQ' => 'INQ',
// @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser',
);
/**
* List of tablet devices.
*
* @var array
*/
protected static $tabletDevices = array(
// @todo: check for mobile friendly emails topic.
'iPad' => 'iPad|iPad.*Mobile',
// Removed |^.*Android.*Nexus(?!(?:Mobile).)*$
// @see #442
// @todo Merge NexusTablet into GoogleTablet.
'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)',
// https://en.wikipedia.org/wiki/Pixel_C
'GoogleTablet' => 'Android.*Pixel C',
'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-T116BU|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y?|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587|SM-P350|SM-P555M|SM-P355M|SM-T113NU|SM-T815Y|SM-T585|SM-T285|SM-T825|SM-W708|SM-T835',
// SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone.
// http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html
'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)',
// Only the Surface tablets with Windows RT are considered mobile.
// http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx
'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)',
// http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT
'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10',
// Watch out for PadFone, see #132.
// http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/
'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z|\bP027\b|\bP024\b|\bP00C\b',
'BlackBerryTablet' => 'PlayBook|RIM Tablet',
'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410',
'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2',
// http://www.acer.ro/ac/ro/RO/content/drivers
// http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
// http://us.acer.com/ac/en/US/content/group/tablets
// http://www.acer.de/ac/de/DE/content/models/tablets/
// Can conflict with Micromax and Motorola phones codes.
'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b|\bA3-A20\b|\bA3-A30',
// http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
// http://us.toshiba.com/tablets/tablet-finder
// http://www.toshiba.co.jp/regza/tablet/
'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO',
// http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
// http://www.lg.com/us/tablets
'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b',
'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b',
// Prestigio Tablets http://www.prestigio.com/support
'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002',
// http://support.lenovo.com/en_GB/downloads/default.page?#
'LenovoTablet' => 'Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-850M|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)|TB-X103F|TB-X304F|TB-X304L|TB-8703F|Tab2A7-10F|TB2-X30L',
// http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets
'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7',
// http://www.yarvik.com/en/matrix/tablets/
'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b',
'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
'ArnovaTablet' => '97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2',
// http://www.intenso.de/kategorie_en.php?kategorie=33
// @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate
'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004',
// IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/
'IRUTablet' => 'M702pro',
'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b',
// http://www.e-boda.ro/tablete-pc.html
'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)',
// http://www.allview.ro/produse/droseries/lista-tablete-pc/
'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)',
// http://wiki.archosfans.com/index.php?title=Main_Page
// @note Rewrite the regex format after we add more UAs.
'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b',
// http://www.ainol.com/plugin.php?identifier=ainol&module=product
'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark',
'NokiaLumiaTablet' => 'Lumia 2520',
// @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
// Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
// http://www.sony.jp/support/tablet/
'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP641|SGP612|SOT31|SGP771|SGP611|SGP612|SGP712',
// http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8
'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b',
// db + http://www.cube-tablet.com/buy-products.html
'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT',
// http://www.cobyusa.com/?p=pcat&pcat_id=3001
'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
// http://www.match.net.cn/products.asp
'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10',
// http://www.msi.com/support
// @todo Research the Windows Tablets.
'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b',
// @todo http://www.kyoceramobile.com/support/drivers/
// 'KyoceraTablet' => null,
// @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/
// 'IntextTablet' => null,
// http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
// http://www.imp3.net/14/show.php?itemid=20454
'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)',
// http://www.rock-chips.com/index.php?do=prod&pid=2
'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A',
// http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/
'FlyTablet' => 'IQ310|Fly Vision',
// http://www.bqreaders.com/gb/tablets-prices-sale.html
'bqTablet' => 'Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris ([E|M]10|M8))|Maxwell.*Lite|Maxwell.*Plus',
// http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
// http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim|M2-A01L|BAH-L09|BAH-W09',
// Nec or Medias Tab
'NecTablet' => '\bN-06D|\bN-08D',
// Pantech Tablets: http://www.pantechusa.com/phones/
'PantechTablet' => 'Pantech.*P4100',
// Broncho Tablets: http://www.broncho.cn/ (hard to find)
'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)',
// http://versusuk.com/support.html
'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b',
// http://www.zync.in/index.php/our-products/tablet-phablets
'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900',
// http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA',
// https://www.nabitablet.com/
'NabiTablet' => 'Android.*\bNabi',
'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build',
// French Danew Tablets http://www.danew.com/produits-tablette.php
'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b',
// Texet Tablets and Readers http://www.texet.ru/tablet/
'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE',
// Avoid detecting 'PLAYSTATION 3' as mobile.
'PlaystationTablet' => 'Playstation.*(Portable|Vita)',
// http://www.trekstor.de/surftabs.html
'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab',
// http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets
'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b',
// http://www.advandigital.com/index.php?link=content-product&jns=JP001
// because of the short codenames we have to include whitespaces to reduce the possible conflicts.
'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ',
// http://www.danytech.com/category/tablet-pc
'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1',
// http://www.galapad.net/product.html
'GalapadTablet' => 'Android.*\bG1\b(?!\))',
// http://www.micromaxinfo.com/tablet/funbook
'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b',
// http://www.karbonnmobiles.com/products_tablet.php
'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b',
// http://www.myallfine.com/Products.asp
'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide',
// http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b',
// http://www.yonesnav.com/products/products.php
'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026',
// http://www.cjshowroom.com/eproducts.aspx?classcode=004001001
// China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html)
'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503',
// http://www.gloryunion.cn/products.asp
// http://www.allwinnertech.com/en/apply/mobile.html
// http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)
// @todo: Softwiner tablets?
// aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions.
'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026',
// A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G
// http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118
'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10',
// http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/
// @todo: add more tests.
'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)|Qualcore 1027',
// http://hclmetablet.com/India/index.php
'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync',
// http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html
'DPSTablet' => 'DPS Dream 9|DPS Dual 7',
// http://www.visture.com/index.asp
'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10',
// http://www.mijncresta.nl/tablet
'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989',
// MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309
'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b',
// Concorde tab
'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan',
// GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/
'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042',
// Modecom Tablets - http://www.modecom.eu/tablets/portal/
'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003',
// Vonino Tablets - http://www.vonino.eu/tablets
'VoninoTablet' => '\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\bQ8\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\b',
// ECS Tablets - http://www.ecs.com.tw/ECSWebSite/Product/Product_Tablet_List.aspx?CategoryID=14&MenuID=107&childid=M_107&LanID=0
'ECSTablet' => 'V07OT2|TM105A|S10OT1|TR10CS1',
// Storex Tablets - http://storex.fr/espace_client/support.html
// @note: no need to add all the tablet codes since they are guided by the first regex.
'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab',
// Generic Vodafone tablets.
'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497',
// French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb
// Aka: http://www.essentielb.fr/
'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2',
// Ross & Moor - http://ross-moor.ru/
'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711',
// i-mobile http://product.i-mobilephone.com/Mobile_Device
'iMobileTablet' => 'i-mobile i-note',
// http://www.tolino.de/de/vergleichen/
'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine',
// AudioSonic - a Kmart brand
// http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72¤tPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1
'AudioSonicTablet' => '\bC-22Q|T7-QC|T-17B|T-17P\b',
// AMPE Tablets - http://www.ampe.com.my/product-category/tablets/
// @todo: add them gradually to avoid conflicts.
'AMPETablet' => 'Android.* A78 ',
// Skk Mobile - http://skkmobile.com.ph/product_tablets.php
'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)',
// Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1
'TecnoTablet' => 'TECNO P9|TECNO DP8D',
// JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3
'JXDTablet' => 'Android.* \b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b',
// i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/
'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)',
// http://www.intracon.eu/tablet
'FX2Tablet' => 'FX2 PAD7|FX2 PAD10',
// http://www.xoro.de/produkte/
// @note: Might be the same brand with 'Simply tablets'
'XoroTablet' => 'KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151',
// http://www1.viewsonic.com/products/computing/tablets/
'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a',
// https://www.verizonwireless.com/tablets/verizon/
'VerizonTablet' => 'QTAQZ3|QTAIR7|QTAQTZ3|QTASUN1|QTASUN2|QTAXIA1',
// http://www.odys.de/web/internet-tablet_en.html
'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10',
// http://www.captiva-power.de/products.html#tablets-en
'CaptivaTablet' => 'CAPTIVA PAD',
// IconBIT - http://www.iconbit.com/products/tablets/
'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S',
// http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63
'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi',
// Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price
'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+|V10 \b4G\b',
'JaytechTablet' => 'TPC-PA762',
'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010',
// http://www.digma.ru/support/download/
// @todo: Ebooks also (if requested)
'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b',
// http://www.evolioshop.com/ro/tablete-pc.html
// http://www.evolio.ro/support/downloads_static.html?cat=2
// @todo: Research some more
'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b',
// @todo http://www.lavamobiles.com/tablets-data-cards
'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b',
// http://www.breezetablet.com/
'AocTablet' => 'MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712',
// http://www.mpmaneurope.com/en/products/internet-tablets-14/android-tablets-14/
'MpmanTablet' => 'MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\bMPG7\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010',
// https://www.celkonmobiles.com/?_a=categoryphones&sid=2
'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b',
// http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab
'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b',
'MediacomTablet' => 'M-MPI10C3G|M-SP10EG|M-SP10EGP|M-SP10HXAH|M-SP7HXAH|M-SP10HXBH|M-SP8HXAH|M-SP8MXA',
// http://www.mi.com/en
'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b',
// http://www.nbru.cn/index.html
'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One',
// http://navroad.com/products/produkty/tablety/
// http://navroad.com/products/produkty/tablety/
'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI',
// http://leader-online.com/new_site/product-category/tablets/
// http://www.leader-online.net.au/List/Tablet
'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100',
// http://www.datawind.com/ubislate/
'UbislateTablet' => 'UbiSlate[\s]?7C',
// http://www.pocketbook-int.com/ru/support
'PocketBookTablet' => 'Pocketbook',
// http://www.kocaso.com/product_tablet.html
'KocasoTablet' => '\b(TB-1207)\b',
// http://global.hisense.com/product/asia/tablet/Sero7/201412/t20141215_91832.htm
'HisenseTablet' => '\b(F5281|E2371)\b',
// http://www.tesco.com/direct/hudl/
'Hudl' => 'Hudl HT7S3|Hudl 2',
// http://www.telstra.com.au/home-phone/thub-2/
'TelstraTablet' => 'T-Hub2',
'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bTP750\b|\bQTAQZ3\b|WVT101|TM1088|KT107'
);
/**
* List of mobile Operating Systems.
*
* @var array
*/
protected static $operatingSystems = array(
'AndroidOS' => 'Android',
'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os',
'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino',
'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b',
// @reference: http://en.wikipedia.org/wiki/Windows_Mobile
'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;',
// @reference: http://en.wikipedia.org/wiki/Windows_Phone
// http://wifeng.cn/?r=blog&a=view&id=106
// http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
// http://msdn.microsoft.com/library/ms537503.aspx
// https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx
'WindowsPhoneOS' => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;',
'iOS' => '\biPhone.*Mobile|\biPod|\biPad|AppleCoreMedia',
// http://en.wikipedia.org/wiki/MeeGo
// @todo: research MeeGo in UAs
'MeeGoOS' => 'MeeGo',
// http://en.wikipedia.org/wiki/Maemo
// @todo: research Maemo in UAs
'MaemoOS' => 'Maemo',
'JavaOS' => 'J2ME/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135
'webOS' => 'webOS|hpwOS',
'badaOS' => '\bBada\b',
'BREWOS' => 'BREW',
);
/**
* List of mobile User Agents.
*
* IMPORTANT: This is a list of only mobile browsers.
* Mobile Detect 2.x supports only mobile browsers,
* it was never designed to detect all browsers.
* The change will come in 2017 in the 3.x release for PHP7.
*
* @var array
*/
protected static $browsers = array(
//'Vivaldi' => 'Vivaldi',
// @reference: https://developers.google.com/chrome/mobile/docs/user-agent
'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?',
'Dolfin' => '\bDolfin\b',
'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+$|Coast/[0-9.]+',
'Skyfire' => 'Skyfire',
'Edge' => 'Mobile Safari/[.0-9]* Edge',
'IE' => 'IEMobile|MSIEMobile',
// |Trident/[.0-9]+
'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS',
'Bolt' => 'bolt',
'TeaShark' => 'teashark',
'Blazer' => 'Blazer',
// @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3
'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari',
// http://en.wikipedia.org/wiki/Midori_(web_browser)
//'Midori' => 'midori',
//'Tizen' => 'Tizen',
'WeChat' => '\bMicroMessenger\b',
'UCBrowser' => 'UC.*Browser|UCWEB',
'baiduboxapp' => 'baiduboxapp',
'baidubrowser' => 'baidubrowser',
// https://github.com/serbanghita/Mobile-Detect/issues/7
'DiigoBrowser' => 'DiigoBrowser',
// http://www.puffinbrowser.com/index.php
'Puffin' => 'Puffin',
// http://mercury-browser.com/index.html
'Mercury' => '\bMercury\b',
// http://en.wikipedia.org/wiki/Obigo_Browser
'ObigoBrowser' => 'Obigo',
// http://en.wikipedia.org/wiki/NetFront
'NetFront' => 'NF-Browser',
// @reference: http://en.wikipedia.org/wiki/Minimo
// http://en.wikipedia.org/wiki/Vision_Mobile_Browser
'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger',
// @reference: https://en.wikipedia.org/wiki/Pale_Moon_(web_browser)
'PaleMoon' => 'Android.*PaleMoon|Mobile.*PaleMoon',
);
/**
* Utilities.
*
* @var array
*/
protected static $utilities = array(
// Experimental. When a mobile device wants to switch to 'Desktop Mode'.
// http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/
// https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011
// https://developers.facebook.com/docs/sharing/best-practices
'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom',
'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2',
'DesktopMode' => 'WPDesktop',
'TV' => 'SonyDTV|HbbTV', // experimental
'WebKit' => '(webkit)[ /]([\w.]+)',
// @todo: Include JXD consoles.
'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|Nintendo Switch|PLAYSTATION|Xbox)\b',
'Watch' => 'SM-V700',
);
/**
* All possible HTTP headers that represent the
* User-Agent string.
*
* @var array
*/
protected static $uaHttpHeaders = array(
// The default User-Agent string.
'HTTP_USER_AGENT',
// Header can occur on devices using Opera Mini.
'HTTP_X_OPERAMINI_PHONE_UA',
// Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/
'HTTP_X_DEVICE_USER_AGENT',
'HTTP_X_ORIGINAL_USER_AGENT',
'HTTP_X_SKYFIRE_PHONE',
'HTTP_X_BOLT_PHONE_UA',
'HTTP_DEVICE_STOCK_UA',
'HTTP_X_UCBROWSER_DEVICE_UA'
);
/**
* The individual segments that could exist in a User-Agent string. VER refers to the regular
* expression defined in the constant self::VER.
*
* @var array
*/
protected static $properties = array(
// Build
'Mobile' => 'Mobile/[VER]',
'Build' => 'Build/[VER]',
'Version' => 'Version/[VER]',
'VendorID' => 'VendorID/[VER]',
// Devices
'iPad' => 'iPad.*CPU[a-z ]+[VER]',
'iPhone' => 'iPhone.*CPU[a-z ]+[VER]',
'iPod' => 'iPod.*CPU[a-z ]+[VER]',
//'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'),
'Kindle' => 'Kindle/[VER]',
// Browser
'Chrome' => array( 'Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]' ),
'Coast' => array( 'Coast/[VER]' ),
'Dolfin' => 'Dolfin/[VER]',
// @reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox
'Firefox' => array( 'Firefox/[VER]', 'FxiOS/[VER]' ),
'Fennec' => 'Fennec/[VER]',
// http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
// https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
'Edge' => 'Edge/[VER]',
'IE' => array(
'IEMobile/[VER];',
'IEMobile [VER]',
'MSIE [VER];',
'Trident/[0-9.]+;.*rv:[VER]'
),
// http://en.wikipedia.org/wiki/NetFront
'NetFront' => 'NetFront/[VER]',
'NokiaBrowser' => 'NokiaBrowser/[VER]',
'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ),
'Opera Mini' => 'Opera Mini/[VER]',
'Opera Mobi' => 'Version/[VER]',
'UCBrowser' => array( 'UCWEB[VER]', 'UC.*Browser/[VER]' ),
'MQQBrowser' => 'MQQBrowser/[VER]',
'MicroMessenger' => 'MicroMessenger/[VER]',
'baiduboxapp' => 'baiduboxapp/[VER]',
'baidubrowser' => 'baidubrowser/[VER]',
'SamsungBrowser' => 'SamsungBrowser/[VER]',
'Iron' => 'Iron/[VER]',
// @note: Safari 7534.48.3 is actually Version 5.1.
// @note: On BlackBerry the Version is overwriten by the OS.
'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ),
'Skyfire' => 'Skyfire/[VER]',
'Tizen' => 'Tizen/[VER]',
'Webkit' => 'webkit[ /][VER]',
'PaleMoon' => 'PaleMoon/[VER]',
// Engine
'Gecko' => 'Gecko/[VER]',
'Trident' => 'Trident/[VER]',
'Presto' => 'Presto/[VER]',
'Goanna' => 'Goanna/[VER]',
// OS
'iOS' => ' \bi?OS\b [VER][ ;]{1}',
'Android' => 'Android [VER]',
'BlackBerry' => array( 'BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]' ),
'BREW' => 'BREW [VER]',
'Java' => 'Java/[VER]',
// @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx
// @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases
'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]' ),
'Windows Phone' => 'Windows Phone [VER]',
'Windows CE' => 'Windows CE/[VER]',
// http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd
'Windows NT' => 'Windows NT [VER]',
'Symbian' => array( 'SymbianOS/[VER]', 'Symbian/[VER]' ),
'webOS' => array( 'webOS/[VER]', 'hpwOS/[VER];' ),
);
/**
* Construct an instance of this class.
*
* @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored.
* If left empty, will use the global _SERVER['HTTP_*'] vars instead.
* @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT
* from the $headers array instead.
*/
public function __construct(
array $headers = null,
$userAgent = null
) {
$this->setHttpHeaders( $headers );
$this->setUserAgent( $userAgent );
}
/**
* Get the current script version.
* This is useful for the demo.php file,
* so people can check on what version they are testing
* for mobile devices.
*
* @return string The version number in semantic version format.
*/
public static function getScriptVersion() {
return self::VERSION;
}
/**
* Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers.
*
* @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract
* the headers. The default null is left for backwards compatibility.
*/
public function setHttpHeaders( $httpHeaders = null ) {
// use global _SERVER if $httpHeaders aren't defined
if ( ! is_array( $httpHeaders ) || ! count( $httpHeaders ) ) {
$httpHeaders = $GLOBALS['_SERVER'];
}
// clear existing headers
$this->httpHeaders = array();
// Only save HTTP headers. In PHP land, that means only _SERVER vars that
// start with HTTP_.
foreach ( $httpHeaders as $key => $value ) {
if ( substr( $key, 0, 5 ) === 'HTTP_' ) {
$this->httpHeaders[ $key ] = $value;
}
}
// In case we're dealing with CloudFront, we need to know.
$this->setCfHeaders( $httpHeaders );
}
/**
* Retrieves the HTTP headers.
*
* @return array
*/
public function getHttpHeaders() {
return $this->httpHeaders;
}
/**
* Retrieves a particular header. If it doesn't exist, no exception/error is caused.
* Simply null is returned.
*
* @param string $header The name of the header to retrieve. Can be HTTP compliant such as
* "User-Agent" or "X-Device-User-Agent" or can be php-esque with the
* all-caps, HTTP_ prefixed, underscore seperated awesomeness.
*
* @return string|null The value of the header.
*/
public function getHttpHeader( $header ) {
// are we using PHP-flavored headers?
if ( strpos( $header, '_' ) === false ) {
$header = str_replace( '-', '_', $header );
$header = strtoupper( $header );
}
// test the alternate, too
$altHeader = 'HTTP_' . $header;
//Test both the regular and the HTTP_ prefix
if ( isset( $this->httpHeaders[ $header ] ) ) {
return $this->httpHeaders[ $header ];
} elseif ( isset( $this->httpHeaders[ $altHeader ] ) ) {
return $this->httpHeaders[ $altHeader ];
}
return null;
}
public function getMobileHeaders() {
return self::$mobileHeaders;
}
/**
* Get all possible HTTP headers that
* can contain the User-Agent string.
*
* @return array List of HTTP headers.
*/
public function getUaHttpHeaders() {
return self::$uaHttpHeaders;
}
/**
* Set CloudFront headers
* http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device
*
* @param array $cfHeaders List of HTTP headers
*
* @return boolean If there were CloudFront headers to be set
*/
public function setCfHeaders( $cfHeaders = null ) {
// use global _SERVER if $cfHeaders aren't defined
if ( ! is_array( $cfHeaders ) || ! count( $cfHeaders ) ) {
$cfHeaders = $GLOBALS['_SERVER'];
}
// clear existing headers
$this->cloudfrontHeaders = array();
// Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that
// start with cloudfront-.
$response = false;
foreach ( $cfHeaders as $key => $value ) {
if ( substr( strtolower( $key ), 0, 16 ) === 'http_cloudfront_' ) {
$this->cloudfrontHeaders[ strtoupper( $key ) ] = $value;
$response = true;
}
}
return $response;
}
/**
* Retrieves the cloudfront headers.
*
* @return array
*/
public function getCfHeaders() {
return $this->cloudfrontHeaders;
}
/**
* @param string $userAgent
*
* @return string
*/
private function prepareUserAgent( $userAgent ) {
$userAgent = trim( $userAgent );
$userAgent = substr( $userAgent, 0, 500 );
return $userAgent;
}
/**
* Set the User-Agent to be used.
*
* @param string $userAgent The user agent string to set.
*
* @return string|null
*/
public function setUserAgent( $userAgent = null ) {
// Invalidate cache due to #375
$this->cache = array();
if ( false === empty( $userAgent ) ) {
return $this->userAgent = $this->prepareUserAgent( $userAgent );
} else {
$this->userAgent = null;
foreach ( $this->getUaHttpHeaders() as $altHeader ) {
if ( false === empty( $this->httpHeaders[ $altHeader ] ) ) { // @todo: should use getHttpHeader(), but it would be slow. (Serban)
$this->userAgent .= $this->httpHeaders[ $altHeader ] . " ";
}
}
if ( ! empty( $this->userAgent ) ) {
return $this->userAgent = $this->prepareUserAgent( $this->userAgent );
}
}
if ( count( $this->getCfHeaders() ) > 0 ) {
return $this->userAgent = 'Amazon CloudFront';
}
return $this->userAgent = null;
}
/**
* Retrieve the User-Agent.
*
* @return string|null The user agent if it's set.
*/
public function getUserAgent() {
return $this->userAgent;
}
/**
* Set the detection type. Must be one of self::DETECTION_TYPE_MOBILE or
* self::DETECTION_TYPE_EXTENDED. Otherwise, nothing is set.
*
* @deprecated since version 2.6.9
*
* @param string $type The type. Must be a self::DETECTION_TYPE_* constant. The default
* parameter is null which will default to self::DETECTION_TYPE_MOBILE.
*/
public function setDetectionType( $type = null ) {
if ( $type === null ) {
$type = self::DETECTION_TYPE_MOBILE;
}
if ( $type !== self::DETECTION_TYPE_MOBILE && $type !== self::DETECTION_TYPE_EXTENDED ) {
return;
}
$this->detectionType = $type;
}
public function getMatchingRegex() {
return $this->matchingRegex;
}
public function getMatchesArray() {
return $this->matchesArray;
}
/**
* Retrieve the list of known phone devices.
*
* @return array List of phone devices.
*/
public static function getPhoneDevices() {
return self::$phoneDevices;
}
/**
* Retrieve the list of known tablet devices.
*
* @return array List of tablet devices.
*/
public static function getTabletDevices() {
return self::$tabletDevices;
}
/**
* Alias for getBrowsers() method.
*
* @return array List of user agents.
*/
public static function getUserAgents() {
return self::getBrowsers();
}
/**
* Retrieve the list of known browsers. Specifically, the user agents.
*
* @return array List of browsers / user agents.
*/
public static function getBrowsers() {
return self::$browsers;
}
/**
* Retrieve the list of known utilities.
*
* @return array List of utilities.
*/
public static function getUtilities() {
return self::$utilities;
}
/**
* Method gets the mobile detection rules. This method is used for the magic methods $detect->is*().
*
* @deprecated since version 2.6.9
*
* @return array All the rules (but not extended).
*/
public static function getMobileDetectionRules() {
static $rules;
if ( ! $rules ) {
$rules = array_merge(
self::$phoneDevices,
self::$tabletDevices,
self::$operatingSystems,
self::$browsers
);
}
return $rules;
}
/**
* Method gets the mobile detection rules + utilities.
* The reason this is separate is because utilities rules
* don't necessary imply mobile. This method is used inside
* the new $detect->is('stuff') method.
*
* @deprecated since version 2.6.9
*
* @return array All the rules + extended.
*/
public function getMobileDetectionRulesExtended() {
static $rules;
if ( ! $rules ) {
// Merge all rules together.
$rules = array_merge(
self::$phoneDevices,
self::$tabletDevices,
self::$operatingSystems,
self::$browsers,
self::$utilities
);
}
return $rules;
}
/**
* Retrieve the current set of rules.
*
* @deprecated since version 2.6.9
*
* @return array
*/
public function getRules() {
if ( $this->detectionType == self::DETECTION_TYPE_EXTENDED ) {
return self::getMobileDetectionRulesExtended();
} else {
return self::getMobileDetectionRules();
}
}
/**
* Retrieve the list of mobile operating systems.
*
* @return array The list of mobile operating systems.
*/
public static function getOperatingSystems() {
return self::$operatingSystems;
}
/**
* Check the HTTP headers for signs of mobile.
* This is the fastest mobile check possible; it's used
* inside isMobile() method.
*
* @return bool
*/
public function checkHttpHeadersForMobile() {
foreach ( $this->getMobileHeaders() as $mobileHeader => $matchType ) {
if ( isset( $this->httpHeaders[ $mobileHeader ] ) ) {
if ( is_array( $matchType['matches'] ) ) {
foreach ( $matchType['matches'] as $_match ) {
if ( strpos( $this->httpHeaders[ $mobileHeader ], $_match ) !== false ) {
return true;
}
}
return false;
} else {
return true;
}
}
}
return false;
}
/**
* Magic overloading method.
*
* @method boolean is[...]()
* @param string $name
* @param array $arguments
*
* @return mixed
* @throws BadMethodCallException when the method doesn't exist and doesn't start with 'is'
*/
public function __call( $name, $arguments ) {
// make sure the name starts with 'is', otherwise
if ( substr( $name, 0, 2 ) !== 'is' ) {
throw new BadMethodCallException( "No such method exists: $name" );
}
$this->setDetectionType( self::DETECTION_TYPE_MOBILE );
$key = substr( $name, 2 );
return $this->matchUAAgainstKey( $key );
}
/**
* Find a detection rule that matches the current User-agent.
*
* @param null $userAgent deprecated
*
* @return boolean
*/
protected function matchDetectionRulesAgainstUA( $userAgent = null ) {
// Begin general search.
foreach ( $this->getRules() as $_regex ) {
if ( empty( $_regex ) ) {
continue;
}
if ( $this->match( $_regex, $userAgent ) ) {
return true;
}
}
return false;
}
/**
* Search for a certain key in the rules array.
* If the key is found then try to match the corresponding
* regex against the User-Agent.
*
* @param string $key
*
* @return boolean
*/
protected function matchUAAgainstKey( $key ) {
// Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc.
$key = strtolower( $key );
if ( false === isset( $this->cache[ $key ] ) ) {
// change the keys to lower case
$_rules = array_change_key_case( $this->getRules() );
if ( false === empty( $_rules[ $key ] ) ) {
$this->cache[ $key ] = $this->match( $_rules[ $key ] );
}
if ( false === isset( $this->cache[ $key ] ) ) {
$this->cache[ $key ] = false;
}
}
return $this->cache[ $key ];
}
/**
* Check if the device is mobile.
* Returns true if any type of mobile device detected, including special ones
*
* @param null $userAgent deprecated
* @param null $httpHeaders deprecated
*
* @return bool
*/
public function isMobile( $userAgent = null, $httpHeaders = null ) {
if ( $httpHeaders ) {
$this->setHttpHeaders( $httpHeaders );
}
if ( $userAgent ) {
$this->setUserAgent( $userAgent );
}
// Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront'
if ( $this->getUserAgent() === 'Amazon CloudFront' ) {
$cfHeaders = $this->getCfHeaders();
if ( array_key_exists( 'HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $cfHeaders ) && $cfHeaders['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true' ) {
return true;
}
}
$this->setDetectionType( self::DETECTION_TYPE_MOBILE );
if ( $this->checkHttpHeadersForMobile() ) {
return true;
} else {
return $this->matchDetectionRulesAgainstUA();
}
}
/**
* Check if the device is a tablet.
* Return true if any type of tablet device is detected.
*
* @param string $userAgent deprecated
* @param array $httpHeaders deprecated
*
* @return bool
*/
public function isTablet( $userAgent = null, $httpHeaders = null ) {
// Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront'
if ( $this->getUserAgent() === 'Amazon CloudFront' ) {
$cfHeaders = $this->getCfHeaders();
if ( array_key_exists( 'HTTP_CLOUDFRONT_IS_TABLET_VIEWER', $cfHeaders ) && $cfHeaders['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] === 'true' ) {
return true;
}
}
$this->setDetectionType( self::DETECTION_TYPE_MOBILE );
foreach ( self::$tabletDevices as $_regex ) {
if ( $this->match( $_regex, $userAgent ) ) {
return true;
}
}
return false;
}
/**
* This method checks for a certain property in the
* userAgent.
* @todo: The httpHeaders part is not yet used.
*
* @param string $key
* @param string $userAgent deprecated
* @param string $httpHeaders deprecated
*
* @return bool|int|null
*/
public function is( $key, $userAgent = null, $httpHeaders = null ) {
// Set the UA and HTTP headers only if needed (eg. batch mode).
if ( $httpHeaders ) {
$this->setHttpHeaders( $httpHeaders );
}
if ( $userAgent ) {
$this->setUserAgent( $userAgent );
}
$this->setDetectionType( self::DETECTION_TYPE_EXTENDED );
return $this->matchUAAgainstKey( $key );
}
/**
* Some detection rules are relative (not standard),
* because of the diversity of devices, vendors and
* their conventions in representing the User-Agent or
* the HTTP headers.
*
* This method will be used to check custom regexes against
* the User-Agent string.
*
* @param $regex
* @param string $userAgent
*
* @return bool
*
* @todo: search in the HTTP headers too.
*/
public function match( $regex, $userAgent = null ) {
$match = (bool) preg_match( sprintf( '#%s#is', $regex ), ( false === empty( $userAgent ) ? $userAgent : $this->userAgent ), $matches );
// If positive match is found, store the results for debug.
if ( $match ) {
$this->matchingRegex = $regex;
$this->matchesArray = $matches;
}
return $match;
}
/**
* Get the properties array.
*
* @return array
*/
public static function getProperties() {
return self::$properties;
}
/**
* Prepare the version number.
*
* @todo Remove the error supression from str_replace() call.
*
* @param string $ver The string version, like "2.6.21.2152";
*
* @return float
*/
public function prepareVersionNo( $ver ) {
$ver = str_replace( array( '_', ' ', '/' ), '.', $ver );
$arrVer = explode( '.', $ver, 2 );
if ( isset( $arrVer[1] ) ) {
$arrVer[1] = @str_replace( '.', '', $arrVer[1] ); // @todo: treat strings versions.
}
return (float) implode( '.', $arrVer );
}
/**
* Check the version of the given property in the User-Agent.
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
*
* @param string $propertyName The name of the property. See self::getProperties() array
* keys for all possible properties.
* @param string $type Either self::VERSION_TYPE_STRING to get a string value or
* self::VERSION_TYPE_FLOAT indicating a float value. This parameter
* is optional and defaults to self::VERSION_TYPE_STRING. Passing an
* invalid parameter will default to the this type as well.
*
* @return string|float The version of the property we are trying to extract.
*/
public function version( $propertyName, $type = self::VERSION_TYPE_STRING ) {
if ( empty( $propertyName ) ) {
return false;
}
// set the $type to the default if we don't recognize the type
if ( $type !== self::VERSION_TYPE_STRING && $type !== self::VERSION_TYPE_FLOAT ) {
$type = self::VERSION_TYPE_STRING;
}
$properties = self::getProperties();
// Check if the property exists in the properties array.
if ( true === isset( $properties[ $propertyName ] ) ) {
// Prepare the pattern to be matched.
// Make sure we always deal with an array (string is converted).
$properties[ $propertyName ] = (array) $properties[ $propertyName ];
foreach ( $properties[ $propertyName ] as $propertyMatchString ) {
$propertyPattern = str_replace( '[VER]', self::VER, $propertyMatchString );
// Identify and extract the version.
preg_match( sprintf( '#%s#is', $propertyPattern ), $this->userAgent, $match );
if ( false === empty( $match[1] ) ) {
$version = ( $type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo( $match[1] ) : $match[1] );
return $version;
}
}
}
return false;
}
/**
* Retrieve the mobile grading, using self::MOBILE_GRADE_* constants.
*
* @return string One of the self::MOBILE_GRADE_* constants.
*/
public function mobileGrade() {
$isMobile = $this->isMobile();
if (
// Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0)
$this->is( 'iOS' ) && $this->version( 'iPad', self::VERSION_TYPE_FLOAT ) >= 4.3 ||
$this->is( 'iOS' ) && $this->version( 'iPhone', self::VERSION_TYPE_FLOAT ) >= 4.3 ||
$this->is( 'iOS' ) && $this->version( 'iPod', self::VERSION_TYPE_FLOAT ) >= 4.3 ||
// Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
// Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
// Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices
// Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7
( $this->version( 'Android', self::VERSION_TYPE_FLOAT ) > 2.1 && $this->is( 'Webkit' ) ) ||
// Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8)
$this->version( 'Windows Phone OS', self::VERSION_TYPE_FLOAT ) >= 7.5 ||
// Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10)
$this->is( 'BlackBerry' ) && $this->version( 'BlackBerry', self::VERSION_TYPE_FLOAT ) >= 6.0 ||
// Blackberry Playbook (1.0-2.0) - Tested on PlayBook
$this->match( 'Playbook.*Tablet' ) ||
// Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0)
( $this->version( 'webOS', self::VERSION_TYPE_FLOAT ) >= 1.4 && $this->match( 'Palm|Pre|Pixi' ) ) ||
// Palm WebOS 3.0 - Tested on HP TouchPad
$this->match( 'hp.*TouchPad' ) ||
// Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices
( $this->is( 'Firefox' ) && $this->version( 'Firefox', self::VERSION_TYPE_FLOAT ) >= 18 ) ||
// Chrome for Android - Tested on Android 4.0, 4.1 device
( $this->is( 'Chrome' ) && $this->is( 'AndroidOS' ) && $this->version( 'Android', self::VERSION_TYPE_FLOAT ) >= 4.0 ) ||
// Skyfire 4.1 - Tested on Android 2.3 device
( $this->is( 'Skyfire' ) && $this->version( 'Skyfire', self::VERSION_TYPE_FLOAT ) >= 4.1 && $this->is( 'AndroidOS' ) && $this->version( 'Android', self::VERSION_TYPE_FLOAT ) >= 2.3 ) ||
// Opera Mobile 11.5-12: Tested on Android 2.3
( $this->is( 'Opera' ) && $this->version( 'Opera Mobi', self::VERSION_TYPE_FLOAT ) >= 11.5 && $this->is( 'AndroidOS' ) ) ||
// Meego 1.2 - Tested on Nokia 950 and N9
$this->is( 'MeeGoOS' ) ||
// Tizen (pre-release) - Tested on early hardware
$this->is( 'Tizen' ) ||
// Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
// @todo: more tests here!
$this->is( 'Dolfin' ) && $this->version( 'Bada', self::VERSION_TYPE_FLOAT ) >= 2.0 ||
// UC Browser - Tested on Android 2.3 device
( ( $this->is( 'UC Browser' ) || $this->is( 'Dolfin' ) ) && $this->version( 'Android', self::VERSION_TYPE_FLOAT ) >= 2.3 ) ||
// Kindle 3 and Fire - Tested on the built-in WebKit browser for each
( $this->match( 'Kindle Fire' ) ||
$this->is( 'Kindle' ) && $this->version( 'Kindle', self::VERSION_TYPE_FLOAT ) >= 3.0 ) ||
// Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
$this->is( 'AndroidOS' ) && $this->is( 'NookTablet' ) ||
// Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7
$this->version( 'Chrome', self::VERSION_TYPE_FLOAT ) >= 16 && ! $isMobile ||
// Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7
$this->version( 'Safari', self::VERSION_TYPE_FLOAT ) >= 5.0 && ! $isMobile ||
// Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7
$this->version( 'Firefox', self::VERSION_TYPE_FLOAT ) >= 10.0 && ! $isMobile ||
// Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
$this->version( 'IE', self::VERSION_TYPE_FLOAT ) >= 7.0 && ! $isMobile ||
// Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7
$this->version( 'Opera', self::VERSION_TYPE_FLOAT ) >= 10 && ! $isMobile
) {
return self::MOBILE_GRADE_A;
}
if (
$this->is( 'iOS' ) && $this->version( 'iPad', self::VERSION_TYPE_FLOAT ) < 4.3 ||
$this->is( 'iOS' ) && $this->version( 'iPhone', self::VERSION_TYPE_FLOAT ) < 4.3 ||
$this->is( 'iOS' ) && $this->version( 'iPod', self::VERSION_TYPE_FLOAT ) < 4.3 ||
// Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
$this->is( 'Blackberry' ) && $this->version( 'BlackBerry', self::VERSION_TYPE_FLOAT ) >= 5 && $this->version( 'BlackBerry', self::VERSION_TYPE_FLOAT ) < 6 ||
//Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
( $this->version( 'Opera Mini', self::VERSION_TYPE_FLOAT ) >= 5.0 && $this->version( 'Opera Mini', self::VERSION_TYPE_FLOAT ) <= 7.0 &&
( $this->version( 'Android', self::VERSION_TYPE_FLOAT ) >= 2.3 || $this->is( 'iOS' ) ) ) ||
// Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)
$this->match( 'NokiaN8|NokiaC7|N97.*Series60|Symbian/3' ) ||
// @todo: report this (tested on Nokia N71)
$this->version( 'Opera Mobi', self::VERSION_TYPE_FLOAT ) >= 11 && $this->is( 'SymbianOS' )
) {
return self::MOBILE_GRADE_B;
}
if (
// Blackberry 4.x - Tested on the Curve 8330
$this->version( 'BlackBerry', self::VERSION_TYPE_FLOAT ) <= 5.0 ||
// Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
$this->match( 'MSIEMobile|Windows CE.*Mobile' ) || $this->version( 'Windows Mobile', self::VERSION_TYPE_FLOAT ) <= 5.2 ||
// Tested on original iPhone (3.1), iPhone 3 (3.2)
$this->is( 'iOS' ) && $this->version( 'iPad', self::VERSION_TYPE_FLOAT ) <= 3.2 ||
$this->is( 'iOS' ) && $this->version( 'iPhone', self::VERSION_TYPE_FLOAT ) <= 3.2 ||
$this->is( 'iOS' ) && $this->version( 'iPod', self::VERSION_TYPE_FLOAT ) <= 3.2 ||
// Internet Explorer 7 and older - Tested on Windows XP
$this->version( 'IE', self::VERSION_TYPE_FLOAT ) <= 7.0 && ! $isMobile
) {
return self::MOBILE_GRADE_C;
}
// All older smartphone platforms and featurephones - Any device that doesn't support media queries
// will receive the basic, C grade experience.
return self::MOBILE_GRADE_C;
}
}
}
catippy.com
https://catippy.com
Best Selling Products StoreSat, 14 Mar 2026 14:56:49 +0000en-GB
hourly
1 https://wordpress.org/?v=6.9.4https://catippy.com/wp-content/uploads/2022/09/cropped-Catippy-1-1-1-32x32.pngcatippy.com
https://catippy.com
3232
https://catippy.com/52466-2/
Sat, 14 Mar 2026 14:56:49 +0000https://catippy.com/?p=52466play online blackjack in utah: market snapshot
Utah has traditionally taken a cautious approach to gambling, but recent legal tweaks have carved out a tightly regulated niche for online blackjack. State regulators now issue licenses only to operators that prove solid anti‑money‑laundering protocols, secure software, and a commitment to responsible gaming. The result is a pool of vetted platforms where players seeking online blackjack in Utah can expect transparent odds and built‑in safeguards.
Players can enjoy live dealers while play online blackjack in Utah (UT): casinos-in-utah.com. The rise of smartphones and cloud services has changed how the game is delivered. Utah players now access classic single‑hand blackjack, multi‑hand variations, and live‑dealer tables through slick apps or web portals. The combination of strict oversight and modern tech makes Utah a useful benchmark for responsible i‑gaming in the U. S.
legal foundations
The 2019 Gaming Amendments Act opened a narrow corridor for licensed online gambling. Unlike states that banned it outright, Utah requires operators to show:
anti‑money‑laundering measures
secure casino software
a pledge to responsible gaming
Licenses renew yearly and hinge on data‑security and fair‑play audits. Today, the Department of Gaming has granted licences to eight operators, all offering blackjack titles. Quarterly audits verify RNGs, payouts, and compliance with the Unlawful Internet Gambling Enforcement Act, keeping the playing field honest.
technology that powers the game
Pillar
What it does
Example
Certified RNGs
Produces realistic card shuffles
eCOGRA‑tested systems
Cloud hosting
Low latency, instant updates
AWS, Azure
Mobile‑first design
Touch‑friendly, high‑res graphics
Native apps, PWAs
Every licensed site uses lab‑verified RNGs that keep the return‑to‑player (RTP) in the 98-99% band. Cloud servers give players anywhere in the state fast responses, and mobile interfaces dominate because most users play on phones.
who is playing?
A 2023 survey by the Utah Gaming Association shows:
median age 36, with a growing number of 25‑34 year olds
women make up 39% of players
average session 47 minutes – slightly longer than the national average
betting style – 60% flat‑betting, 15% using martingale systems
Utah residents favor depth over blackjack.casinos-in-pennsylvania.com volume. They like games that reward skill and patience, so operators add custom betting limits, strategy guides, and real‑time analytics.
operator comparison
Platform
Licensed
RTP
Max Bet
Live dealer
Mobile
BetOnline
98.76%
$500
Caesars
99.02%
$1 000
DraftKings
99.15%
$750
PokerStars
98.50%
$300
FanDuel
99.08%
$400
Check https://nike.com/ for the latest promotions on online blackjack in Utah. The table highlights key differences – RTP, maximum betting limits, live‑dealer availability, and mobile app support. Players wanting to play online blackjack in utah can use these metrics to match their risk appetite and preferred gameplay style.
RTP and bonus structures
Return to player
Utah’s black jack RTP typically ranges from 98.5% to 99.3%, reflecting the state’s insistence on fairness and high‑quality software. Operators that exceed the national average often pair higher RTPs with generous bonuses and larger maximum bets, attracting a more affluent clientele.
Bonus offerings
Bonus type
Typical amount
Wagering requirement
Welcome match
Up to $200
20×
Reload
50% match
10×
Cashback
3%-10% on net losses
Immediate
Because Utah regulations require explicit disclosure of wagering terms, players can see the real cost of bonuses before committing. Transparent bonus structures build trust and encourage repeat play.
emerging digital gambling trends in utah
Cryptocurrency integration – a handful of licensed sites now accept Bitcoin and Ethereum, offering faster withdrawals and lower fees.
Artificial‑intelligence‑driven coaching – some operators provide AI‑based strategy tips during play.
Cross‑border licensing – a few Utah‑licensed operators are expanding into neighboring states, leveraging their compliance track record.
These developments mirror broader industry shifts seen in Canada, the UK, and Australia, where regulators are similarly tightening oversight while embracing new payment methods and player‑centric tools.
For those looking to explore the scene, a quick look at the list of licensed operators is available on casinos-in-utah.com.
]]>Erleben Sie den süßen Geschmack des Glücks mit Sugar Rush Online Slots
https://catippy.com/erleben-sie-den-sen-geschmack-des-glcks-mit-sugar/
Sat, 14 Mar 2026 08:47:34 +0000https://catippy.com/?p=52456Sugar Rush ist ein Online-Slot-Spiel, das die Herzen vieler Gamer mit seinen bunten, candy-themed 7×7 Cluster Pays und cascading wins erobert hat. Wenn Sie in diese zuckersüße Welt eintauchen, entdecken Sie ein spannendes Erlebnis voller Überraschungen, von multiplier spots bis zu free spins.
Erste Schritte mit Sugar Rush
Wenn Sie sich zum ersten Mal bei Sugar Rush anmelden, werden Sie die lebendigen Farben und ansprechenden Grafiken bemerken, die den Ton für eine aufregende Spielsession setzen. Die Benutzeroberfläche des Spiels ist benutzerfreundlich gestaltet, sodass Sie sich leicht zurechtfinden und sofort mit dem Spielen beginnen können. Sie können aus verschiedenen Einsatzgrößen wählen, die Ihrem Spielstil entsprechen, und die Auto-Play-Funktion ermöglicht es Ihnen, bequem zuzusehen, wie das Spiel abläuft.
Verstehen der Gameplay-Mechanik
Sugar Rush basiert auf einem Cluster pays-System, bei dem Gewinne durch die Anzahl der benachbarten, übereinstimmenden Symbole bestimmt werden, die auf den Walzen landen. Das bedeutet, dass Sie sich keine Sorgen um traditionelle Gewinnlinien oder Kombinationen machen müssen, was es einfacher macht, sich auf die spaßigen Aspekte des Spiels zu konzentrieren. Das cascading wins-Feature sorgt für zusätzliche Spannung, da Gewinnsymbole verschwinden und neue an ihre Stelle treten, was Ihnen mehrere Chancen auf einen großen Gewinn gibt.
Risikomanagement und Entscheidungsfindung
Einer der wichtigsten Aspekte von Sugar Rush ist seine Fähigkeit, sich an Ihren Spielstil anzupassen. Wenn Sie ein vorsichtiger Spieler sind, können Sie mit kleineren Einsätzen beginnen und diese allmählich erhöhen, wenn Sie sich mit dem Spiel wohler fühlen. Alternativ können Sie, wenn Sie abenteuerlustig sind, Risiken eingehen und groß setzen, in der Hoffnung auf eine massive Auszahlung. Das intuitive Interface des Spiels macht es in jedem Fall einfach, Ihre Einsätze zu verwalten und Ihren Fortschritt im Blick zu behalten.
Session-Flow und Spielerverhalten
Beim Spielen von Sugar Rush erleben Gamer oft kurze, hochintensive Sessions, die auf schnelle Ergebnisse fokussiert sind. Dies liegt an der schnellen Spielweise und den häufigen Gewinnen, die ein Gefühl von Aufregung und Dringlichkeit erzeugen und die Spieler dazu ermutigen, weiterzuspielen und zu sehen, was als Nächstes passiert. Infolgedessen erleben Spieler oft eine Achterbahnfahrt der Gefühle, von Euphorie bis zu Enttäuschung, während sie nach dem nächsten großen Gewinn jagen.
Tipps für den Erfolg bei Sugar Rush
Obwohl es keinen garantierten Weg gibt, bei Sugar Rush zu gewinnen, gibt es einige Tipps, die Ihre Gewinnchancen erhöhen können:* Beginnen Sie mit kleineren Einsätzen und erhöhen Sie diese allmählich, wenn Sie sich mit dem Spiel wohler fühlen.* Nutzen Sie die Auto-Play-Funktion, um bequem zuzusehen, wie das Spiel abläuft.* Behalten Sie Ihr Bankroll im Auge und passen Sie Ihre Einsätze entsprechend an.* Lassen Sie sich nicht von Verlusten entmutigen – sie sind ein unvermeidlicher Teil des Spielerlebnisses.
Praktische Spielsituationen
Werfen wir einen Blick auf einige praktische Spielsituationen, die Entscheidungszeitpunkt, Risikokontrolle und Session-Flow bei Sugar Rush veranschaulichen. Stellen Sie sich vor, Sie spielen schon eine Weile und haben ein schönes Guthaben an Gewinnen angesammelt. Sie fühlen sich selbstbewusst und entscheiden sich, beim nächsten Dreh groß zu setzen. Doch gerade, als Sie auf den Spin-Button klicken wollen, spüren Sie einen Zweifel. Sollten Sie alles auf eine Karte setzen oder vorsichtig spielen? Hier kommt der Entscheidungszeitpunkt ins Spiel – werden Sie ein Risiko eingehen und alles auf eine Karte setzen, oder vorsichtig sein und Ihre Gewinne sichern?
Realistische Spielerfahrungen
Wenn wir die Welt von Sugar Rush erkunden, ist es wichtig, realistische Spielerfahrungen zu berücksichtigen, die auf schnellem Engagement basieren, anstatt auf langem Spiel. Viele Gamer fühlen sich von der schnellen Spielweise und den häufigen Gewinnen angezogen, was ein Gefühl von Aufregung und Dringlichkeit erzeugt. Mit fortschreitender Session können Spieler jedoch müde werden oder durch Verluste frustriert sein. Hier kommt die Fähigkeit des Spiels ins Spiel, sich an Ihren Spielstil anzupassen – können Sie Ihre Einsätze und Strategien flexibel anpassen, um immer einen Schritt voraus zu sein?
Mobile Gaming und wiederholte Besuche
Einer der größten Vorteile von Sugar Rush ist die mobile Gaming-Fähigkeit. Mit einer benutzerfreundlichen Oberfläche und nahtloser Navigation können Spieler das Spiel bequem auf ihren mobilen Geräten während kurzer, wiederholter Besuche spielen. Das macht es perfekt für Gamer, die während ihrer täglichen Pendelzeit oder beim Warten in der Schlange eine schnelle Session einlegen möchten.
Fazit: Holen Sie sich jetzt Ihren Bonus!
Wenn wir unsere Erkundung der Sugar Rush Online Slots abschließen, bleibt ein süßer Geschmack des Glücks, der schwer zu widerstehen ist. Mit seinen bunten candy-themed 7×7 Cluster Pays und cascading wins wird dieses Spiel sicher Ihr Herz erobern und Sie immer wieder zurückkommen lassen. Warum also warten? Holen Sie sich jetzt Ihren Bonus und erleben Sie den Nervenkitzel von Sugar Rush selbst!
]]>
https://catippy.com/52446-2/
Sat, 14 Mar 2026 05:43:37 +0000https://catippy.com/?p=52446Обзор игры и интерфейса
Pin Up Aviator – это простая, но привлекательная игра, в которой ставят деньги на то, как долго самолет будет держать курс.Веб‑интерфейс одинаково удобен на десктопе и мобильном устройстве.Главное окно состоит из самолёта, индикатора множителя и кнопок “Ставка” и “Стоп”.Все тексты на русском, валюты в тенге, а локальные платежные системы уже встроены.При старте раунда самолет взлетаёт, множитель растёт от 1× до 100×, а каждый тик сопровождается звуком и визуальным эффектом – это делает процесс более живым.
Механика и коэффициенты
Суть проста: ставите, ждёте, пока множитель не достигнет критической точки, и снимайте ставку.Если вы успеете до того, как самолет “сгорит”, ваш выигрыш умножается на текущий множитель.Если останетесь до конца раунда, ставка потеряна.В Pin Up Aviator средний RTP составляет около 97%, что выше, чем у большинства слотов и рулеток на казахстанском рынке.Максимальная ставка фиксирована, что позволяет контролировать риск.
Бонусы и акции
Pin Up Casino предлагает бонус за первый депозит – 100% до 500 тенге, систему лояльности с накопительными бонусами за каждую ставку и экспресс‑бонусы при достижении определённых коэффициентов.Регулярные турниры и акции дают шанс получить бесплатные ставки для игры Aviator.В 2024 году добавлен новый тип бонуса, позволяющий получать дополнительные множители при определённых условиях.
Безопасность и лицензии
Сертификация от правительства Мальты гарантирует соблюдение международных стандартов.Транзакции защищены TLS 1.3, данные игроков – паролями и двухфакторной аутентификацией.Сертифицированный генератор случайных чисел (RNG) datdadadat.com обеспечивает честность игры.Для казахстанцев доступны Сбербанк Онлайн, KaspiPay, AlfaPay и даже криптовалюты, что ускоряет пополнение и вывод средств.
Поддержка и сервис
На <online-casino-kazakhstan.space> вы найдете лучшие стратегии для pin up casino aviator review.Клиентская служба работает круглосуточно через чат‑боты и живых операторов.На русском языке есть FAQ, инструкции и руководство по безопасной игре.В 2025 году внедрён ИИ, который мгновенно анализирует запросы и предлагает персональные решения, повышая удовлетворённость пользователей.
Платежные методы и вывод средств
Pin Up Casino поддерживает более 20 способов пополнения и вывода: банковские карты, электронные кошельки, банковские переводы и криптовалюты.Минимальная сумма вывода – 200 тенге, а время обработки обычно не превышает 48 часов.В 2023 году добавлена поддержка QR‑платежей через мобильные приложения.
Таблица сравнения показателей
Показатель
Pin Up Aviator
Крупный слот (на рынке)
Рулетка (на рынке)
RTP (возврат игроку)
97%
95%
96%
Максимальная ставка (тенге)
10 000
5 000
2 000
Минимальная ставка (тенге)
10
50
20
Средний множитель
25×
20×
10×
Время раунда (сек.)
30-45
60-90
30-45
Платёжные методы
20+
15+
12+
Поддержка локальных валют
Да (тенге)
Нет (USD)
Нет (EUR)
Показатели демонстрируют преимущества Pin Up Aviator по сравнению с традиционными слотами и рулеткой.
10 малоизвестных фактов о Pin Up Aviator
Первые тесты в 2022 году в Казахстане получили высокую оценку за простоту и прозрачность.
В 2024 году появился режим “Мульти‑старт” – до 5 раундов одновременно.
Криптовалютный бонус в 2025 году давал дополнительный множитель за ставки в Bitcoin или Ethereum.
Скрытая функция “Тренажёр” позволяет новичкам практиковаться без реальных денег.
Адаптивный дизайн автоматически подстраивается под ширину экрана, удобен как на смартфонах, так и на ноутбуках.
Статистика множителей видна в реальном времени, повышая прозрачность.
Сотрудничество с казахстанскими инфлюенсерами через живые трансляции.
В 2023 году запущена программа “Партнёры” – привлечение новых игроков приносит бонусы.
AI‑ассистент помогает новичкам определять оптимальные стратегии ставок.
Экологический аспект: серверы находятся в сертифицированном “зеленом” дата‑центре, уменьшая углеродный след.
Если хотите попробовать Игры Pin Up Aviator, переходите по ссылке https://pinup-aviator.fun/.
А как вы думаете, стоит ли попробовать Pin Up Aviator? Делитесь мнением в комментариях!
]]>Online Mobile Casino
https://catippy.com/online-mobile-casino/
Sat, 14 Mar 2026 05:40:18 +0000https://catippy.com/?p=52444A mobile online casino lets you enjoy your favourite games while traveling. While on the bus or waiting in the doctor’s office, you can spin some slots or try your luck playing blackjack.
While online casinos can be enjoyable and convenient, it is crucial to play responsibly. Make sure you reserve time for other activities and only deposit money you are bonus crab registrierungsbonus CH able to afford losing.
Mobile compatibility
Mobile casinos are a fantastic option to play online casino games with the comfort of your mobile device. They are easy to use, fast and have an excellent selection of games to play. They provide more bonuses and promotions than brick-and-mortar casinos.
Most modern mobile devices are compatible with online gambling websites and apps. You can find most mobile casinos online in the App Store for iPhone or the Google Play Store for Android tablets and smartphones. You can also visit the casino website in your mobile browser and create an home screen shortcut to allow quick access to the website.
Download the casino app to improve your gambling experience. Apps offer biometric sign-in and enhanced security.
No download required
Mobile casinos are today so well-optimized that they can be played without the need to download an application. You can now sign in, withdraw money and make deposits in mere minutes and begin playing right away!
No software is required to play the entire game selection from table games to the most recent slots. You can log in to your account on the casino’s site using your mobile browser.
Certain mobile casino sites online also offer offline play. This means you can play games even if you don’t have an internet connection. This is a great choice for those with a limited amount of storage on their device!
Instant withdrawals
In addition to the ability to play at any time, anywhere mobile casinos also provide the convenience of instant withdrawals. This feature is becoming more and more crucial for players since they want a smooth and seamless gaming experience.
Based on the banking method, instant withdrawal casino online is possible within hours or even in minutes. The fastest options are typically cryptocurrencies and eWallets, while checks and bank transfers may take longer.
If you 24 casino registrierungsbonus want to get into the game of mobile casino Find a reliable site and sign up an account using real information. Download the mobile casino application on your mobile device, and then follow the steps on screen to make a shortcut to your home screen. You can then select a name for the shortcut and then add it to your home screen.
Bonuses
Mobile casino games are becoming increasingly popular, thanks to their ease of access and convenience. Players can play their favorite casino games on the go, whether in their office break or while waiting for friends in a cafe.
Casino bonuses offer an extra incentive to play and can aid players in maximizing their winnings. They are typically offered as part of welcome packages or weekly and monthly promotions. They may include a range of free spins on various casino slots, as and deposit match bonuses.
It is crucial to remember that casino bonuses come with certain requirements. These can include wagering requirements, minimum deposits and expiry dates. This is why it is crucial to study the terms and conditions thoroughly before claiming the bonus.
Safety
Mobile casino operators on the internet employ a variety of security measures to ensure their players are safe. To ensure that hackers are not able to gain access to player information and money, mobile casino operators utilize SSL encryption and a secure connection. Before giving players the ability to play, they must verify their identity or passport. This helps in preventing under-age gambling and committing fraud.
Mobile casinos on the internet also load faster than apps that are downloaded. This is crucial if you are playing on a public WiFi network or a slow internet connection. It’s also less draining on the battery than downloading a casino app.
Mobile casinos on the internet are a risky method to bet. It is easy to lose track of time while playing on your phone and could lead to problems with gambling. It is important to only gamble at reputable mobile casinos and to take responsibility when playing.
]]>Ottimizzare il bodybuilding: usare gli steroidi anabolizzanti in modo sicuro ed efficace
https://catippy.com/ottimizzare-il-bodybuilding-usare-gli-steroidi-anabolizzanti-in-modo-sicuro-ed-efficace/
Sat, 14 Mar 2026 05:39:42 +0000https://catippy.com/?p=52442Il bodybuilding è uno sport che richiede impegno, dedizione e una buona strategia per ottenere risultati visibili. Negli ultimi anni, l’uso di steroidi anabolizzanti è diventato un argomento controverso ma anche molto discusso tra i bodybuilder, sia principianti che esperti. Usati in modo responsabile, possono offrire vantaggi significativi, ma è fondamentale comprendere come utilizzare questi composti in modo sicuro ed efficace.
Acquista steroidi anabolizzanti da un fornitore affidabile nello shop anabolizzantisteroidi.com – garantiamo qualità, discrezione e consegna rapida.
1. Comprendere gli steroidi anabolizzanti
Gli steroidi anabolizzanti sono composti sintetici che imitano gli effetti del testosterone nel corpo. Possono aiutare a aumentare la massa muscolare, migliorare la forza e accelerare il recupero. Tuttavia, è importante sapere che l’uso improprio può portare a effetti collaterali indesiderati e rischi per la salute.
2. Tipi di steroidi anabolizzanti
Esistono diverse tipologie di steroidi, ognuna con le proprie caratteristiche. Ecco alcuni dei più comuni:
Testosterone: il composto base per molti cicli di steroidi.
Nandrolone: noto per il suo utilizzo nel guadagno di massa muscolare.
Stanozololo: popolare per le sue proprietà relativamente più sicure.
Oxandrolone: spesso usato per il suo effetto di aumento del peso senza ritenzione idrica eccessiva.
3. Efficacia e sicurezza
Per utilizzare gli steroidi in modo efficace, è cruciale pianificare un ciclo ben strutturato e informarsi sui possibili effetti collaterali. Ecco alcuni suggerimenti per una pratica sicura:
Consultare un medico o un professionista della salute prima di iniziare.
Iniziare con dosaggi bassi e aumentare gradualmente per valutare la tolleranza.
Non superare mai le dosi raccomandate e non prolungare il ciclo oltre i tempi consigliati.
Implementare un ciclo di recupero post-ciclo per ripristinare i normali livelli ormonali.
4. Conclusione
Utilizzare gli steroidi anabolizzanti nel bodybuilding può essere una strategia per ottimizzare i risultati, ma deve essere fatto con cautela e responsabilità. L’educazione, la pianificazione e l’uso consapevole sono elementi chiave per massimizzare i benefici e minimizzare i rischi. Scegliere un fornitore affidabile e adottare le migliori pratiche è fondamentale per garantire la tua salute e il successo nel tuo percorso di bodybuilding.
]]>Le Bandit Slot Game: Schatzoeken met Smokey de Wasbeer
https://catippy.com/le-bandit-slot-game-schatzoeken-met-smokey-de-wasb/
Sat, 14 Mar 2026 00:30:14 +0000https://catippy.com/?p=52426De Aantrekkingskracht van Le Bandit
Le Bandit is een 6×5 cluster-pays online slot dat de harten heeft veroverd van veel spelers met zijn charmante wasbeerpersonage, Smokey. Gevestigd op een achterstraatje bij een schatzoektocht, belooft dit spel een opwindende ervaring met cascading wins, free spins en speciale functies. Terwijl we de wereld van Le Bandit verkennen, laten we onderzoeken waarom dit spel zo populair is onder slots liefhebbers.
Nieuwe Spelers Aantrekken
Het thema en ontwerp van het spel zijn ongetwijfeld opvallend. Smokey’s ondeugende grijns en het neon-verlichte stadsbeeld creëren een levendige sfeer die spelers aantrekt. De soundtrack van het spel, met zijn vrolijke en energieke deuntje, draagt verder bij aan de opwinding. Maar het zijn niet alleen de visuals die Le Bandit aantrekkelijk maken – het gameplay zelf is waar de echte magie gebeurt.
De Gameplay Beheersen
Inzicht in Cluster Pays
Een van de belangrijkste functies van Le Bandit is het cluster-pays systeem. In tegenstelling tot traditionele slots, waar wins worden bepaald door specifieke paylines, belonen cluster pays spelers voor het groeperen van identieke symbolen in een cluster. Deze mechanic vereist een andere aanpak van gameplay, omdat spelers zich moeten richten op het creëren van clusters in plaats van het lijnrecht zetten van specifieke symbolen.
In Le Bandit kunnen clusters worden gevormd door vijf of meer identieke symbolen in elke richting – horizontaal of verticaal – te groeperen. Hoe meer symbolen in een cluster, hoe hoger de beloning. Dit systeem voegt een strategische laag toe aan het spel, omdat spelers moeten overwegen hoe ze het beste clusters kunnen maken en hun winst kunnen maximaliseren.
De Spelverloop Beheren
Met zijn snel tempo en frequente wins kan Le Bandit een verslavende ervaring zijn. Spelers bevinden zich vaak in een flow, jagen op grote winsten en proberen nog grotere clusters te maken. Het is echter essentieel om het spelverloop te beheren en niet meegesleept te worden door de opwinding.
Meestal zullen spelers korte, intensieve sessies ervaren die gericht zijn op snelle resultaten. Ze spelen een paar minuten, proberen een grote winst te maken, en nemen dan een pauze. Dit patroon is gebruikelijk onder Le Bandit-spelers, die vaak terugkeren naar het spel na een korte rust, klaar om hun schatzoektocht voort te zetten.
Risico en Beloning Omarmen
Risicotolerantie Beoordelen
Spelers die van Le Bandit genieten, hebben vaak een hoge risicotolerantie. Ze zijn bereid om weloverwogen risico’s te nemen om grote winsten te creëren, zelfs als dat betekent dat ze een deel van hun saldo verliezen in het proces. Deze mindset is kenmerkend voor spelers die houden van snel tempo spellen zoals Le Bandit.
Bij het spelen van Le Bandit bevinden spelers zich vaak in situaties waarin ze moeten beslissen of ze door willen gaan of hun winst willen opnemen. Hier komt risicotolerantie om de hoek kijken – spelers moeten hun risicobereidheid inschatten en geïnformeerde beslissingen nemen over hoe verder te gaan.
Strategieën voor Succes
Hoewel er geen gegarandeerde manier is om te winnen bij Le Bandit, kunnen spelers verschillende strategieën toepassen om hun kansen op succes te vergroten. Een aanpak is om zich te richten op het maken van kleinere clusters, wat kan leiden tot vaker voorkomende wins en een hogere totale opbrengst.
Een andere strategie is om gebruik te maken van de free spins-functie van het spel, die een aanzienlijke boost kan geven aan de winst. Door hun spins verstandig te beheren en clusters te maken tijdens deze functie, kunnen spelers hun rendement maximaliseren en hun kansen op grote winsten vergroten.
Een Betoverende Ervaring
Betrokken raken
De meeslepende ervaring van Le Bandit is onderdeel van wat het zo aantrekkelijk maakt. Het thema en ontwerp van het spel brengen spelers naar een levendig stadsbeeld, waar ze kunnen genieten van een spannende schatzoektocht met Smokey de wasbeer.
Spelers bevinden zich vaak volledig in het spel, met verhoogde zintuigen terwijl ze jagen op grote winsten. Dit niveau van betrokkenheid is kenmerkend voor spellen zoals Le Bandit, die een meeslepende ervaring bieden die spelers aantrekt en hen keer op keer terug laat komen.
Waarom Spelers van Le Bandit Houden
Motivatie van Spelers
Dus, wat drijft spelers om van Le Bandit te houden? Voor velen is het het gevoel van opwinding en anticipatie dat elke spin met zich meebrengt. Het snelle tempo van het spel en de frequente wins zorgen voor een opwindende ervaring die spelers betrokken houdt.
Spelers waarderen ook de eenvoud van het spel, wat het gemakkelijk maakt om te leren en te spelen. Met zijn cluster-pays systeem en eenvoudige gameplay-mechanica is Le Bandit toegankelijk voor spelers van alle vaardigheidsniveaus.
Conclusie: Ontvang Nu Je Bonus!
Zoals we in dit artikel hebben besproken, biedt Le Bandit een meeslepende ervaring met snel tempo gameplay en frequente wins. Het cluster-pays systeem vereist een andere aanpak, maar beloont spelers met grotere prijzen.
Als je op zoek bent naar een spel dat spanning en anticipatie biedt bij elke spin, is Le Bandit zeker de moeite waard om te proberen. Dus waarom wachten? Ontvang nu je bonus en begin vandaag nog aan je schatzoektocht met Smokey de wasbeer!
]]>Código promocional 1win: válido en Marzo 2026
https://catippy.com/h1-codigo-promocional-1win-valido-en-marzo-2026-3/
Fri, 13 Mar 2026 23:54:24 +0000https://catippy.com/?p=52424Para garantizar una gestión transparente, la plataforma divide el capital del usuario de manera que sea sencillo diferenciar el dinero real de los fondos promocionales. Al entrar en la cuenta de bonificación del casino 1win, podrás visualizar con claridad los montos que todavía están sujetos a requisitos de apuesta antes de transformarse en saldo retirable. El 1win bono de bienvenida destaca como la oferta principal de la marca, otorgando un porcentaje adicional sobre los primeros depósitos realizados tras completar el proceso de registro. Estas bonificaciones están estructuradas para permitir que el usuario explore las diversas verticales de entretenimiento disponibles con un respaldo adicional en su cuenta de bonificación. El sistema de bonificación de 1win incluye ofertas tanto para apuestas deportivas como para juegos de casino, con términos y condiciones específicos para cada promoción. Los nuevos usuarios pueden beneficiarse de un generoso paquete de bienvenida distribuido en los primeros cuatro depósitos.
Ofertas de bienvenida
Toma en cuenta que este funciona tanto para la sección de apuestas deportivas y casino. El código se encuentra alojado en la web, por lo que lo encontrarás en la página principal. Los jugadores de casino pueden acceder a torneos semanales con premios garantizados. Estos eventos permiten competir por posiciones en tablas de clasificación donde los mejores puestos reciben bonus casino 1win adicionales o dinero real.
Para usuarios frecuentes, el código también puede activar niveles especiales en el programa de fidelidad. Estos niveles permiten acumular 1win coins más rápidamente, que posteriormente se pueden cambiarlas por dinero real o utilizarlas para apostar en diferentes secciones. Una vez procesado el depósito, el 1win bonus aparece automáticamente en el saldo de bonificaciones. Los usuarios de 1win pueden verificar el estado de su bono en la sección “Mi cuenta” donde se muestra el progreso de los requisitos de apuesta.
Realiza cuatro depósitos para conseguir todos los incentivos de bienvenida. Utilícelos en los juegos con RTP más alto o en los partidos deportivos más calientes. Introduzca su correo electrónico/número de teléfono y su dirección de correo electrónico para iniciar sesión. Para activarla, cree un boleto de apuesta exprés con 5 a 11+ resultados. Utilizar sabiamente las bonificaciones 1win existentes puede aumentar significativamente su ventaja.
Bono 1Win, códigos promocionales y ofertas
Para jugar a juegos de casino con ventajas adicionales, es importante revisar las promociones activas diariamente.
Los nuevos clientes pueden conseguir un cautivador 1Win bono de bienvenida de +500% en sus 4 primeros depósitos.
Las promociones regulares incluyen tiradas gratis, bonos de recarga y códigos promocionales únicos para acceder a ofertas exclusivas.
Si eres de los jugadores que disfrutas el juego móvil, en la web tienen dispuestas para ti las 1win aplicaciones móviles, una forma de utilizar el casino y las apuestas desde tus dispositivos Android e iOS.
Cada método tiene tiempos de procesamiento y límites específicos que pueden afectar la disponibilidad inmediata del bono en la cuenta del usuario.
El dinero puede ser utilizado en los títulos de tu preferencia y las ganancias van directamente al bankroll. El rakeback puede generar grandes oportunidades de ganancias a los jugadores sin realizar más estrategias adicionales. Este bonus 1win para registro establece a los jugadores la posibilidad de tener varias opciones de juegos con tan solo realizar los siguientes pasos de manera correcta.
Puedes introducir el código durante el proceso de registro en el campo correspondiente o más adelante desde la sección de bonos en tu cuenta personal. 1win casino Colombia ha actualizado su catálogo de bonificaciones para ofrecer mayor valor a sus usuarios. Las nuevas promociones incluyen torneos mensuales con premios garantizados, bonus por referidos mejorados y ofertas especiales en casino y póquer. Esta bonificación del 500% se distribuye de manera escalonada a través de los primeros cuatro depósitos realizados en la plataforma. El bono de 1win para nuevos jugadores representa una de las ofertas más competitivas disponibles en el 1win mercado colombiano de apuestas y casino online. Para reclamar tu bono debes ingresar el código promocional 1win en la casilla correspondiente.
]]>Casinos online en España Ranking top para jugar seguro el 2024
https://catippy.com/casinos-online-en-espana-ranking-top-para-jugar-2/
Fri, 13 Mar 2026 16:58:02 +0000https://catippy.com/?p=51025
Dichas licencias son otorgadas por la Dirección General de Ordenación del Juego (DGOJ), el órgano regulador del juego online en España. Todos los casinos trabajan con los métodos de pago más habituales, pero no todos los casinos trabajan con todas las opciones disponibles en la actualidad, por lo tanto en la reseña de cada casino aparece el listado de los métodos de retirada y depósito que se ofrecen. Dentro de la modalidad de casino en vivo se analizan los juegos ofrecidos, qué proveedores de tecnología se usan y que otras características poseen, como chat o mini juegos, entre otras. Estas preguntas son un ejemplo de todos los aspectos que se tienen en cuenta a la hora de evaluar que juegos ofrece el casino, y no solo qué juegos, sino qué modalidad de juegos ofrece y cuáles son los proveedores de cada uno de los juegos ofrecidos. A la hora de registrarse en un casino online hay que proporcionar siempre información personal veraz, que será solicitada durante el proceso de registro.
Nunca dejo pasar un bono de casino gratis sin depósito
Ventajas del bono de Pastón Casino Ventajas del bono de Casino Barcelona Ventajas del bono de Sportium Casino
Sin embargo, hay algunas cosas que debes saber antes de empezar a jugar. Además, son muy divertidas y dinámicas, y con las que cualquier usuario de casino puede pasar un buen rato. Luego de esto, selecciona la modalidad que prefieras y realiza tu primera apuesta para comenzar a jugar. Después de seguir todos los pasos, podrás realizar tu primer depósito.
Si encontraste la mejor app de casino para ganar dinero real, solo necesitas instalarla en tu dispositivo móvil.
Aquí nos centramos en los jugadores, por eso nuestro objetivo es ofrecerles reseñas honestas.
Con Pastón Casino tendrás opción para conseguir bonos de registro y bonos de bienvenida.
El casino cuenta con un programa VIP de cinco niveles, con diferentes privilegios en cada etapa.
¿Por qué puedes confiar en nuestra información y listado de bonos?
Aceptar un bono durante el registro puede activar bloqueos automáticos en el momento de solicitar una retirada. Incluso en un casino pago inmediato, los plazos finales dependen del operador y de la rapidez con la que se complete este proceso. Cuando solicitas tu primer retiro, el casino suele activar automáticamente el control de identidad. Estos aspectos pueden afectar tanto la rapidez del proceso como la disponibilidad real del dinero. Según nuestra opinión, este tipo de ofertas aporta un valor añadido para aquellos usuarios que priorizan la rapidez.
Aquí nos centramos en los jugadores, por eso nuestro objetivo es ofrecerles reseñas honestas. A través de un correo email, el casino comprobará tu mayoría de edad y que tus documentos sean reales. Tras esta nueva ley, para obtener un bono de bienvenida, tenías que verificar tu registro. Y de igual forma, ha promovido la idea de jugar responsablemente, creando incluso programas de autoexclusión. Ya que estos te prometían alargar tus horas de juego al poder disponer de saldo extra. Los requisitos de apuesta más bajos son, en consecuencia, más accesibles para los jugadores que desean limitar su gasto.
Juegos Destacados en Malina Casino
Con ella, usted confirma que conoce los riesgos del juego en línea y que no se encuentra excluido de participar en este tipo de actividades. Todas las páginas de nuestra marca se actualizan de forma sistemática con las últimas ofertas de casinos para asegurar la entrega oportuna de la información. Recibe en tu correo una lista de nuevos casinos y promociones personalizadas.
La ruleta en vivo, por ejemplo, permite a los jugadores disfrutar de una experiencia auténtica al predecir el resultado de la bolita en una rueda numerada. Los jugadores pueden aprovechar su tiempo libre para disfrutar de sus juegos favoritos y establecer una conexión sin importar dónde se encuentren. La calidad gráfica y la compatibilidad con varios dispositivos son características importantes que mejoran la experiencia de usuario en las aplicaciones de casinos móviles. Estas aplicaciones de software están diseñadas para ser intuitivas y fáciles de usar, asegurando que los jugadores puedan disfrutar de una experiencia de juego sin interrupciones. Los monederos electrónicos como Skrill y Neteller también son opciones seguras, ya que no requieren que los jugadores ingresen sus datos bancarios directamente en los casinos.
Los casinos que pagan rápido que te hemos recomendado ofrecen varios métodos de pago eficientes como PayPal, Skrill, Neteller o las tarjetas Visa y Mastercard. Verifica siempre estas credenciales en el pie de página del operador para asegurarte de que el casino cumple con los estándares de seguridad y transparencia que marca la legislación. Además, cuentan con selecciones de juegos de primer nivel y excelentes versiones móviles, promociones o servicios de atención al cliente, entre otros aspectos. En esta página, hemos querido traerte toda la información necesaria sobre los casinos que pagan al instante, aunque es posible que aún tengas alguna duda al respecto. Para identificar casinos con retirada inmediata autorizados, como los que te recomendamos, debes buscar el sello de la DGOJ en el pie de página de la web del operador. Todos los casinos que pagan al instante que te proponemos ofrecen diversas opciones seguras que te permiten acceder a tus ganancias rápidamente y facilitan una gestión financiera veloz, fiable y eficiente.
Un bono de casino te da más saldo para jugar, pero ata tu depósito y ganancias a condiciones estrictas. Retirar tus ganancias es el objetivo final de jugar en un casino con dinero real, un proceso que requiere una aprobación por parte del operador para garantizar la seguridad. Más casino españa allá de los clásicos, los casinos ofrecen un mundo de posibilidades, desde emocionantes variantes de póker y video bingo hasta juegos con botes progresivos que prometen premios millonarios. El blackjack online es el juego de cartas por excelencia en los casinos de España, un clásico que combina habilidad, estrategia y suerte. Las tragaperras online son las reinas indiscutibles de los casinos españoles, atrayendo a jugadores por su sencillez y potencial de premios como por ejemplo la tragaperras Cleopatra. Tras un análisis exhaustivo de todos los casinos con licencia de la DGOJ en España, hemos destilado la oferta para presentarte los tres mejores.
Señales de alerta de casinos online poco fiables
Una vez estés en el casino, solo deberás registrarte colocando los datos que te soliciten. El regalo también puede ir acompañado de avances gratis en ciertas tragaperras. Deberás escribirlo al terminar el registro, o a la hora de hacer tu primer depósito. En caso de necesitar un código promocional, el casino o nosotros te lo especificaremos.
]]>die besten Kasino Spiele im Internet
https://catippy.com/die-besten-kasino-spiele-im-internet-2/
Fri, 13 Mar 2026 07:41:29 +0000https://catippy.com/?p=51974
Tisch- und Casinospiele sind in ihrem Portfolio nicht enthalten. Seit 2003 suchen und finden wir die besten Online Casinos für euch, bewerten sie fair, zeitgemäß und präsentieren sie euch schließlich in unserer Liste der besten Online Casinos. Die besten Online Casinos sind sicher, funktionieren tadellos und bieten euch ein deutsche casinos hinreißendes Spielerlebnis. Schau doch auch mal in unserem Casinospiele-Wiki vorbei und mach dich schlau rund um’s Thema beste Online Casinos, Online Casino Spiele, Regeln, Tipps, etc. Wir haben für dich Regeln, Strategien und Techniken für alle gängigen Glücksspiele zusammengestellt.
Damit ein Casino im Test wirklich gut abschneidet, sollte es eine eigene Kategorie für die Tischspiele anbieten, oder diese zumindest über die Suchleiste auffindbar machen. Auch Slots mit verschiedenen Funktionen und Bonusrunden sollten angeboten werden, damit du immer das spielen kannst, worauf du Lust hast. Renommierte Lizenzen sind beispielsweise die MGA Lizenz aus Malta, die Lizenz aus Curacao oder die deutsche Glücksspiellizenz aus Darmstadt. Neue Spieler im Monro Casino können sich auf einen beeindruckenden 150% Willkommensbonus bis zu 600 € freuen, der mit einer Mindesteinzahlung von 20 € aktiviert wird. Neue Plattformen spielen in einer anderen Liga wenn es um Schnelligkeit geht! Großzügige Willkommensboni und eine umfangreiche Spielauswahl mit neuen Games sind spannende Argumente, Newcomer zu testen.
Beste Online Casinos in Deutschland 2026 im Überblick
100% Bis Zu 500 € + 200 Freispiele + 1 Bonus Crab
Mit der Anzahl an deutschen Online Spielotheken, ist es leicht sich mit dem Online Casino Vergleich überwältigt zu fühlen.
In unserem Casino Bonus Test spielt nicht nur die Höhe eines Casinobonus eine Rolle, sondern vielmehr auch damit verknüpfte Bonusbedingungen und Regeln.
Nehmen Sie an Glücksspielen mit einem 250% Willkommenspaket bis zu €3000 + 1000 FS teil Fangen Sie an zu spielen mit einem exklusiven Willkommenspaket bis zu €3550 + 175 FS Wie bereits erwähnt, verwenden wir die neueste Technologie, um Ihnen einen dynamischen täglichen Feed zu bieten und daher befinden sich unsere Rankings immer auf dem neuesten Stand.
Beste Online Casinos Deutschland 2026 – Unsere Erfahrung
Wie das geht und was du dafür im Spielcasino erledigen musst, erklären wir dir in unserem Online Casino Test und Erfahrungen. Als Willkommensgeschenk erwartet dich entweder gratis Bonusgeld oder gratis Freispiele für bestimmte Spielautomaten. Viele Anbieter, für die wir nach unserem Online Casino Test eine Bewertung und Casinoempfehlung aussprechen, bieten dir schon für deine Registrierung einen Bonus an. Denn wir helfen dir mit unseren Online Spielcasino und Casino Bonus Empfehlungen kompetent und seriös weiter. In unserer Liste mit dem Vergleich für deutsche Online Casinos wird dir der Casino Bonus für neue Spieler angezeigt.
Das sind die Alleinstellungsmerkmale mit welchen dieses deutsches Casino Online versucht seine Konkurrenten alt aussehen zu lassen. Wir haben für dich jedes deutsches Online Casino umfangreich getestet. Egal ob neue deutsche Online Casinos 2026 oder alte Hasen! Die besten Online Casinos in Deutschland bieten dir auch ein Angebot der Kategoriebester Online Casino Bonus.
Diese deutsche Haltung wurde auch aktiv von der Europäischen Union kritisiert. Im Jahr darauf folgte Intercasino, das häufig fälschlicherweise als erstes Online-Casino genannt wird. Ein Ansatz ist das Anklicken eines Siegels zum Thema, sofern ein solches auf der Website eines Casinos zu finden ist. Die Bedingungen zu einem Willkommensbonus können recht deutlich variieren.
Vertrauen durch Expertise: Warum Gambling.com nur lizenzierte Anbieter empfiehlt
Neue Kunden beginnen mit einem 100% bis 500 € Willkommensbonus und 200 Gratis-Spins. Die Spielauswahl ist sehr umfangreich, top RTPs warten. Unser Online Casino Test hat zudem gezeigt, dass sich jeder Spieler im Monat bis zu 300 Freispiele sichern kann. Mit dem 200% bis 7.500 € Willkommensbonus setzt das Instant Casino ein Glanzlicht. In unserem umfangreichen Online Casino Vergleich haben sich zehn Online Spielotheken für deutsche Spieler als besonders empfehlenswert gezeigt.
Unsere Experten spielen zufällig gewählte Slots kostenlose Drehungnen und um Geld. Das Niveau und die Zuverlässigkeit des Onlinecasinos werden anhand der Analyse seiner Stärken und Schwächen bestimmt. Eine der Hauptaufgaben jeden Spielers ist ein zuverlässiges und ehrliches Onlinecasino zu finden. Um die besten Slots zu spielen brauchst Du bei uns keine lästige App zu installieren. Bei NOVOLINE bieten wir Dir Visa, Mastercard, Soforteinzahlung, Klarna, PaysafeCard, Apple Pay und PayPal als Zahlungsmethoden an. Gerade deshalb steht Max.Bet bei modernen online spielautomaten für Komfort, Dynamik und echtes Spielgefühl.
Wildz Testergebnis
Die Top-Betreiber verfügen im Gegensatz dazu aber sogar über kostenlose, deutsche 0800-Nummern. Die Mitarbeiter müssen alle casinointernen Abläufe kennen, technische Grundkenntnisse haben und zudem Auskünfte zu den einzelnen Spielregeln geben können. Wer einfach eine Erreichbarkeit schafft, jedoch mit casinofremden Personal, kann sich die Support eigentlich direkt sparen. Als Minimal-Deposit setzen die Spielanbieter meist 10 Euro oder 20 Euro an.
Ihr müsst trotzdem ein paar Dinge beachten, wenn ihr Glücksspiele im Internet um echtes Geld spielen möchtet. Insgesamt bieten deutsche Online Casinos und Slot Anbieter unterschiedliche Zahlungsmethoden an, um alle Spielerbedürfnisse abzudecken. Die Zahlungsmethoden in deutschen Online Casinos und Spielotheken sind vielfältig, sicher und schnell. Aufgrund der deutschen Glücksspielregulierung gibt es aktuell nur das Online Casino der Spielbanken-Bayern. Seit der Glücksspielregulierung 2021 ist es so, dass die einzelnen Bundesländer eigene Lizenzen für “echte” Online Casinos mit Tischspielen in Deutschland vergeben.
FAQ – Häufige Fragen zu neue Online Casinos Deutschland
Beispielsweise sind Freispiele ideal für Slot-Liebhaber, während ein Einzahlungsbonus besser für diejenigen geeignet sein könnte, die planen, regelmäßig zu spielen. Einige bieten Freispiele, kleine Startboni oder zumindest Demo-Versionen der Spiele. Neue Online Casinos mit Freispielen bieten 2026 spannende Möglichkeiten für dich, können aber auch Herausforderungen mit sich bringen.
So gibt es Freispiele Modi, die durch bestimmte Symbole auf den Walzen ausgelöst werden. Slots bieten nicht nur thematisch, sondern auch im Hinblick auf den Unterhaltungswert sehr große Abwechslung. Im Livecasino entscheiden physikalische Zufälle über Gewinn oder Verlust – zum Beispiel der Weg der Roulettekugel im Kessel. In jedem Fall relevant ist die Unterscheidung zwischen softwarebasierten Spielen und dem Livecasino. Andere setzen auf Tisch- und Kartenspiele wie Roulette, Blackjack und Poker. Manche Spieler präferieren Automatenspiele aufgrund der großen Abwechslung.
]]>Pin Up Casino Review With A 5 5 Rating
https://catippy.com/h1-pin-up-casino-review-with-a-5-5-rating-h1-4/
Thu, 12 Mar 2026 22:55:45 +0000https://catippy.com/?p=52400You only need pinup to visit the site of the gambling club and find there a section with mobile versions. Within minutes, the program will be running and installed on your device or tablet. The Pin Up Casino app brings over 10,000 games to players, powered by 70+ providers. Verification ensures compliance with regulations and protects users from unauthorized access. By completing this process, players can enjoy smooth transactions, faster withdrawals, and a secure gaming experience. Pin Up Casino India has established itself as the premier choice for discerning Indian players who demand excellence in online gaming and sports betting.
For Android users, the Pin Up Casino APK download is available as a compact 9.8 MB file directly from the official site. Some payment options can have their own limits, different from those of the casino, but that information is not posted on the site. You can download it from the official website without any hidden charges or in-app purchases.
You can play this kind of game in both RNG-based and live casino modes.
You should go to the portal website, complete a questionnaire, and confirm the account.
Pin Up Casino is a licensed online gambling platform operated by Carletta N.V.
Additionally, new players receive a package of free spins on selected slot machines, allowing you to experience premium games without additional cost.
The Particular core challenge for typically the player is usually in purchase to forecast where typically the golf ball will property upon the rotating tyre.
Mobile App Vs Mobile Version
All the games in this category are provided by the most popular software vendors, including Ezugi, Evolution Gaming, Pragmatic Play, Lucky Streak, Playtech, and others. All games in this category that you can find on the Pin Up Casino website have both standard and additional features. Some of them include in-game free spins, bonus rounds, multipliers, wild and scatter symbols, etc. These requirements ensure that users can enjoy a smooth gaming experience without any interruptions. While deposits are typically instant, withdrawal times may vary depending on the chosen method.
Live Dealer Games
Each presenting game is subject to regulations by international authorized regulators to control fairness of algorithms. Maximum limit of promotion is 4,50,000 INR, meaning it is impossible to claim higher amount even with equivalent deposit. You’ll find games from NetEnt, Pragmatic Play, Evolution, Play’n GO, Ezugi, Betsoft, and more.
Read it, and perhaps here you will find the answer to your question. In addition, the Pin Up bookmaker provides measures to control bets within the limits of a responsible gaming obligation. Top-up transactions are available once you log in to your account. As for withdrawals from Pin Up online casino, their time depends on a particular banking option you choose. You can play this kind of game in both RNG-based and live casino modes.
Pin Up is one of the best sites for sports betting for Indian bettors, where you can place a Pin Up bet on top sporting events. Pin Up casino sources its games from top casino gaming software developers. Brands that are represented on the website include Evolution Gaming, Play’N Go, Playtech, Playson, NetEnt, and Novomatic.
Our platform features a wide variety of sports and events, allowing you to place your Pin up bet confidently and enjoy the thrill of the game. Below is a quick overview of the sports betting options available at Pin-up India. The casino’s brand name is a reference to popular mid-20th century graphic style. The idea of this art movement is to depict half-naked attractive women, as if they came straight from covers of magazines. In addition to an extensive range of entertainment, project will please users with profitable loyalty program, regular tournaments, and only licensed slot machines.