Error: JavaScript is needed to render this site: please enable it.
This page lists the common browser engines:
A browser engine — also called a layout engine or rendering engine — is the core of a web browser, responsible for rendering web pages.
A browser engine can be used by many different browsers. For example, Mozilla engines are used by Epiphany, Firefox, Galeon, K-Meleon, Mozilla, Netscape 6–9, Pale Moon, SeaMonkey, Waterfox, and others. Browsers which use the same version of the same engine should display pages the same if the browsers are configured the same, but there can be differences. For example, some browsers have different default styles — e.g. default background colours — which can create rendering differences without suitable CSS rules.
A problem with some browser engines is that they are based on old versions of mainstream engines: e.g. Pale Moon uses the Goanna engine, which was forked from an old version of the Gecko engine; so Pale Moon will not render pages as well as modern versions of Firefox.
There are two classes of desktop browsers being used by some people: browsers which are being actively developed, and browsers which are nearly extinct.
There are three major families of desktop browser engines being actively developed:
| BRAVE | CHROME | CHROME ESC | EDGE | EDGE ESC | OPERA | VIVALDI |
|---|---|---|---|---|---|---|
| Chrome 28 | Opera 15 | |||||
| Chrome 29 | Opera 16 | |||||
| Chrome 30 | Opera 17 | |||||
| Chrome 31 | Opera 18 | |||||
| Chrome 32 | Opera 19 | |||||
| Chrome 33 | Opera 20 | |||||
| Chrome 34 | Opera 21 | |||||
| Chrome 35 | Opera 22 | |||||
| Chrome 36 | Opera 23 | |||||
| Chrome 37 | Opera 24 | |||||
| Chrome 38 | Opera 25 | |||||
| Chrome 39 | Opera 26 | |||||
| Chrome 40 | Opera 27 | |||||
| Chrome 41 | Opera 28 | |||||
| Chrome 42 | Opera 29 | |||||
| Chrome 43 | Opera 30 | |||||
| Chrome 44 | Opera 31 | |||||
| Chrome 45 | Opera 32 | |||||
| Chrome 46 | Opera 33 | |||||
| Chrome 47 | Opera 34 | |||||
| Chrome 48 | Opera 35 | |||||
| Chrome 49 | Opera 36 | Vivaldi 1.0 | ||||
| Chrome 50 | Opera 37 | Vivaldi 1.1 | ||||
| Chrome 51 | Opera 38 | Vivaldi 1.2 | ||||
| Chrome 52 | Opera 39 | Vivaldi 1.3 | ||||
| Chrome 53 | Opera 40 | Vivaldi 1.4 | ||||
| Chrome 54 | Opera 41 | Vivaldi 1.5 | ||||
| Chrome 55 | Opera 42 | Vivaldi 1.6 | ||||
| Chrome 56 | Opera 43 | Vivaldi 1.7 | ||||
| Chrome 57 | Opera 44 | Vivaldi 1.8 | ||||
| Chrome 58 | Opera 45 | Vivaldi 1.9 | ||||
| Chrome 59 | Opera 46 | Vivaldi 1.10 | ||||
| Chrome 60 | Opera 47 | Vivaldi 1.11 | ||||
| Chrome 61 | Opera 48 | Vivaldi 1.12 | ||||
| Chrome 62 | Opera 49 | Vivaldi 1.13 | ||||
| Chrome 63 | Opera 50 | |||||
| Chrome 64 | Opera 51 | Vivaldi 1.14 | ||||
| Chrome 65 | Opera 52 | Vivaldi 1.15 | ||||
| Chrome 66 | Opera 53 | |||||
| Chrome 67 | Opera 54 | |||||
| Chrome 68 | Opera 55 | |||||
| Chrome 69 | Opera 56 | Vivaldi 2.0 | ||||
| Chrome 70 | Opera 57 | Vivaldi 2.1 | ||||
| Chrome 71 | Opera 58 | Vivaldi 2.2 | ||||
| Chrome 72 | Vivaldi 2.3 | |||||
| Chrome 73 | Opera 60 | Vivaldi 2.4 | ||||
| Chrome 74 | Vivaldi 2.5 | |||||
| Chrome 75 | Opera 62 | Vivaldi 2.6 | ||||
| Chrome 76 | Opera 63 | Vivaldi 2.7 | ||||
| Chrome 77 | Opera 64 | Vivaldi 2.8 | ||||
| Chrome 78 | Opera 65 | Vivaldi 2.9 | ||||
| Chrome 79 | Edge 79 | Opera 66 | Vivaldi 2.10 | |||
| Chrome 80 | Edge 80 | Opera 67 | Vivaldi 2.11 | |||
| Chrome 81 | Edge 81 | Opera 68 | Vivaldi 3.0 | |||
| Chrome 82 | Edge 82 | Opera 69 | Vivaldi 3.1 | |||
| Chrome 83 | Edge 83 | Opera 70 | Vivaldi 3.2 | |||
| Chrome 85 | Edge 85 | Opera 71 | Vivaldi 3.3 | |||
| Chrome 86 | Edge 86 | Opera 72 | Vivaldi 3.4 | |||
| Chrome 87 | Edge 87 | Opera 73 | Vivaldi 3.5 | |||
| Chrome 88 | Edge 88 | Opera 74 | Vivaldi 3.6 | |||
| Chrome 89 | Edge 89 | Opera 75 | Vivaldi 3.7 | |||
| Chrome 90 | Edge 90 | Opera 76 | Vivaldi 3.8 | |||
| Brave 1.26 | Chrome 91 | Edge 91 | Opera 77 | Vivaldi 4.0 | ||
| Brave 1.27 | Chrome 92 | Edge 92 | Opera 78 | Vivaldi 4.1 | ||
| Brave 1.29 | Chrome 93 | Edge 93 | Opera 79 | Vivaldi 4.2 | ||
| Brave 1.30 | Chrome 94 | Chrome 94 ESC | Edge 94 | Edge 94 ESC | Opera 80 | Vivaldi 4.3 |
| Brave 1.31 | Chrome 95 | Edge 95 | Opera 81 | |||
| Brave 1.32–1.33 | Chrome 96 | Chrome 96 ESC | Edge 96 | Edge 96 ESR | Opera 82 | Vivaldi 5.0 |
| Brave 1.34 | Chrome 97 | Edge 97 | Opera 83 | |||
| Brave 1.35 | Chrome 98 | Chrome 98 ESC | Edge 98 | Edge 98 ESC | Opera 84 | Vivaldi 5.1 |
| Brave 1.36 | Chrome 99 | Edge 99 | Opera 85 | |||
| Brave 1.37 | Chrome 100 | Chrome 100 ESC | Edge 100 | Edge 100 ESC | Opera 86 | Vivaldi 5.2 |
| Brave 1.38 | Chrome 101 | Edge 101 | Opera 87 | |||
| Brave 1.39 | Chrome 102 | Chrome 102 ESC | Edge 102 | Edge 102 ESC | Opera 88 | Vivaldi 5.3 |
| Brave 1.40–1.41 | Chrome 103 | Edge 103 | Opera 89 | |||
| Brave 1.42 | Chrome 104 | Chrome 104 ESC | Edge 104 | Edge 104 ESC | Opera 90 | Vivaldi 5.4 |
| Brave 1.43 | Chrome 105 | Edge 105 | Opera 91 | |||
| Brave 1.44 | Chrome 106 | Chrome 106 ESC | Edge 106 | Edge 106 ESC | Opera 92 | Vivaldi 5.5 |
| Brave 1.45 | Chrome 107 | Edge 107 | Opera 93 | |||
| Brave 1.46 | Chrome 108 | Chrome 108ESC | Edge 108 | Edge 108ESC | Opera 94 | Vivaldi 5.6 |
| Brave 1.47 | Chrome 109 | Edge 109 | Opera 95 | |||
| Brave 1.48 | Chrome 110 | Chrome 110ESC | Edge 110 | Edge 110ESC | Opera 96 | Vivaldi 5.7 |
| Brave 1.49 | Chrome 111 | Edge 111 | Opera 97 | |||
| Brave 1.50 | Chrome 112 | Chrome 112ESC | Edge 112 | Edge 112ESC | Opera 98 | Vivaldi 6.0 |
| Brave 1.51 | Chrome 113 | Chrome 113ESC | Edge 113 | Opera 99 | ||
| Brave 1.52 | Chrome 114 | Chrome 114ESC | Edge 114 | Edge 114ESC | Opera 100 | Vivaldi 6.1 |
| Brave 1.56 | Chrome 115 | Edge 115 | Opera 101 |
| ENGINE | K-MELEON |
|---|---|
| Goanna 3.5 | K-Meleon 76.4.4–76.4.8 |
| ENGINE | PALE MOON |
|---|---|
| Goanna 4.1 | Pale Moon 28 |
| Goanna 4.2 | Pale Moon 28 |
| Goanna 4.3 | Pale Moon 28 |
| Goanna 4.4 | Pale Moon 28.7–28.8 |
| Goanna 4.5 | Pale Moon 28.9 |
| Goanna 4.5 | Pale Moon 28.13 |
| Goanna 4.6 | Pale Moon 28.14 |
| Goanna 4.7 | Pale Moon 28.15–28.16 |
| Goanna 4.8 | Pale Moon 29 |
| Goanna 5.0 | Pale Moon 30 |
| Goanna 5.1 | Pale Moon 31 |
| Goanna 6.0-6.1 | Pale Moon 32 |
| ENGINE | FIREFOX, FIREFOX PORTABLE | FIREFOX ESR | SEAMONKEY | TOR | WATERFOX CURRENT | WATERFOX CLASSIC |
|---|---|---|---|---|---|---|
| Gecko 57.0 | Firefox 57.0 | |||||
| Gecko 58.0 | Firefox 58.0 | |||||
| Gecko 59.0 | Firefox 59.0 | |||||
| Gecko 60.0 | Firefox 60.0 | Firefox ESR 60–60.9 | Seamonkey 2.53.1–2.53.9 | Waterfox 56.2 | ||
| Gecko 61.0 | Firefox 61.0 | |||||
| Gecko 62.0 | Firefox 62.0 | |||||
| Gecko 63.0 | Firefox 63.0 | |||||
| Gecko 64.0 | Firefox 64.0 | |||||
| Gecko 65.0 | Firefox 65.0 | |||||
| Gecko 66.0 | Firefox 66.0 | |||||
| Gecko 67.0 | Firefox 67.0 | |||||
| Gecko 68.0 | Firefox 68.0 | Firefox ESR 68.0–68.12 | SeaMonkey 2.53.10.nn-2.53.15 | Waterfox 2019.10–2020-10 | Waterfox 2019.10–2021-09 | |
| Gecko 69.0 | Firefox 69.0 | |||||
| Gecko 70.0 | Firefox 70.0 | |||||
| Gecko 71.0 | Firefox 71.0 | |||||
| Gecko 72.0 | Firefox 72.0 | |||||
| Gecko 73.0 | Firefox 73.0 | |||||
| Gecko 74.0 | Firefox 74.0 | |||||
| Gecko 75.0 | Firefox 75.0 | |||||
| Gecko 76.0 | Firefox 76.0 | |||||
| Gecko 77.0 | Firefox 77.0 | |||||
| Gecko 78.0 | Firefox 78.0 | Firefox ESR 78.0–78.14 | Waterfox G3n.n | |||
| Gecko 80.0 | Firefox 80.0 | |||||
| Gecko 81.0 | Firefox 81.0 | |||||
| Gecko 82.0 | Firefox 82.0 | |||||
| Gecko 83.0 | Firefox 83.0 | |||||
| Gecko 84.0 | Firefox 84.0 | |||||
| Gecko 85.0 | Firefox 85.0 | |||||
| Gecko 86.0 | Firefox 86.0 | |||||
| Gecko 87.0 | Firefox 87.0 | |||||
| Gecko 88.0 | Firefox 88.0 | |||||
| Gecko 89.0 | Firefox 89.0 | |||||
| Gecko 90.0 | Firefox 90.0 | |||||
| Gecko 91.0 | Firefox 91.0 | Firefox ESR 91.n.nn | SeaMonkey 2.53.17 | TOR 11.0.nn,11.5.nn | Waterfox G4n.n | |
| Gecko 92.0 | Firefox 92.0 | |||||
| Gecko 93.0 | Firefox 93.0 | |||||
| Gecko 94.0 | Firefox 94.0 | |||||
| Gecko 95.0 | Firefox 95.0 | |||||
| Gecko 96.0 | Firefox 96.0 | |||||
| Gecko 97.0 | Firefox 97.0.2 | |||||
| Gecko 98.0 | Firefox 98.0.2 | |||||
| Gecko 99.0 | Firefox 99.0.1 | |||||
| Gecko 100.0 | Firefox 100.0.2 | |||||
| Gecko 101.0 | Firefox 101.0.1 | |||||
| Gecko 102.0 | Firefox 102.2.0 | Firefox ESR 102.n.nn | TOR 12.0.nn | Waterfox G5.n.n | ||
| Gecko 103.0 | Firefox 103.0.2 | |||||
| Gecko 104.0 | Firefox 104.0.2 | |||||
| Gecko 105.0 | Firefox 105.0.3 | |||||
| Gecko 106.0 | Firefox 107.0 | |||||
| Gecko 107.0 | Firefox 107.0.1 | |||||
| Gecko 108.0 | Firefox 108.0.2 | |||||
| Gecko 109.0 | Firefox 109.0.1 | |||||
| Gecko 110.0 | Firefox 110.0.1 | |||||
| Gecko 111.0 | Firefox 111.0.1 | |||||
| Gecko 112.0 | Firefox 112.0.2 | |||||
| Gecko 113.0 | Firefox 113.0.2 | |||||
| Gecko 114.0 | Firefox 114.0.2 | |||||
| Gecko 115.0 | Firefox 115.0.3 | Firefox ESR 115.n.nn | ||||
| Gecko 116.0 | Firefox 116.0.1 |
| EDGE | CHROME | OPERA | VIVALDI |
|---|---|---|---|
| Chrome 1 | |||
| Chrome 2 | |||
| Chrome 3 | |||
| Chrome 4 | |||
| Chrome 5 | |||
| Chrome 6 | |||
| Chrome 7 | |||
| Chrome 8 | |||
| Chrome 9 | |||
| Chrome 10 | |||
| Chrome 11 | |||
| Chrome 12 | |||
| Chrome 13 | |||
| Chrome 14 | |||
| Chrome 15 | |||
| Chrome 16 | |||
| Chrome 17 | |||
| Chrome 18 | |||
| Chrome 19 | |||
| Chrome 20 | |||
| Chrome 21 | |||
| Chrome 22 | |||
| Chrome 23 | |||
| Chrome 24 | |||
| Chrome 25 | |||
| Chrome 26 | |||
| Chrome 27 |
Apple Safari’s browser engine is based on Konqueror’s KHTML engine, used by Chrome, OmniWeb, Opera (versions 15+), Safari, and Vivaldi.
| ENGINE | SAFARI |
|---|---|
| WebKit 85 | Safari 1.0 |
| WebKit 100 | Safari 1.1 |
| WebKit 125 | Safari 1.2 |
| WebKit 312 | Safari 1.3 |
| WebKit 412–419 | Safari 2.0 |
| WebKit 522–523 | Safari 3.0 |
| WebKit 525 | Safari 3.1–3.2 |
| WebKit 526–533.16, 533.17.8, 533.18.5, 533.19.4 | Safari 4.0 |
| WebKit 533.16, 533.17.8, 533.18.5, 533.19.4, 533.20–534.59 | Safari 5.0 |
| WebKit 536–537.73.11, 537.78.2, 537.85.17 | Safari 6.0 |
| WebKit 537.71, 537.73.11, 537.75.14, 537.76.4, 537.77.4, 537.78.2, 537.85.17 | Safari 7.0 |
| WebKit 538.35.8–600.7.12 | Safari 8.0 |
| WebKit 601.1.56–601.7.8 | Safari 9.0 |
| WebKit 602.1.50–602.4.8 | Safari 10.0 |
| WebKit 603.1.30–603.3.8 | Safari 10.1 |
| WebKit ?–? | Safari 11.nn |
| WebKit ?–? | Safari 12.nn |
| WebKit ?–? | Safari 13.nn |
| WebKit ?–? | Safari 24.nn |
There are also four minor families of desktop browser engines no longer being actively developed — nearly extinct — but still used by some people:
Some people use Classic Gecko browsers, even though Mozilla abandoned them years ago.
| ENGINE | FIREFOX | FIREFOX ESR | MOZILLA/SEAMONKEY | NETSCAPE |
|---|---|---|---|---|
| Gecko 1.0 | Mozilla 1.0 | Netscape 7.0 | ||
| Gecko 1.4 | Mozilla 1.4 | Netscape 7.1 | ||
| Gecko 1.7 | Firefox 1.0 | Mozilla 1.7 | Netscape 7.2, Netscape 8.0–8.13 | |
| Gecko 1.8 | Firefox 1.5 | SeaMonkey 1.0 | ||
| Gecko 1.8.1 | Firefox 2.0 | SeaMonkey 1.1 | Netscape 9 | |
| Gecko 1.9.0 | Firefox 3.0 | |||
| Gecko 1.9.1 | Firefox 3.5 | SeaMonkey 2 | ||
| Gecko 1.9.2 | Firefox 3.6 | |||
| Gecko 2.0 | Firefox 4.0 | SeaMonkey 2.1 | ||
| Gecko 5.0 | Firefox 5.0 | SeaMonkey 2.2 | ||
| Gecko 6.0 | Firefox 6.0 | SeaMonkey 2.3 | ||
| Gecko 7.0 | Firefox 7.0 | SeaMonkey 2.4 | ||
| Gecko 8.0 | Firefox 8.0 | SeaMonkey 2.5 | ||
| Gecko 9.0 | Firefox 9.0 | SeaMonkey 2.6 | ||
| Gecko 10.0 | Firefox 10.0 | Firefox ESR 10 | SeaMonkey 2.7 | |
| Gecko 11.0 | Firefox 11.0 | SeaMonkey 2.8 | ||
| Gecko 12.0 | Firefox 12.0 | SeaMonkey 2.9 | ||
| Gecko 13.0 | Firefox 13.0 | SeaMonkey 2.10 | ||
| Gecko 14.0 | Firefox 14.0 | SeaMonkey 2.11 | ||
| Gecko 15.0 | Firefox 15.0 | Firefox ESR 17 | SeaMonkey 2.12 | |
| Gecko 16.0 | Firefox 16.0 | SeaMonkey 2.13 | ||
| Gecko 17.0 | Firefox 17.0 | SeaMonkey 2.14 | ||
| Gecko 18.0 | Firefox 18.0 | SeaMonkey 2.15 | ||
| Gecko 19.0 | Firefox 19.0 | SeaMonkey 2.16 | ||
| Gecko 20.0 | Firefox 20.0 | SeaMonkey 2.17 | ||
| Gecko 21.0 | Firefox 21.0 | SeaMonkey 2.18 | ||
| Gecko 22.0 | Firefox 22.0 | SeaMonkey 2.19 | ||
| Gecko 23.0 | Firefox 23.0 | SeaMonkey 2.20 | ||
| Gecko 24.0 | Firefox 24.0 | Firefox ESR 24 | SeaMonkey 2.21 | |
| Gecko 25.0 | Firefox 25.0 | SeaMonkey 2.22 | ||
| Gecko 26.0 | Firefox 26.0 | SeaMonkey 2.23 | ||
| Gecko 27.0 | Firefox 27.0 | SeaMonkey 2.24 | ||
| Gecko 28.0 | Firefox 28.0 | SeaMonkey 2.25 | ||
| Gecko 29.0 | Firefox 29.0 | SeaMonkey 2.26 | ||
| Gecko 30.0 | Firefox 30.0 | |||
| Gecko 31.0 | Firefox 31.0 | Firefox ESR 31 | ||
| Gecko 32.0 | Firefox 32.0 | SeaMonkey 2.29 | ||
| Gecko 33.0 | Firefox 33.1 | SeaMonkey 2.30 | ||
| Gecko 34.0 | Firefox 34.0 | SeaMonkey 2.31 | ||
| Gecko 35.0 | Firefox 35.0 | SeaMonkey 2.32 | ||
| Gecko 36.0 | Firefox 36.0 | SeaMonkey 2.33 | ||
| Gecko 37.0 | Firefox 37.0 | |||
| Gecko 38.0 | Firefox 38.0 | Firefox ESR 38 | SeaMonkey 2.35 | |
| Gecko 39.0 | Firefox 39.0 | |||
| Gecko 40.0 | Firefox 40.0 | |||
| Gecko 41.0 | Firefox 41.0 | SeaMonkey 2.38 | ||
| Gecko 42.0 | Firefox 42.0 | SeaMonkey 2.39 | ||
| Gecko 43.0 | Firefox 43.0 | SeaMonkey 2.40 | ||
| Gecko 44.0 | Firefox 44.0 | |||
| Gecko 45.0 | Firefox 45.0 | Firefox ESR 45 | ||
| Gecko 46.0 | Firefox 46.0 | |||
| Gecko 47.0 | Firefox 47.0 | |||
| Gecko 48.0 | Firefox 48.0 | |||
| Gecko 49.0 | Firefox 49.0 | SeaMonkey 2.46 | ||
| Gecko 50.0 | Firefox 50.0 | |||
| Gecko 51.0 | Firefox 51.0 | SeaMonkey 2.48 | ||
| Gecko 52.0 | Firefox 52.0 | Firefox ESR 60–60.9 | SeaMonkey 2.49 | |
| Gecko 53.0 | Firefox 53.0 | |||
| Gecko 54.0 | Firefox 54.0 | |||
| Gecko 55.0 | Firefox 55.0 | |||
| Gecko 56.0 | Firefox 56.0 |
| EDGE::HTML |
|---|
| Edge 12 |
| Edge 13 |
| Edge 14 |
| Edge 15 |
| Edge 16 |
| Edge 17 |
| Edge 18 |
Some people use Opera’s Presto-based browsers, even though Opera abandoned them many years ago.
| ENGINE | OPERA | |
|---|---|---|
| Presto 1.0 | Opera 7 | |
| Presto ?.? | Opera 8 | |
| Presto 2.1.1 | Opera 9 | |
| Presto 2.2 | Opera 10.00–10.10 | |
| Presto 2.5 | Opera 10.5x | |
| Presto 2.6 | Opera 10.6x | |
| Presto 2.7 | Opera 11.0x | |
| Presto 2.8 | Opera 11.1x | |
| Presto 2.9 | Opera 11.5x | |
| Presto 2.10 | Opera 11.6x | |
| Presto 2.10 | Opera 12.0x | |
Trident is used by IE4–11, MSN Explorer, Netscape 8, most AOL browsers, Avant, Maxthon, SlimBrowser, and many more).
The numbering of Internet Explorer’s browser engine became really strange after IE7: IE8 uses Trident 4, but IE6 uses Trident IV; and IE9 uses Trident 5, but IE7 uses Trident V. Presumably no one at Microsoft knows that IV is 4, or V is 5: the engine for IE8 should have been called Trident VI or Trident 6; and the engine for IE9 should have been called Trident VII or Trident 7.
| ENGINE | INTERNET EXPLORER |
|---|---|
| Trident I | IE 4.0x |
| Trident II | IE 5.0x |
| Trident III | IE 5.5x |
| Trident IV | IE 6 |
| Trident V | IE 7 |
| Trident 4 | IE 8 |
| Trident 5 | IE 9 |
| Trident 6 | IE 10 |
| Trident 7 | IE 11 |
| Trident 8 | IE 11 // Windows 10 |
There are a few principles a designer should consider when trying to identify browser engines:
Identifying the engine should rarely be necessary: if you design to the standards, pages should work well without browser-specific code. Exception: old versions of IE often require some IE-specific code.
Identifying the version of the engine should even more rarely be necessary: if you design pages to gracefully degrade with older browsers — i.e. to work with older browsers, though perhaps less lovely — pages should work well without version-specific code. Exception: old versions of IE often require some version-specific code.
It is better to identify the browser engine than it’s to identify the browser: it’s the browser engine that does the rendering, and several browsers may use the same browser engine.
It is better to use Internet Explorer Conditional Comments to reveal IE-specific code, because conditional comments are absolutely reliable: they work even if JavaScript is disabled, and they can’t be tricked by browser spoofing.
It is better, when a JavaScript-based browser sniffer must be used, to use a proven, standard module
to identify the engine. The module should use Internet
Explorer Conditional Comments to identify IE, and should analyze the lowercase equivalent of navigator.userAgent to identify other browsers.
It is critical to examine the userAgent string carefully to minimize the risk of being fooled by browser spoofing. For example, since “gecko” appears in the Safari userAgent string, but Safari isn’t a Gecko browser, it’s wrong to assume that “gecko” indicates a Gecko browser.
This author has observed the following aspects of the lowercase equivalent of the userAgent string; this information is useful in creating an effective browser sniffer:
A sample browser sniffer exists which applies the above principles.