comparison regexes.yaml @ 30:f2691b83bafa

update to ES 0.90.0 and logstash 1.1.12
author Carl Byington <carl@five-ten-sg.com>
date Fri, 10 May 2013 15:01:48 -0700
parents
children
comparison
equal deleted inserted replaced
29:b37cde5bac95 30:f2691b83bafa
1 user_agent_parsers:
2 #### SPECIAL CASES TOP ####
3
4 # must go before Firefox to catch SeaMonkey/Camino
5 - regex: '(SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
6
7 # Firefox
8 - regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?'
9 family_replacement: 'Pale Moon (Firefox Variant)'
10 - regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
11 family_replacement: 'Firefox Mobile'
12 - regex: '(Fennec)/(\d+)\.(\d+)(pre)'
13 family_replacement: 'Firefox Mobile'
14 - regex: '(Fennec)/(\d+)\.(\d+)'
15 family_replacement: 'Firefox Mobile'
16 - regex: 'Mobile.*(Firefox)/(\d+)\.(\d+)'
17 family_replacement: 'Firefox Mobile'
18 - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
19 family_replacement: 'Firefox ($1)'
20 - regex: '(Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)'
21 family_replacement: 'Firefox Alpha'
22 - regex: '(Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)'
23 family_replacement: 'Firefox Beta'
24 - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(a\d+[a-z]*)'
25 family_replacement: 'Firefox Alpha'
26 - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(b\d+[a-z]*)'
27 family_replacement: 'Firefox Beta'
28 - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
29 family_replacement: 'Firefox ($1)'
30 - regex: '(Firefox).*Tablet browser (\d+)\.(\d+)\.(\d+)'
31 family_replacement: 'MicroB'
32 - regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
33
34 # e.g.: Flock/2.0b2
35 - regex: '(Flock)/(\d+)\.(\d+)(b\d+?)'
36
37 # RockMelt
38 - regex: '(RockMelt)/(\d+)\.(\d+)\.(\d+)'
39
40 # e.g.: Fennec/0.9pre
41 - regex: '(Navigator)/(\d+)\.(\d+)\.(\d+)'
42 family_replacement: 'Netscape'
43
44 - regex: '(Navigator)/(\d+)\.(\d+)([ab]\d+)'
45 family_replacement: 'Netscape'
46
47 - regex: '(Netscape6)/(\d+)\.(\d+)\.(\d+)'
48 family_replacement: 'Netscape'
49
50 - regex: '(MyIBrow)/(\d+)\.(\d+)'
51 family_replacement: 'My Internet Browser'
52
53 # Opera will stop at 9.80 and hide the real version in the Version string.
54 # see: http://dev.opera.com/articles/view/opera-ua-string-changes/
55 - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?'
56 - regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)'
57 family_replacement: 'Opera Mobile'
58 - regex: 'Opera Mobi'
59 family_replacement: 'Opera Mobile'
60 - regex: '(Opera Mini)/(\d+)\.(\d+)'
61 - regex: '(Opera Mini)/att/(\d+)\.(\d+)'
62 - regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?'
63
64 # Opera 14 for Android uses a WebKit render engine.
65 - regex: '(?:Mobile Safari).*(OPR)/(\d+)\.(\d+)\.(\d+)'
66 family_replacement: 'Opera Mobile'
67
68 # Palm WebOS looks a lot like Safari.
69 - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
70 family_replacement: 'webOS Browser'
71
72 # LuaKit has no version info.
73 # http://luakit.org/projects/luakit/
74 - regex: '(luakit)'
75 family_replacement: 'LuaKit'
76
77 # Snowshoe
78 - regex: '(Snowshoe)/(\d+)\.(\d+).(\d+)'
79
80 # Lightning (for Thunderbird)
81 # http://www.mozilla.org/projects/calendar/lightning/
82 - regex: '(Lightning)/(\d+)\.(\d+)([ab]?\d+[a-z]*)'
83
84 # Swiftfox
85 - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre)?) \(Swiftfox\)'
86 family_replacement: 'Swiftfox'
87 - regex: '(Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*)? \(Swiftfox\)'
88 family_replacement: 'Swiftfox'
89
90 # Rekonq
91 - regex: '(rekonq)/(\d+)\.(\d+) Safari'
92 family_replacement: 'Rekonq'
93 - regex: 'rekonq'
94 family_replacement: 'Rekonq'
95
96 # Conkeror lowercase/uppercase
97 # http://conkeror.org/
98 - regex: '(conkeror|Conkeror)/(\d+)\.(\d+)\.?(\d+)?'
99 family_replacement: 'Conkeror'
100
101 # catches lower case konqueror
102 - regex: '(konqueror)/(\d+)\.(\d+)\.(\d+)'
103 family_replacement: 'Konqueror'
104
105 - regex: '(WeTab)-Browser'
106
107 - regex: '(Comodo_Dragon)/(\d+)\.(\d+)\.(\d+)'
108 family_replacement: 'Comodo Dragon'
109
110 # Bots
111 - regex: '(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)'
112
113 - regex: '(Symphony) (\d+).(\d+)'
114
115 - regex: '(Minimo)'
116
117 # Chrome Mobile
118 - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
119 family_replacement: 'Chrome Mobile'
120 - regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
121 family_replacement: 'Chrome Mobile iOS'
122 - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile'
123 family_replacement: 'Chrome Mobile'
124
125 # Chrome Frame must come before MSIE.
126 - regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)'
127 family_replacement: 'Chrome Frame'
128
129 # UC Browser
130 - regex: '(UCBrowser)[ /](\d+)\.(\d+)\.(\d+)'
131 family_replacement: 'UC Browser'
132 - regex: '(UC Browser)[ /](\d+)\.(\d+)\.(\d+)'
133 - regex: '(UC Browser|UCBrowser|UCWEB)(\d+)\.(\d+)\.(\d+)'
134 family_replacement: 'UC Browser'
135
136 # Tizen Browser (second case included in browser/major.minor regex)
137 - regex: '(SLP Browser)/(\d+)\.(\d+)'
138 family_replacement: 'Tizen Browser'
139
140 # Epiphany browser (identifies as Chromium)
141 - regex: '(Epiphany)/(\d+)\.(\d+).(\d+)'
142
143 # Sogou Explorer 2.X
144 - regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)'
145 family_replacement: 'Sogou Explorer'
146
147 # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile)
148 - regex: '(baidubrowser)[/\s](\d+)'
149 family_replacement: 'Baidu Browser'
150 - regex: '(FlyFlow)/(\d+)\.(\d+)'
151 family_replacement: 'Baidu Explorer'
152
153 # Pingdom
154 - regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)'
155 family_replacement: 'PingdomBot'
156
157 # Facebook
158 - regex: '(facebookexternalhit)/(\d+)\.(\d+)'
159 family_replacement: 'FacebookBot'
160
161 # Twitterbot
162 - regex: '(Twitterbot)/(\d+)\.(\d+)'
163 family_replacement: 'TwitterBot'
164
165 # Rackspace Monitoring
166 - regex: '(Rackspace Monitoring)/(\d+)\.(\d+)'
167 family_replacement: 'RackspaceBot'
168
169 # PyAMF
170 - regex: '(PyAMF)/(\d+)\.(\d+)\.(\d+)'
171
172 # Yandex Browser
173 - regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)'
174 family_replacement: 'Yandex Browser'
175
176 # Mail.ru Amigo/Internet Browser (Chromium-based)
177 - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).* MRCHROME'
178 family_replacement: 'Mail.ru Chromium Browser'
179
180 #### END SPECIAL CASES TOP ####
181
182 #### MAIN CASES - this catches > 50% of all browsers ####
183
184 # Browser/major_version.minor_version.beta_version
185 - regex: '(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|WebPilot|Vodafone|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave)/(\d+)\.(\d+)\.(\d+)'
186
187 # Browser/major_version.minor_version
188 - regex: '(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser)/(\d+)\.(\d+)'
189
190 # Browser major_version.minor_version.beta_version (space instead of slash)
191 - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
192 # Browser major_version.minor_version (space instead of slash)
193 - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\d+)\.(\d+)\.?(\d+)?'
194
195 # Kindle WebKit
196 - regex: '(Kindle)/(\d+)\.(\d+)'
197
198 # weird android UAs
199 - regex: '(Android) Donut'
200 v1_replacement: '1'
201 v2_replacement: '2'
202
203 - regex: '(Android) Eclair'
204 v1_replacement: '2'
205 v2_replacement: '1'
206
207 - regex: '(Android) Froyo'
208 v1_replacement: '2'
209 v2_replacement: '2'
210
211 - regex: '(Android) Gingerbread'
212 v1_replacement: '2'
213 v2_replacement: '3'
214
215 - regex: '(Android) Honeycomb'
216 v1_replacement: '3'
217
218 # IE Mobile
219 - regex: '(IEMobile)[ /](\d+)\.(\d+)'
220 family_replacement: 'IE Mobile'
221 # desktop mode
222 # http://www.anandtech.com/show/3982/windows-phone-7-review
223 - regex: '(MSIE) (\d+)\.(\d+).*XBLWP7'
224 family_replacement: 'IE Large Screen'
225
226 # AFTER THE EDGE CASES ABOVE!
227 - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+)'
228 - regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*)?'
229
230 #### END MAIN CASES ####
231
232 #### SPECIAL CASES ####
233 - regex: '(Obigo)InternetBrowser'
234 - regex: '(Obigo)\-Browser'
235 - regex: '(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+))?'
236 family_replacement: 'Obigo'
237
238 - regex: '(MAXTHON|Maxthon) (\d+)\.(\d+)'
239 family_replacement: 'Maxthon'
240 - regex: '(Maxthon|MyIE2|Uzbl|Shiira)'
241 v1_replacement: '0'
242
243 - regex: 'PLAYSTATION 3.+WebKit'
244 family_replacement: 'NetFront NX'
245 - regex: 'PLAYSTATION 3'
246 family_replacement: 'NetFront'
247 - regex: '(PlayStation Portable)'
248 family_replacement: 'NetFront'
249 - regex: '(PlayStation Vita)'
250 family_replacement: 'NetFront NX'
251
252 - regex: 'AppleWebKit.+ (NX)/(\d+)\.(\d+)\.(\d+)'
253 family_replacement: 'NetFront NX'
254 - regex: '(Nintendo 3DS)'
255 family_replacement: 'NetFront NX'
256
257 - regex: '(BrowseX) \((\d+)\.(\d+)\.(\d+)'
258
259 - regex: '(NCSA_Mosaic)/(\d+)\.(\d+)'
260 family_replacement: 'NCSA Mosaic'
261
262 # Polaris/d.d is above
263 - regex: '(POLARIS)/(\d+)\.(\d+)'
264 family_replacement: 'Polaris'
265 - regex: '(Embider)/(\d+)\.(\d+)'
266 family_replacement: 'Polaris'
267
268 - regex: '(BonEcho)/(\d+)\.(\d+)\.(\d+)'
269 family_replacement: 'Bon Echo'
270
271 - regex: 'M?QQBrowser'
272 family_replacement: 'QQ Browser'
273
274 - regex: '(iPod).+Version/(\d+)\.(\d+)\.(\d+)'
275 family_replacement: 'Mobile Safari'
276 - regex: '(iPod).*Version/(\d+)\.(\d+)'
277 family_replacement: 'Mobile Safari'
278 - regex: '(iPhone).*Version/(\d+)\.(\d+)\.(\d+)'
279 family_replacement: 'Mobile Safari'
280 - regex: '(iPhone).*Version/(\d+)\.(\d+)'
281 family_replacement: 'Mobile Safari'
282 - regex: '(iPad).*Version/(\d+)\.(\d+)\.(\d+)'
283 family_replacement: 'Mobile Safari'
284 - regex: '(iPad).*Version/(\d+)\.(\d+)'
285 family_replacement: 'Mobile Safari'
286 - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)(?:_\d+)?_(\d+).*Mobile'
287 family_replacement: 'Mobile Safari'
288 - regex: '(iPod|iPhone|iPad)'
289 family_replacement: 'Mobile Safari'
290
291 - regex: '(AvantGo) (\d+).(\d+)'
292
293 - regex: '(OneBrowser)/(\d+).(\d+)'
294 family_replacement: 'ONE Browser'
295
296 - regex: '(Avant)'
297 v1_replacement: '1'
298
299 # This is the Tesla Model S (see similar entry in device parsers)
300 - regex: '(QtCarBrowser)'
301 v1_replacement: '1'
302
303 - regex: '(iBrowser/Mini)(\d+).(\d+)'
304 family_replacement: 'iBrowser Mini'
305 # nokia browsers
306 # based on: http://www.developer.nokia.com/Community/Wiki/User-Agent_headers_for_Nokia_devices
307 - regex: '^(Nokia)'
308 family_replacement: 'Nokia Services (WAP) Browser'
309 - regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)\.(\d+)'
310 family_replacement: 'Nokia Browser'
311 - regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)'
312 family_replacement: 'Nokia Browser'
313 - regex: '(NokiaBrowser)/(\d+)\.(\d+)'
314 family_replacement: 'Nokia Browser'
315 - regex: '(BrowserNG)/(\d+)\.(\d+).(\d+)'
316 family_replacement: 'Nokia Browser'
317 - regex: '(Series60)/5\.0'
318 family_replacement: 'Nokia Browser'
319 v1_replacement: '7'
320 v2_replacement: '0'
321 - regex: '(Series60)/(\d+)\.(\d+)'
322 family_replacement: 'Nokia OSS Browser'
323 - regex: '(S40OviBrowser)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
324 family_replacement: 'Ovi Browser'
325 - regex: '(Nokia)[EN]?(\d+)'
326
327 # BlackBerry devices
328 - regex: '(BB10);'
329 family_replacement: 'BlackBerry WebKit'
330 - regex: '(PlayBook).+RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
331 family_replacement: 'BlackBerry WebKit'
332 - regex: '(Black[bB]erry).+Version/(\d+)\.(\d+)\.(\d+)'
333 family_replacement: 'BlackBerry WebKit'
334 - regex: '(Black[bB]erry)\s?(\d+)'
335 family_replacement: 'BlackBerry'
336
337 - regex: '(OmniWeb)/v(\d+)\.(\d+)'
338
339 - regex: '(Blazer)/(\d+)\.(\d+)'
340 family_replacement: 'Palm Blazer'
341
342 - regex: '(Pre)/(\d+)\.(\d+)'
343 family_replacement: 'Palm Pre'
344
345 - regex: '(Links) \((\d+)\.(\d+)'
346
347 - regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)'
348
349 #- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
350 # family_replacement: 'iPad'
351
352 # Amazon Silk, should go before Safari
353 - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
354 family_replacement: 'Amazon Silk'
355
356 # Phantomjs, should go before Safari
357 - regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)'
358
359 # WebKit Nightly
360 - regex: '(AppleWebKit)/(\d+)\.?(\d+)?\+ .* Safari'
361 family_replacement: 'WebKit Nightly'
362
363 # Safari
364 - regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
365 family_replacement: 'Safari'
366 # Safari didn't provide "Version/d.d.d" prior to 3.0
367 - regex: '(Safari)/\d+'
368
369 - regex: '(OLPC)/Update(\d+)\.(\d+)'
370
371 - regex: '(OLPC)/Update()\.(\d+)'
372 v1_replacement: '0'
373
374 - regex: '(SEMC\-Browser)/(\d+)\.(\d+)'
375
376 - regex: '(Teleca)'
377 family_replacement: 'Teleca Browser'
378
379 - regex: '(Phantom)/V(\d+)\.(\d+)'
380 family_replacement: 'Phantom Browser'
381
382 - regex: '([MS]?IE) (\d+)\.(\d+)'
383 family_replacement: 'IE'
384
385 - regex: '(python-requests)/(\d+)\.(\d+)'
386 family_replacement: 'Python Requests'
387
388 os_parsers:
389
390 ##########
391 # Android
392 # can actually detect rooted android os. do we care?
393 ##########
394 - regex: '(Android) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
395 - regex: '(Android)\-(\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
396
397 - regex: '(Android) Donut'
398 os_v1_replacement: '1'
399 os_v2_replacement: '2'
400
401 - regex: '(Android) Eclair'
402 os_v1_replacement: '2'
403 os_v2_replacement: '1'
404
405 - regex: '(Android) Froyo'
406 os_v1_replacement: '2'
407 os_v2_replacement: '2'
408
409 - regex: '(Android) Gingerbread'
410 os_v1_replacement: '2'
411 os_v2_replacement: '3'
412
413 - regex: '(Android) Honeycomb'
414 os_v1_replacement: '3'
415
416 ##########
417 # Kindle Android
418 ##########
419 - regex: '(Silk-Accelerated=[a-z]{4,5})'
420 os_replacement: 'Android'
421
422 ##########
423 # Windows
424 # http://en.wikipedia.org/wiki/Windows_NT#Releases
425 # possibility of false positive when different marketing names share same NT kernel
426 # e.g. windows server 2003 and windows xp
427 # lots of ua strings have Windows NT 4.1 !?!?!?!? !?!? !? !????!?! !!! ??? !?!?! ?
428 # (very) roughly ordered in terms of frequency of occurence of regex (win xp currently most frequent, etc)
429 ##########
430
431 - regex: '(Windows (?:NT 5\.2|NT 5\.1))'
432 os_replacement: 'Windows XP'
433
434 # ie mobile des ktop mode
435 # spoofs nt 6.1. must come before windows 7
436 - regex: '(XBLWP7)'
437 os_replacement: 'Windows Phone'
438
439 - regex: '(Windows NT 6\.1)'
440 os_replacement: 'Windows 7'
441
442 - regex: '(Windows NT 6\.0)'
443 os_replacement: 'Windows Vista'
444
445 - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)'
446
447 - regex: '(Windows NT 6\.2; ARM;)'
448 os_replacement: 'Windows RT'
449
450 # is this a spoof or is nt 6.2 out and about in some capacity?
451 - regex: '(Windows NT 6\.2)'
452 os_replacement: 'Windows 8'
453
454 - regex: '(Windows NT 5\.0)'
455 os_replacement: 'Windows 2000'
456
457 - regex: '(Windows Phone) (\d+)\.(\d+)'
458 - regex: '(Windows Phone) OS (\d+)\.(\d+)'
459 - regex: '(Windows ?Mobile)'
460 os_replacement: 'Windows Mobile'
461
462 - regex: '(WinNT4.0)'
463 os_replacement: 'Windows NT 4.0'
464
465 - regex: '(Win98)'
466 os_replacement: 'Windows 98'
467
468 ##########
469 # Tizen OS from Samsung
470 # spoofs Android so pushing it above
471 ##########
472 - regex: '(Tizen)/(\d+)\.(\d+)'
473
474 ##########
475 # Mac OS
476 # http://en.wikipedia.org/wiki/Mac_OS_X#Versions
477 ##########
478 - regex: '(Mac OS X) (\d+)[_.](\d+)(?:[_.](\d+))?'
479
480 # IE on Mac doesn't specify version number
481 - regex: 'Mac_PowerPC'
482 os_replacement: 'Mac OS'
483
484 # builds before tiger don't seem to specify version?
485
486 # ios devices spoof (mac os x), so including intel/ppc prefixes
487 - regex: '(?:PPC|Intel) (Mac OS X)'
488
489 ##########
490 # iOS
491 # http://en.wikipedia.org/wiki/IOS_version_history
492 ##########
493 - regex: '(CPU OS|iPhone OS) (\d+)_(\d+)(?:_(\d+))?'
494 os_replacement: 'iOS'
495
496 # remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs
497 - regex: '(iPhone|iPad|iPod); Opera'
498 os_replacement: 'iOS'
499
500 # few more stragglers
501 - regex: '(iPhone|iPad|iPod).*Mac OS X.*Version/(\d+)\.(\d+)'
502 os_replacement: 'iOS'
503
504 - regex: '(AppleTV)/(\d+)\.(\d+)'
505 os_replacement: 'ATV OS X'
506 os_v1_replacement: '$1'
507 os_v2_replacement: '$2'
508
509 ##########
510 # Chrome OS
511 # if version 0.0.0, probably this stuff:
512 # http://code.google.com/p/chromium-os/issues/detail?id=11573
513 # http://code.google.com/p/chromium-os/issues/detail?id=13790
514 ##########
515 - regex: '(CrOS) [a-z0-9_]+ (\d+)\.(\d+)(?:\.(\d+))?'
516 os_replacement: 'Chrome OS'
517
518 ##########
519 # Linux distros
520 ##########
521 - regex: '(Debian)-(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
522 - regex: '(Linux Mint)(?:/(\d+))?'
523 - regex: '(Mandriva)(?: Linux)?/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
524
525 ##########
526 # Symbian + Symbian OS
527 # http://en.wikipedia.org/wiki/History_of_Symbian
528 ##########
529 - regex: '(Symbian[Oo][Ss])/(\d+)\.(\d+)'
530 os_replacement: 'Symbian OS'
531 - regex: '(Symbian/3).+NokiaBrowser/7\.3'
532 os_replacement: 'Symbian^3 Anna'
533 - regex: '(Symbian/3).+NokiaBrowser/7\.4'
534 os_replacement: 'Symbian^3 Belle'
535 - regex: '(Symbian/3)'
536 os_replacement: 'Symbian^3'
537 - regex: '(Series 60|SymbOS|S60)'
538 os_replacement: 'Symbian OS'
539 - regex: '(MeeGo)'
540 - regex: 'Symbian [Oo][Ss]'
541 os_replacement: 'Symbian OS'
542 - regex: 'Series40;'
543 os_replacement: 'Nokia Series 40'
544
545 ##########
546 # BlackBerry devices
547 ##########
548 - regex: '(BB10);.+Version/(\d+)\.(\d+)\.(\d+)'
549 os_replacement: 'BlackBerry OS'
550 - regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
551 os_replacement: 'BlackBerry OS'
552 - regex: '(Black[Bb]erry).+Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
553 os_replacement: 'BlackBerry OS'
554 - regex: '(RIM Tablet OS) (\d+)\.(\d+)\.(\d+)'
555 os_replacement: 'BlackBerry Tablet OS'
556 - regex: '(Play[Bb]ook)'
557 os_replacement: 'BlackBerry Tablet OS'
558 - regex: '(Black[Bb]erry)'
559 os_replacement: 'BlackBerry OS'
560
561 ##########
562 # Firefox OS
563 ##########
564 - regex: '\(Mobile;.+Firefox/\d+\.\d+'
565 os_replacement: 'Firefox OS'
566
567 ##########
568 # BREW
569 # yes, Brew is lower-cased for Brew MP
570 ##########
571 - regex: '(BREW)[ /](\d+)\.(\d+)\.(\d+)'
572 - regex: '(BREW);'
573 - regex: '(Brew MP|BMP)[ /](\d+)\.(\d+)\.(\d+)'
574 os_replacement: 'Brew MP'
575 - regex: 'BMP;'
576 os_replacement: 'Brew MP'
577
578 ##########
579 # Google TV
580 ##########
581 - regex: '(GoogleTV) (\d+)\.(\d+)\.(\d+)'
582 # Old style
583 - regex: '(GoogleTV)\/\d+'
584
585 - regex: '(WebTV)/(\d+).(\d+)'
586
587 ##########
588 # Misc mobile
589 ##########
590 - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
591 os_replacement: 'webOS'
592 - regex: '(VRE);'
593
594 ##########
595 # Generic patterns
596 # since the majority of os cases are very specific, these go last
597 ##########
598 # first.second.third.fourth bits
599 - regex: '(SUSE|Fedora|Red Hat|PCLinuxOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
600
601 # first.second.third bits
602 - regex: '(SUSE|Fedora|Red Hat|Puppy|PCLinuxOS|CentOS)/(\d+)\.(\d+)\.(\d+)'
603
604 # first.second bits
605 - regex: '(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\d+)\.(\d+)'
606
607 # just os
608 - regex: '(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)'
609 - regex: '(Linux)/(\d+)\.(\d+)'
610 - regex: '(Linux|BSD)'
611 - regex: 'SunOS'
612 os_replacement: 'Solaris'
613
614 device_parsers:
615 ##########
616 # incomplete!
617 # multiple replacement placeholds i.e. ($1) ($2) help solve problem of single device with multiple representations in ua
618 # e.g. HTC Dream S should parse to the same device as HTC_DreamS
619 ##########
620
621 ##########
622 # incomplete!
623 # HTC
624 # http://en.wikipedia.org/wiki/List_of_HTC_phones
625 # this is quickly getting unwieldy
626 ##########
627 # example: Mozilla/5.0 (Linux; U; Android 2.3.2; fr-fr; HTC HD2 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
628 - regex: 'HTC ([A-Z][a-z0-9]+) Build'
629 device_replacement: 'HTC $1'
630 # example: Mozilla/5.0 (Linux; U; Android 2.1; es-es; HTC Legend 1.23.161.1 Build/ERD79) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17,gzip
631 - regex: 'HTC ([A-Z][a-z0-9 ]+) \d+\.\d+\.\d+\.\d+'
632 device_replacement: 'HTC $1'
633 # example: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; HTC_Touch_Diamond2_T5353; Windows Phone 6.5.3.5)
634 - regex: 'HTC_Touch_([A-Za-z0-9]+)'
635 device_replacement: 'HTC Touch ($1)'
636 # should come after HTC_Touch
637 - regex: 'USCCHTC(\d+)'
638 device_replacement: 'HTC $1 (US Cellular)'
639 - regex: 'Sprint APA(9292)'
640 device_replacement: 'HTC $1 (Sprint)'
641 - regex: 'HTC ([A-Za-z0-9]+ [A-Z])'
642 device_replacement: 'HTC $1'
643 - regex: 'HTC[-_/\s]([A-Za-z0-9]+)'
644 device_replacement: 'HTC $1'
645 - regex: '(ADR[A-Za-z0-9]+)'
646 device_replacement: 'HTC $1'
647 - regex: '(HTC)'
648
649 # Tesla Model S
650 - regex: '(QtCarBrowser)'
651 device_replacement: 'Tesla Model S'
652
653 # Samsung
654 - regex: '(SamsungSGHi560)'
655 device_replacement: 'Samsung SGHi560'
656
657 #########
658 # Ericsson - must come before nokia since they also use symbian
659 #########
660 - regex: 'SonyEricsson([A-Za-z0-9]+)/'
661 device_replacement: 'Ericsson $1'
662
663 ##########
664 # PlayStation
665 # The Vita spoofs the Kindle
666 ##########
667 - regex: 'PLAYSTATION 3'
668 device_replacement: 'PlayStation 3'
669 - regex: '(PlayStation Portable)'
670 - regex: '(PlayStation Vita)'
671
672 ##########
673 # incomplete!
674 # Kindle
675 # http://amazonsilk.wordpress.com/useful-bits/silk-user-agent/
676 ##########
677 - regex: '(KFOT Build)'
678 device_replacement: 'Kindle Fire'
679 - regex: '(KFTT Build)'
680 device_replacement: 'Kindle Fire HD'
681 - regex: '(KFJWI Build)'
682 device_replacement: 'Kindle Fire HD 8.9" WiFi'
683 - regex: '(KFJWA Build)'
684 device_replacement: 'Kindle Fire HD 8.9" 4G'
685 - regex: '(Kindle Fire)'
686 - regex: '(Kindle)'
687 - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
688 device_replacement: 'Kindle Fire'
689
690 #########
691 # Android General Device Matching (far from perfect)
692 #########
693 - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; WOWMobile (.+) Build'
694 - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
695 - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
696 - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+;[A-Za-z]{2}\-[A-Za-z]{2};(.+) Build'
697 - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
698 - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; (.+) Build'
699 - regex: 'Android[\- ][\d]+\.[\d]+; (.+) Build'
700
701 ##########
702 # NOKIA
703 # nokia NokiaN8-00 comes before iphone. sometimes spoofs iphone
704 ##########
705 - regex: 'NokiaN([0-9]+)'
706 device_replacement: 'Nokia N$1'
707 - regex: 'NOKIA([A-Za-z0-9\v-]+)'
708 device_replacement: 'Nokia $1'
709 - regex: 'Nokia([A-Za-z0-9\v-]+)'
710 device_replacement: 'Nokia $1'
711 - regex: 'NOKIA ([A-Za-z0-9\-]+)'
712 device_replacement: 'Nokia $1'
713 - regex: 'Nokia ([A-Za-z0-9\-]+)'
714 device_replacement: 'Nokia $1'
715 - regex: 'Lumia ([A-Za-z0-9\-]+)'
716 device_replacement: 'Lumia $1'
717 - regex: 'Symbian'
718 device_replacement: 'Nokia'
719
720 ##########
721 # BlackBerry
722 # http://www.useragentstring.com/pages/BlackBerry/
723 ##########
724 - regex: 'BB10; ([A-Za-z0-9\- ]+)\)'
725 device_replacement: 'BlackBerry $1'
726 - regex: '(PlayBook).+RIM Tablet OS'
727 device_replacement: 'BlackBerry Playbook'
728 - regex: 'Black[Bb]erry ([0-9]+);'
729 device_replacement: 'BlackBerry $1'
730 - regex: 'Black[Bb]erry([0-9]+)'
731 device_replacement: 'BlackBerry $1'
732 - regex: 'Black[Bb]erry;'
733 device_replacement: 'BlackBerry'
734
735 ##########
736 # PALM / HP
737 ##########
738 # some palm devices must come before iphone. sometimes spoofs iphone in ua
739 - regex: '(Pre)/(\d+)\.(\d+)'
740 device_replacement: 'Palm Pre'
741 - regex: '(Pixi)/(\d+)\.(\d+)'
742 device_replacement: 'Palm Pixi'
743 - regex: '(Touch[Pp]ad)/(\d+)\.(\d+)'
744 device_replacement: 'HP TouchPad'
745 - regex: 'HPiPAQ([A-Za-z0-9]+)/(\d+).(\d+)'
746 device_replacement: 'HP iPAQ $1'
747 - regex: 'Palm([A-Za-z0-9]+)'
748 device_replacement: 'Palm $1'
749 - regex: 'Treo([A-Za-z0-9]+)'
750 device_replacement: 'Palm Treo $1'
751 - regex: 'webOS.*(P160UNA)/(\d+).(\d+)'
752 device_replacement: 'HP Veer'
753
754 ##########
755 # AppleTV
756 # No built in browser that I can tell
757 # Stack Overflow indicated iTunes-AppleTV/4.1 as a known UA for app available and I'm seeing it in live traffic
758 ##########
759 - regex: '(AppleTV)'
760 device_replacement: 'AppleTV'
761
762 ##########
763 # Catch the google mobile crawler before checking for iPhones.
764 ##########
765
766 - regex: 'AdsBot-Google-Mobile'
767 device_replacement: 'Spider'
768
769 - regex: 'Googlebot-Mobile/(\d+).(\d+)'
770 device_replacement: 'Spider'
771
772 ##########
773 # complete but probably catches spoofs
774 # iSTUFF
775 ##########
776 # ipad and ipod must be parsed before iphone
777 # cannot determine specific device type from ua string. (3g, 3gs, 4, etc)
778 - regex: '(iPad) Simulator;'
779 - regex: '(iPad);'
780 - regex: '(iPod);'
781 - regex: '(iPhone) Simulator;'
782 - regex: '(iPhone);'
783
784 ##########
785 # Acer
786 ##########
787 - regex: 'acer_([A-Za-z0-9]+)_'
788 device_replacement: 'Acer $1'
789 - regex: 'acer_([A-Za-z0-9]+)_'
790 device_replacement: 'Acer $1'
791
792 ##########
793 # Alcatel
794 ##########
795 - regex: 'ALCATEL-([A-Za-z0-9]+)'
796 device_replacement: 'Alcatel $1'
797 - regex: 'Alcatel-([A-Za-z0-9]+)'
798 device_replacement: 'Alcatel $1'
799
800 ##########
801 # Amoi
802 ##########
803 - regex: 'Amoi\-([A-Za-z0-9]+)'
804 device_replacement: 'Amoi $1'
805 - regex: 'AMOI\-([A-Za-z0-9]+)'
806 device_replacement: 'Amoi $1'
807
808 ##########
809 # Amoi
810 ##########
811 - regex: 'Asus\-([A-Za-z0-9]+)'
812 device_replacement: 'Asus $1'
813 - regex: 'ASUS\-([A-Za-z0-9]+)'
814 device_replacement: 'Asus $1'
815
816 ##########
817 # Bird
818 ##########
819 - regex: 'BIRD\-([A-Za-z0-9]+)'
820 device_replacement: 'Bird $1'
821 - regex: 'BIRD\.([A-Za-z0-9]+)'
822 device_replacement: 'Bird $1'
823 - regex: 'BIRD ([A-Za-z0-9]+)'
824 device_replacement: 'Bird $1'
825
826 ##########
827 # Dell
828 ##########
829 - regex: 'Dell ([A-Za-z0-9]+)'
830 device_replacement: 'Dell $1'
831
832 ##########
833 # DoCoMo
834 ##########
835 - regex: 'DoCoMo/2\.0 ([A-Za-z0-9]+)'
836 device_replacement: 'DoCoMo $1'
837 - regex: '([A-Za-z0-9]+)_W\;FOMA'
838 device_replacement: 'DoCoMo $1'
839 - regex: '([A-Za-z0-9]+)\;FOMA'
840 device_replacement: 'DoCoMo $1'
841
842 ##########
843 # Huawei
844 ##########
845 - regex: 'Huawei([A-Za-z0-9]+)'
846 device_replacement: 'Huawei $1'
847 - regex: 'HUAWEI-([A-Za-z0-9]+)'
848 device_replacement: 'Huawei $1'
849 - regex: 'vodafone([A-Za-z0-9]+)'
850 device_replacement: 'Huawei Vodafone $1'
851
852 ##########
853 # i-mate
854 ##########
855 - regex: 'i\-mate ([A-Za-z0-9]+)'
856 device_replacement: 'i-mate $1'
857
858 ##########
859 # kyocera
860 ##########
861 - regex: 'Kyocera\-([A-Za-z0-9]+)'
862 device_replacement: 'Kyocera $1'
863 - regex: 'KWC\-([A-Za-z0-9]+)'
864 device_replacement: 'Kyocera $1'
865
866 ##########
867 # lenovo
868 ##########
869 - regex: 'Lenovo\-([A-Za-z0-9]+)'
870 device_replacement: 'Lenovo $1'
871 - regex: 'Lenovo_([A-Za-z0-9]+)'
872 device_replacement: 'Lenovo $1'
873
874 ##########
875 # lg
876 ##########
877 - regex: 'LG/([A-Za-z0-9]+)'
878 device_replacement: 'LG $1'
879 - regex: 'LG-LG([A-Za-z0-9]+)'
880 device_replacement: 'LG $1'
881 - regex: 'LGE-LG([A-Za-z0-9]+)'
882 device_replacement: 'LG $1'
883 - regex: 'LGE VX([A-Za-z0-9]+)'
884 device_replacement: 'LG $1'
885 - regex: 'LG ([A-Za-z0-9]+)'
886 device_replacement: 'LG $1'
887 - regex: 'LGE LG\-AX([A-Za-z0-9]+)'
888 device_replacement: 'LG $1'
889 - regex: 'LG\-([A-Za-z0-9]+)'
890 device_replacement: 'LG $1'
891 - regex: 'LGE\-([A-Za-z0-9]+)'
892 device_replacement: 'LG $1'
893 - regex: 'LG([A-Za-z0-9]+)'
894 device_replacement: 'LG $1'
895
896 ##########
897 # kin
898 ##########
899 - regex: '(KIN)\.One (\d+)\.(\d+)'
900 device_replacement: 'Microsoft $1'
901 - regex: '(KIN)\.Two (\d+)\.(\d+)'
902 device_replacement: 'Microsoft $1'
903
904 ##########
905 # motorola
906 ##########
907 - regex: '(Motorola)\-([A-Za-z0-9]+)'
908 - regex: 'MOTO\-([A-Za-z0-9]+)'
909 device_replacement: 'Motorola $1'
910 - regex: 'MOT\-([A-Za-z0-9]+)'
911 device_replacement: 'Motorola $1'
912
913 ##########
914 # nintendo
915 ##########
916 - regex: '(Nintendo WiiU)'
917 device_replacement: 'Nintendo Wii U'
918 - regex: 'Nintendo (DS|3DS|DSi|Wii);'
919 device_replacement: 'Nintendo $1'
920
921 ##########
922 # pantech
923 ##########
924 - regex: 'Pantech([A-Za-z0-9]+)'
925 device_replacement: 'Pantech $1'
926
927 ##########
928 # philips
929 ##########
930 - regex: 'Philips([A-Za-z0-9]+)'
931 device_replacement: 'Philips $1'
932 - regex: 'Philips ([A-Za-z0-9]+)'
933 device_replacement: 'Philips $1'
934
935 ##########
936 # Samsung
937 ##########
938 - regex: 'SAMSUNG-([A-Za-z0-9\-]+)'
939 device_replacement: 'Samsung $1'
940 - regex: 'SAMSUNG\; ([A-Za-z0-9\-]+)'
941 device_replacement: 'Samsung $1'
942
943 ##########
944 # Sega
945 ##########
946 - regex: 'Dreamcast'
947 device_replacement: 'Sega Dreamcast'
948
949 ##########
950 # Softbank
951 ##########
952 - regex: 'Softbank/1\.0/([A-Za-z0-9]+)'
953 device_replacement: 'Softbank $1'
954 - regex: 'Softbank/2\.0/([A-Za-z0-9]+)'
955 device_replacement: 'Softbank $1'
956
957 ##########
958 # WebTV
959 ##########
960 - regex: '(WebTV)/(\d+).(\d+)'
961
962 ##########
963 # Generic Smart Phone
964 ##########
965 - regex: '(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)'
966 device_replacement: "Generic Smartphone"
967
968 ##########
969 # Generic Feature Phone
970 ##########
971 - regex: '^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\-|airn|alav|asus|attw|au\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\-n|bw\-u|beck|benq|bilb|blac|c55/|cdm\-|chtm|capi|comp|cond|craw|dall|dbte|dc\-s|dica|ds\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\-|fly_|g\-mo|g1 u|g560|gf\-5|grun|gene|go.w|good|grad|hcit|hd\-m|hd\-p|hd\-t|hei\-|hp i|hpip|hs\-c|htc |htc\-|htca|htcg)'
972 device_replacement: 'Generic Feature Phone'
973 - regex: '^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\-20|i\-go|i\-ma|i230|iac|iac\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\-|klon|lexi|lg g|lg\-a|lg\-b|lg\-c|lg\-d|lg\-f|lg\-g|lg\-k|lg\-l|lg\-m|lg\-o|lg\-p|lg\-s|lg\-t|lg\-u|lg\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\-|lge/|lynx|leno|m1\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\-|nem\-|newg|neon)'
974 device_replacement: 'Generic Feature Phone'
975 - regex: '^(netf|noki|nzph|o2 x|o2\-x|opwv|owg1|opti|oran|ot\-s|p800|pand|pg\-1|pg\-2|pg\-3|pg\-6|pg\-8|pg\-c|pg13|phil|pn\-2|pt\-g|palm|pana|pire|pock|pose|psio|qa\-a|qc\-2|qc\-3|qc\-5|qc\-7|qc07|qc12|qc21|qc32|qc60|qci\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\-|scp\-|sdk/|se47|sec\-|sec0|sec1|semc|sgh\-|shar|sie\-|sk\-0|sl45|slid|smb3|smt5|sp01|sph\-|spv |spv\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\-mo|t218|t250|t600|t610|t618|tcl\-|tdg\-|telm|tim\-|ts70|tsm\-|tsm3|tsm5|tx\-9|tagt)'
976 device_replacement: 'Generic Feature Phone'
977 - regex: '^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\-|your|zte\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\-|webc|whit|wmlb|xda\-|xda_)'
978 device_replacement: 'Generic Feature Phone'
979
980 ##########
981 # Spiders (this is hack...)
982 ##########
983 - regex: '(bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\-webcrawler|converacrawler|dataparksearch|findlinks|crawler)'
984 device_replacement: 'Spider'
985