Analysis Report

Shared security patch analysis results

AI Used: DEEPSEEK deepseek-chat
Share this analysis
6017 filtered / 6017 total files
gfx/wr/webrender/src/image_tiling.rs AI: Not sure
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/gfx/wr/webrender/src/image_tiling.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/gfx/wr/webrender/src/image_tiling.rs@@ -45,6 +45,12 @@     current_origin: LayoutPoint,     initial_origin: LayoutPoint,     stride: LayoutSize,+}++impl RepetitionIterator {+    pub fn num_repetitions(&self) -> usize {+        (self.y_count * self.x_count) as usize+    } } impl Iterator for RepetitionIterator {
AI Analysis
Analysis of the provided code diff:

1. Vulnerability Existed: not sure
   [Potential Integer Overflow] [gfx/wr/webrender/src/image_tiling.rs] [Lines 45-51]
   [Old Code: No explicit method to calculate total repetitions]
   [Fixed Code: Added num_repetitions() method that multiplies y_count and x_count]

Note: While the diff shows the addition of a num_repetitions() method, it's not clear if this was fixing a specific security vulnerability or just adding functionality. The multiplication of y_count and x_count could potentially lead to integer overflow if not properly checked, but there's no explicit evidence this was a vulnerability in the old code. The change appears to be more of a feature addition than a security fix.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
gfx/2d/Swizzle.cpp AI: 3 vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/gfx/2d/Swizzle.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/gfx/2d/Swizzle.cpp@@ -10,6 +10,7 @@ #include "Tools.h" #include "mozilla/CheckedInt.h" #include "mozilla/EndianUtils.h"+#include "mozilla/UniquePtr.h" #ifdef USE_SSE2 #  include "mozilla/SSE.h"@@ -18,6 +19,8 @@ #ifdef USE_NEON #  include "mozilla/arm.h" #endif++#include <new> namespace mozilla { namespace gfx {@@ -1185,6 +1188,92 @@   MOZ_ASSERT(false, "Unsupported swizzle formats");   return false;+}++static bool SwizzleYFlipDataInternal(const uint8_t* aSrc, int32_t aSrcStride,+                                     SurfaceFormat aSrcFormat, uint8_t* aDst,+                                     int32_t aDstStride,+                                     SurfaceFormat aDstFormat,+                                     const IntSize& aSize,+                                     SwizzleRowFn aSwizzleFn) {+  if (!aSwizzleFn) {+    return false;+  }++  // Guarantee our width and height are both greater than zero.+  if (aSize.IsEmpty()) {+    return true;+  }++  // Unlike SwizzleData/PremultiplyData, we don't use the stride gaps directly,+  // but we can use it to verify that the stride is valid for our width and+  // format.+  int32_t srcGap = GetStrideGap(aSize.width, aSrcFormat, aSrcStride);+  int32_t dstGap = GetStrideGap(aSize.width, aDstFormat, aDstStride);+  MOZ_ASSERT(srcGap >= 0 && dstGap >= 0);+  if (srcGap < 0 || dstGap < 0) {+    return false;+  }++  // Swapping/swizzling to a new buffer is trivial.+  if (aSrc != aDst) {+    const uint8_t* src = aSrc;+    const uint8_t* srcEnd = aSrc + aSize.height * aSrcStride;+    uint8_t* dst = aDst + (aSize.height - 1) * aDstStride;+    while (src < srcEnd) {+      aSwizzleFn(src, dst, aSize.width);+      src += aSrcStride;+      dst -= aDstStride;+    }+    return true;+  }++  if (aSrcStride != aDstStride) {+    return false;+  }++  // If we are swizzling in place, then we need a temporary row buffer.+  UniquePtr<uint8_t[]> rowBuffer(new (std::nothrow) uint8_t[aDstStride]);+  if (!rowBuffer) {+    return false;+  }++  // Swizzle and swap the top and bottom rows until we meet in the middle.+  int32_t middleRow = aSize.height / 2;+  uint8_t* top = aDst;+  uint8_t* bottom = aDst + (aSize.height - 1) * aDstStride;+  for (int32_t row = 0; row < middleRow; ++row) {+    memcpy(rowBuffer.get(), bottom, aDstStride);+    aSwizzleFn(top, bottom, aSize.width);+    aSwizzleFn(rowBuffer.get(), top, aSize.width);+    top += aDstStride;+    bottom -= aDstStride;+  }++  // If there is an odd numbered row, we haven't swizzled it yet.+  if (aSize.height % 2 == 1) {+    top = aDst + middleRow * aDstStride;+    aSwizzleFn(top, top, aSize.width);+  }+  return true;+}++bool SwizzleYFlipData(const uint8_t* aSrc, int32_t aSrcStride,+                      SurfaceFormat aSrcFormat, uint8_t* aDst,+                      int32_t aDstStride, SurfaceFormat aDstFormat,+                      const IntSize& aSize) {+  return SwizzleYFlipDataInternal(aSrc, aSrcStride, aSrcFormat, aDst,+                                  aDstStride, aDstFormat, aSize,+                                  SwizzleRow(aSrcFormat, aDstFormat));+}++bool PremultiplyYFlipData(const uint8_t* aSrc, int32_t aSrcStride,+                          SurfaceFormat aSrcFormat, uint8_t* aDst,+                          int32_t aDstStride, SurfaceFormat aDstFormat,+                          const IntSize& aSize) {+  return SwizzleYFlipDataInternal(aSrc, aSrcStride, aSrcFormat, aDst,+                                  aDstStride, aDstFormat, aSize,+                                  PremultiplyRow(aSrcFormat, aDstFormat)); } SwizzleRowFn SwizzleRow(SurfaceFormat aSrcFormat, SurfaceFormat aDstFormat) {
AI Analysis
Analyzing the provided code diff, here are the potential security vulnerabilities:

1. Vulnerability Existed: yes
Buffer Overflow Vulnerability [File] gfx/2d/Swizzle.cpp [Lines] 1185-1280
[Old Code]
No previous implementation of SwizzleYFlipDataInternal existed
[Fixed Code]
Added new function SwizzleYFlipDataInternal with proper bounds checking (srcGap/dstGap validation) and memory allocation checks (rowBuffer)

2. Vulnerability Existed: yes
Memory Allocation Vulnerability [File] gfx/2d/Swizzle.cpp [Lines] 1232-1234
[Old Code]
No previous implementation
[Fixed Code]
Added proper memory allocation checking with std::nothrow and UniquePtr for rowBuffer

3. Vulnerability Existed: yes
Integer Overflow Vulnerability [File] gfx/2d/Swizzle.cpp [Lines] 1209-1212
[Old Code]
No previous implementation
[Fixed Code]
Added CheckedInt usage through GetStrideGap to prevent potential integer overflows in stride calculations

4. Vulnerability Existed: not sure
Potential Race Condition [File] gfx/2d/Swizzle.cpp [Lines] 1214-1226
[Old Code]
No previous implementation
[Fixed Code]
Added in-place swizzling with temporary buffer, but unclear if this needs thread safety considerations

The main security improvements appear to be:
1. Proper bounds checking for buffer operations
2. Safe memory allocation patterns
3. Prevention of integer overflows in calculations
4. Proper handling of in-place operations with temporary buffers

The changes show good security practices being implemented where none existed before, particularly around memory safety and bounds checking.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arc.end.worker.js AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arc.end.worker.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arc.end.worker.js@@ -13,8 +13,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50);@@ -25,7 +25,7 @@ ctx.arc(-100, 0, 25, -Math.PI/2, Math.PI/2, true); ctx.lineTo(100, 25); ctx.stroke();-_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");+_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255"); t.done(); });
AI Analysis
Based on the provided code diff, here's the analysis following the required format:

Vulnerability Existed: no
[No specific vulnerability] [testing/web-platform/tests/html/canvas/offscreen/path-objects/2d.path.arc.end.worker.js] [Lines 13-25]
[Old Code]
var offscreenCanvas = new OffscreenCanvas(100, 50);
var ctx = offscreenCanvas.getContext('2d');
...
_assertPixel(offscreenCanvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");
[Fixed Code]
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
...
_assertPixel(canvas, 50,25, 0,255,0,255, "50,25", "0,255,0,255");

Additional Details:
The changes appear to be purely variable renaming (from 'offscreenCanvas' to 'canvas') with no security implications. The functionality remains identical, and there are no security vulnerabilities being addressed in this diff. The modification seems to be for code consistency or readability rather than security fixes.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
testing/web-platform/tests/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.html AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/text/2d.text.drawing.style.textRendering.settings.html@@ -17,8 +17,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); // Setting textRendering with lower cases _assertSame(ctx.textRendering, "auto", "ctx.textRendering", "\"auto\"");
AI Analysis
Analysis of the provided code diff:

1. Vulnerability Existed: no
   No security vulnerability found [File] [Lines 17-18]
   Old Code:
   var offscreenCanvas = new OffscreenCanvas(100, 50);
   var ctx = offscreenCanvas.getContext('2d');

   Fixed Code:
   var canvas = new OffscreenCanvas(100, 50);
   var ctx = canvas.getContext('2d');

Additional Notes:
- The change appears to be purely a variable name change from `offscreenCanvas` to `canvas`
- No security implications are evident in this change
- The modification doesn't affect any security-related functionality or introduce/remove any security controls
- This is likely a code style or consistency improvement rather than a security fix
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
third_party/rust/wgpu-core/src/conv.rs AI: Not sure
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/third_party/rust/wgpu-core/src/conv.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/rust/wgpu-core/src/conv.rs@@ -69,6 +69,10 @@     u.set(         hal::TextureUses::COPY_SRC,         usage.contains(wgt::TextureUsages::COPY_SRC),+    );+    u.set(+        hal::TextureUses::COPY_DST,+        usage.contains(wgt::TextureUsages::COPY_DST),     );     u.set(         hal::TextureUses::RESOURCE,
AI Analysis
Analyzing the provided code diff:

1. Vulnerability Existed: not sure  
   [Potential Missing Texture Usage Validation] [third_party/rust/wgpu-core/src/conv.rs] [Lines 69+]  
   [Old Code]  
   ```rust
   u.set(
       hal::TextureUses::COPY_SRC,
       usage.contains(wgt::TextureUsages::COPY_SRC),
   );
   ```  
   [Fixed Code]  
   ```rust
   u.set(
       hal::TextureUses::COPY_SRC,
       usage.contains(wgt::TextureUsages::COPY_SRC),
   );
   u.set(
       hal::TextureUses::COPY_DST,
       usage.contains(wgt::TextureUsages::COPY_DST),
   );
   ```

Details: The diff shows an addition of COPY_DST texture usage validation. While this doesn't appear to be fixing a known vulnerability, it could potentially prevent security issues related to improper texture usage validation if the missing check could have led to unauthorized memory operations. Without more context about the broader system, we can't be certain if this was actually exploitable. The change improves completeness of texture usage validation.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
third_party/rust/darling_core/src/util/mod.rs AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/third_party/rust/darling_core/src/util/mod.rs+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/third_party/rust/darling_core/src/util/mod.rs@@ -2,19 +2,20 @@ use std::ops::{BitAnd, BitOr, Deref, Not};-use syn;-use {FromMeta, Result};+use crate::{FromMeta, Result}; mod ident_string; mod ignored; mod over_ride;+mod parse_attribute; mod path_list;+mod spanned_value; mod with_original;-mod spanned_value; pub use self::ident_string::IdentString; pub use self::ignored::Ignored; pub use self::over_ride::Override;+pub use self::parse_attribute::parse_attribute_to_meta_list; pub use self::path_list::PathList; pub use self::spanned_value::SpannedValue; pub use self::with_original::WithOriginal;@@ -99,6 +100,7 @@     type Output = Self;     fn bitand(self, rhs: Self) -> Self {+        #[allow(clippy::suspicious_arithmetic_impl)]         (self.into() && rhs.into()).into()     } }@@ -107,6 +109,7 @@     type Output = Self;     fn bitor(self, rhs: Self) -> Self {+        #[allow(clippy::suspicious_arithmetic_impl)]         (self.into() || rhs.into()).into()     } }
AI Analysis
I'll analyze the provided code diff for security fixes following the specified format.

Vulnerability Existed: no
No specific vulnerability found [third_party/rust/darling_core/src/util/mod.rs] [Various lines]
[Old Code]
Various lines showing imports and implementations without clippy allow attributes
[Fixed Code]
Added #[allow(clippy::suspicious_arithmetic_impl)] for bitwise operation implementations

Additional details:
1. The changes are primarily:
   - Reorganization of imports (using crate-relative paths)
   - Addition of new module declarations
   - Addition of clippy allow attributes for suspicious arithmetic implementations
2. The clippy warning being suppressed (suspicious_arithmetic_impl) is more of a code style/possible logic error warning than a security vulnerability
3. No actual security vulnerabilities appear to have been fixed in this diff
4. The changes seem focused on code organization and lint handling rather than security fixes

The diff shows improvements in code organization and handling of linter warnings, but doesn't appear to address any specific security vulnerabilities. The suspicious_arithmetic_impl warning being suppressed is about potentially confusing operator implementations, not about security issues.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
dom/cache/test/mochitest/test_cache_orphaned_cache.html AI: Not sure
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/dom/cache/test/mochitest/test_cache_orphaned_cache.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/dom/cache/test/mochitest/test_cache_orphaned_cache.html@@ -64,7 +64,13 @@   "set": [["dom.caches.enabled", true],           ["dom.caches.testing.enabled", true],           ["dom.quotaManager.testing", true]],-}, function() {+}, async function() {+  // Bug 1746646: Make mochitests work with TCP enabled (cookieBehavior = 5)+  // Acquire storage access permission here so that the Cache API is avaialable+  SpecialPowers.wrap(document).notifyUserGestureActivation();+  await SpecialPowers.addPermission("storageAccessAPI", true, window.location.href);+  await SpecialPowers.wrap(document).requestStorageAccess();+   var name = "toBeOrphaned";   var cache = null;   var initialUsage = 0;
AI Analysis
Here's the analysis of the provided code diff:

Vulnerability Existed: not sure  
[Potential Cross-Site Storage Access Issue] [dom/cache/test/mochitest/test_cache_orphaned_cache.html] [Lines 64-70]  
[Old Code]  
}, function() {  
[Fixed Code]  
}, async function() {  
  // Bug 1746646: Make mochitests work with TCP enabled (cookieBehavior = 5)  
  // Acquire storage access permission here so that the Cache API is avaialable  
  SpecialPowers.wrap(document).notifyUserGestureActivation();  
  await SpecialPowers.addPermission("storageAccessAPI", true, window.location.href);  
  await SpecialPowers.wrap(document).requestStorageAccess();  

Additional Details:
The changes appear to be related to test functionality when Total Cookie Protection (TCP) is enabled (cookieBehavior = 5). While this isn't fixing a direct vulnerability in the production code, it's addressing test reliability under stricter security conditions. The changes ensure proper storage access permissions are granted before testing Cache API functionality, which could be related to preventing potential cross-site storage access issues in test scenarios. However, since this is test code and the changes are more about test reliability than fixing a security flaw, I'm marking this as "not sure" for vulnerability existence.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
docshell/base/nsDocShell.cpp AI: Not sure
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/docshell/base/nsDocShell.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/docshell/base/nsDocShell.cpp@@ -88,6 +88,7 @@ #include "mozilla/dom/nsHTTPSOnlyUtils.h" #include "mozilla/dom/LoadURIOptionsBinding.h" #include "mozilla/dom/JSWindowActorChild.h"+#include "mozilla/dom/DocumentBinding.h" #include "mozilla/ipc/ProtocolUtils.h" #include "mozilla/net/DocumentChannel.h" #include "mozilla/net/DocumentChannelChild.h"@@ -389,7 +390,8 @@       mWillChangeProcess(false),       mIsNavigating(false),       mSuspendMediaWhenInactive(false),-      mForcedAutodetection(false) {+      mForcedAutodetection(false),+      mCheckingSessionHistory(false) {   // If no outer window ID was provided, generate a new one.   if (aContentWindowID == 0) {     mContentWindowID = nsContentUtils::GenerateWindowId();@@ -890,6 +892,83 @@   return mActiveEntryIsLoadingFromSessionHistory; }+// StopDetector is modeled similarly to OnloadBlocker; it is a rather+// dummy nsIRequest implementation which can be added to an nsILoadGroup to+// detect Cancel calls.+class StopDetector final : public nsIRequest {+ public:+  StopDetector() = default;++  NS_DECL_ISUPPORTS+  NS_DECL_NSIREQUEST++  bool Canceled() { return mCanceled; }++ private:+  ~StopDetector() = default;++  bool mCanceled = false;+};++NS_IMPL_ISUPPORTS(StopDetector, nsIRequest)++NS_IMETHODIMP+StopDetector::GetName(nsACString& aResult) {+  aResult.AssignLiteral("about:stop-detector");+  return NS_OK;+}++NS_IMETHODIMP+StopDetector::IsPending(bool* aRetVal) {+  *aRetVal = true;+  return NS_OK;+}++NS_IMETHODIMP+StopDetector::GetStatus(nsresult* aStatus) {+  *aStatus = NS_OK;+  return NS_OK;+}++NS_IMETHODIMP+StopDetector::Cancel(nsresult aStatus) {+  mCanceled = true;+  return NS_OK;+}++NS_IMETHODIMP+StopDetector::Suspend(void) { return NS_OK; }+NS_IMETHODIMP+StopDetector::Resume(void) { return NS_OK; }++NS_IMETHODIMP+StopDetector::GetLoadGroup(nsILoadGroup** aLoadGroup) {+  *aLoadGroup = nullptr;+  return NS_OK;+}++NS_IMETHODIMP+StopDetector::SetLoadGroup(nsILoadGroup* aLoadGroup) { return NS_OK; }++NS_IMETHODIMP+StopDetector::GetLoadFlags(nsLoadFlags* aLoadFlags) {+  *aLoadFlags = nsIRequest::LOAD_NORMAL;+  return NS_OK;+}++NS_IMETHODIMP+StopDetector::GetTRRMode(nsIRequest::TRRMode* aTRRMode) {+  return GetTRRModeImpl(aTRRMode);+}++NS_IMETHODIMP+StopDetector::SetTRRMode(nsIRequest::TRRMode aTRRMode) {+  return SetTRRModeImpl(aTRRMode);+}++NS_IMETHODIMP+StopDetector::SetLoadFlags(nsLoadFlags aLoadFlags) { return NS_OK; }+ bool nsDocShell::MaybeHandleSubframeHistory(     nsDocShellLoadState* aLoadState, bool aContinueHandlingSubframeHistory) {   // First, verify if this is a subframe.@@ -932,7 +1011,9 @@           !GetCreatedDynamically()) {         if (XRE_IsContentProcess()) {           dom::ContentChild* contentChild = dom::ContentChild::GetSingleton();-          if (contentChild) {+          nsCOMPtr<nsILoadGroup> loadGroup;+          GetLoadGroup(getter_AddRefs(loadGroup));+          if (contentChild && loadGroup && !mCheckingSessionHistory) {             RefPtr<Document> parentDoc = parentDS->GetDocument();             parentDoc->BlockOnload();             RefPtr<BrowsingContext> browsingContext = mBrowsingContext;@@ -940,11 +1021,34 @@                 mBrowsingContext->GetCurrentLoadIdentifier();             RefPtr<nsDocShellLoadState> loadState = aLoadState;             bool isNavigating = mIsNavigating;+            RefPtr<StopDetector> stopDetector = new StopDetector();+            loadGroup->AddRequest(stopDetector, nullptr);+            // Need to set mCheckingSessionHistory so that+            // GetIsAttemptingToNavigate() returns true.+            mCheckingSessionHistory = true;             auto resolve =                 [currentLoadIdentifier, browsingContext, parentDoc, loadState,-                 isNavigating](+                 isNavigating, loadGroup, stopDetector](                     mozilla::Maybe<LoadingSessionHistoryInfo>&& aResult) {+                  RefPtr<nsDocShell> docShell =+                      static_cast<nsDocShell*>(browsingContext->GetDocShell());+                  auto unblockParent = MakeScopeExit(+                      [loadGroup, stopDetector, parentDoc, docShell]() {+                        if (docShell) {+                          docShell->mCheckingSessionHistory = false;+                        }+                        loadGroup->RemoveRequest(stopDetector, nullptr, NS_OK);+                        parentDoc->UnblockOnload(false);+                      });++                  if (!docShell || !docShell->mCheckingSessionHistory) {+                    return;+                  }++                  if (stopDetector->Canceled()) {+                    return;+                  }                   if (currentLoadIdentifier ==                           browsingContext->GetCurrentLoadIdentifier() &&                       aResult.isSome()) {@@ -953,16 +1057,20 @@                     // history, index doesn't need to be updated.                     loadState->SetLoadIsFromSessionHistory(0, false);                   }-                  RefPtr<nsDocShell> docShell =-                      static_cast<nsDocShell*>(browsingContext->GetDocShell());-                  if (docShell) {-                    // We got the results back from the parent process, call-                    // LoadURI again with the possibly updated data.-                    docShell->LoadURI(loadState, isNavigating, true);-                  }-                  parentDoc->UnblockOnload(false);++                  // We got the results back from the parent process, call+                  // LoadURI again with the possibly updated data.+                  docShell->LoadURI(loadState, isNavigating, true);                 };-            auto reject = [parentDoc](mozilla::ipc::ResponseRejectReason) {+            auto reject = [loadGroup, stopDetector, browsingContext,+                           parentDoc](mozilla::ipc::ResponseRejectReason) {+              RefPtr<nsDocShell> docShell =+                  static_cast<nsDocShell*>(browsingContext->GetDocShell());+              if (docShell) {+                docShell->mCheckingSessionHistory = false;+              }+              // In practise reject shouldn't be called ever.+              loadGroup->RemoveRequest(stopDetector, nullptr, NS_OK);               parentDoc->UnblockOnload(false);             };             contentChild->SendGetLoadingSessionHistoryInfoFromParent(@@ -5548,6 +5656,7 @@   if (!aIsTransientAboutBlank && mozilla::SessionHistoryInParent()) {     bool expired = false;+    uint32_t cacheKey = 0;     nsCOMPtr<nsICacheInfoChannel> cacheChannel = do_QueryInterface(aRequest);     if (cacheChannel) {       // Check if the page has expired from cache@@ -5557,10 +5666,21 @@       if (expTime <= now) {         expired = true;       }++      // The checks for updating cache key are similar to the old session+      // history in OnNewURI. Try to update the cache key if+      //  - we should update session history and aren't doing a session+      //    history load.+      //  - we're doing a forced reload.+      if (((!mLoadingEntry || !mLoadingEntry->mLoadIsFromSessionHistory) &&+           mBrowsingContext->ShouldUpdateSessionHistory(mLoadType)) ||+          IsForceReloadType(mLoadType)) {+        cacheChannel->GetCacheKey(&cacheKey);+      }     }     MOZ_LOG(gSHLog, LogLevel::Debug, ("document %p Embed", this));-    MoveLoadingToActiveEntry(aPersist, expired);+    MoveLoadingToActiveEntry(aPersist, expired, cacheKey);   }   bool updateHistory = true;@@ -8804,6 +8924,7 @@     if (mActiveEntry) {       mActiveEntry->SetScrollPosition(scrollPos.x, scrollPos.y);       if (mBrowsingContext) {+        CollectWireframe();         if (XRE_IsParentProcess()) {           SessionHistoryEntry* entry =               mBrowsingContext->Canonical()->GetActiveSessionHistoryEntry();@@ -8893,15 +9014,17 @@         mActiveEntry->SetLayoutHistoryState(currentLayoutHistoryState);       }+      if (cacheKey != 0) {+        mActiveEntry->SetCacheKey(cacheKey);+      }       // We're passing in mCurrentURI, which could be null. SessionHistoryCommit       // does require a non-null uri if this is for a refresh load of the same       // URI, but in that case mCurrentURI won't be null here.       mBrowsingContext->SessionHistoryCommit(           *mLoadingEntry, mLoadType, mCurrentURI, hadActiveEntry, true, true,           /* No expiration update on the same document loads*/-          false);+          false, cacheKey);       // FIXME Need to set postdata.-      SetCacheKeyOnHistoryEntry(nullptr, cacheKey);       // Set the title for the SH entry for this target url so that       // SH menus in go/back/forward buttons won't be empty for this.@@ -10951,6 +11074,29 @@     mReferrerInfo = httpChannel->GetReferrerInfo();   }   return onLocationChangeNeeded;+}++void nsDocShell::CollectWireframe() {+  if (mozilla::SessionHistoryInParent() &&+      StaticPrefs::browser_history_collectWireframes() &&+      mBrowsingContext->IsTop() && mActiveEntry) {+    RefPtr<Document> doc = mContentViewer->GetDocument();+    Nullable<Wireframe> wireframe;+    doc->GetWireframeWithoutFlushing(false, wireframe);+    if (!wireframe.IsNull()) {+      if (XRE_IsParentProcess()) {+        SessionHistoryEntry* entry =+            mBrowsingContext->Canonical()->GetActiveSessionHistoryEntry();+        if (entry) {+          entry->SetWireframe(Some(wireframe.Value()));+        }+      } else {+        mozilla::Unused+            << ContentChild::GetSingleton()->SendSessionHistoryEntryWireframe(+                   mBrowsingContext, wireframe.Value());+      }+    }+  } } //*****************************************************************************@@ -11720,6 +11866,11 @@   // SessionHistoryEntry, but just replace its SessionHistoryInfo, that way the   // entry keeps identity but its data is replaced.   bool replace = aReplace && mActiveEntry;++  if (!replace) {+    CollectWireframe();+  }+   if (mActiveEntry) {     // Link this entry to the previous active entry.     mActiveEntry = MakeUnique<SessionHistoryInfo>(*mActiveEntry, aURI);@@ -11869,6 +12020,8 @@     if (scrollRestorationIsManual && layoutState) {       layoutState->ResetScrollState();     }++    CollectWireframe();   }   return rv;@@ -13379,7 +13532,7 @@     }   }-  return false;+  return mCheckingSessionHistory; } void nsDocShell::SetLoadingSessionHistoryInfo(@@ -13392,7 +13545,8 @@   mLoadingEntry = MakeUnique<LoadingSessionHistoryInfo>(aLoadingInfo); }-void nsDocShell::MoveLoadingToActiveEntry(bool aPersist, bool aExpired) {+void nsDocShell::MoveLoadingToActiveEntry(bool aPersist, bool aExpired,+                                          uint32_t aCacheKey) {   MOZ_ASSERT(mozilla::SessionHistoryInParent());   MOZ_LOG(gSHLog, LogLevel::Debug,@@ -13416,6 +13570,9 @@   }   if (mActiveEntry) {+    if (aCacheKey != 0) {+      mActiveEntry->SetCacheKey(aCacheKey);+    }     MOZ_ASSERT(loadingEntry);     uint32_t loadType =         mLoadType == LOAD_ERROR_PAGE ? mFailedLoadType : mLoadType;@@ -13425,7 +13582,7 @@     // URI, but in that case mCurrentURI won't be null here.     mBrowsingContext->SessionHistoryCommit(*loadingEntry, loadType, mCurrentURI,                                            hadActiveEntry, aPersist, false,-                                           aExpired);+                                           aExpired, aCacheKey);   } }
AI Analysis
Here's the analysis of the provided code diff for security fixes:

1. Vulnerability Existed: not sure
   Race Condition in Session History Handling [docshell/base/nsDocShell.cpp] [Lines 932-1060]
   Old Code: No explicit check for canceled requests during session history loading
   Fixed Code: Added StopDetector class and checks to handle canceled requests during session history loading

2. Vulnerability Existed: not sure
   Potential Information Leak [docshell/base/nsDocShell.cpp] [Lines 8804-8924]
   Old Code: No wireframe collection for session history
   Fixed Code: Added CollectWireframe() function to collect and store wireframe information for session history

3. Vulnerability Existed: not sure
   Cache Key Handling [docshell/base/nsDocShell.cpp] [Lines 5548-5666]
   Old Code: No proper cache key handling during session history updates
   Fixed Code: Added cache key handling and propagation through session history operations

4. Vulnerability Existed: not sure
   Session History State Management [docshell/base/nsDocShell.cpp] [Lines 13379-13532]
   Old Code: Simple return false for GetIsAttemptingToNavigate()
   Fixed Code: Added mCheckingSessionHistory flag and proper state management

Note: While these changes appear to be security-related improvements, I cannot definitively confirm they are fixing known vulnerabilities without additional context. The changes primarily focus on improving the robustness of session history handling and preventing potential race conditions or state mismanagement issues.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
devtools/shared/compatibility/dataset/browsers.json AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/devtools/shared/compatibility/dataset/browsers.json+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/devtools/shared/compatibility/dataset/browsers.json@@ -1 +1 @@-{"chrome":{"name":"Chrome","preview_name":"Canary","pref_url":"chrome://flags","releases":{"1":{"release_date":"2008-12-11","release_notes":"https://chromereleases.googleblog.com/2008/12/stable-release-google-chrome-is-out-of.html","status":"retired","engine":"WebKit","engine_version":"528"},"2":{"release_date":"2009-05-21","release_notes":"https://chromereleases.googleblog.com/2009/05/stable-update-google-chrome-2017228.html","status":"retired","engine":"WebKit","engine_version":"530"},"3":{"release_date":"2009-09-15","release_notes":"https://chromereleases.googleblog.com/2009/09/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"532"},"4":{"release_date":"2010-01-25","release_notes":"https://chromereleases.googleblog.com/2010/01/stable-channel-update_25.html","status":"retired","engine":"WebKit","engine_version":"532.5"},"5":{"release_date":"2010-05-25","release_notes":"https://chromereleases.googleblog.com/2010/05/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"533"},"6":{"release_date":"2010-09-02","release_notes":"https://chromereleases.googleblog.com/2010/09/stable-and-beta-channel-updates.html","status":"retired","engine":"WebKit","engine_version":"534.3"},"7":{"release_date":"2010-10-19","release_notes":"https://chromereleases.googleblog.com/2010/10/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"534.7"},"8":{"release_date":"2010-12-02","release_notes":"https://chromereleases.googleblog.com/2010/12/stable-beta-channel-updates.html","status":"retired","engine":"WebKit","engine_version":"534.10"},"9":{"release_date":"2011-02-03","release_notes":"https://chromereleases.googleblog.com/2011/02/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"534.13"},"10":{"release_date":"2011-03-08","release_notes":"https://chromereleases.googleblog.com/2011/03/chrome-stable-release.html","status":"retired","engine":"WebKit","engine_version":"534.16"},"11":{"release_date":"2011-04-27","release_notes":"https://chromereleases.googleblog.com/2011/04/chrome-stable-update.html","status":"retired","engine":"WebKit","engine_version":"534.24"},"12":{"release_date":"2011-06-07","release_notes":"https://chromereleases.googleblog.com/2011/06/chrome-stable-release.html","status":"retired","engine":"WebKit","engine_version":"534.30"},"13":{"release_date":"2011-08-02","release_notes":"https://chromereleases.googleblog.com/2011/08/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"535.1"},"14":{"release_date":"2011-09-16","release_notes":"https://chromereleases.googleblog.com/2011/09/stable-channel-update_16.html","status":"retired","engine":"WebKit","engine_version":"535.1"},"15":{"release_date":"2011-10-25","release_notes":"https://chromereleases.googleblog.com/2011/10/chrome-stable-release.html","status":"retired","engine":"WebKit","engine_version":"535.2"},"16":{"release_date":"2011-12-13","release_notes":"https://chromereleases.googleblog.com/2011/12/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"535.7"},"17":{"release_date":"2012-02-08","release_notes":"https://chromereleases.googleblog.com/2012/02/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"535.11"},"18":{"release_date":"2012-03-28","release_notes":"https://chromereleases.googleblog.com/2012/03/stable-channel-release-and-beta-channel.html","status":"retired","engine":"WebKit","engine_version":"535.19"},"19":{"release_date":"2012-05-15","release_notes":"https://chromereleases.googleblog.com/2012/05/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"536.5"},"20":{"release_date":"2012-06-26","release_notes":"https://chromereleases.googleblog.com/2012/06/stable-channel-update_26.html","status":"retired","engine":"WebKit","engine_version":"536.10"},"21":{"release_date":"2012-07-31","release_notes":"https://chromereleases.googleblog.com/2012/07/stable-channel-release.html","status":"retired","engine":"WebKit","engine_version":"537.1"},"22":{"release_date":"2012-09-25","release_notes":"https://chromereleases.googleblog.com/2012/09/stable-channel-update_25.html","status":"retired","engine":"WebKit","engine_version":"537.4"},"23":{"release_date":"2012-11-06","release_notes":"https://chromereleases.googleblog.com/2012/11/stable-channel-release-and-beta-channel.html","status":"retired","engine":"WebKit","engine_version":"537.11"},"24":{"release_date":"2013-01-10","release_notes":"https://chromereleases.googleblog.com/2013/01/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"537.17"},"25":{"release_date":"2013-02-21","release_notes":"https://chromereleases.googleblog.com/2013/02/stable-channel-update_21.html","status":"retired","engine":"WebKit","engine_version":"537.22"},"26":{"release_date":"2013-03-26","release_notes":"https://chromereleases.googleblog.com/2013/03/stable-channel-update_26.html","status":"retired","engine":"WebKit","engine_version":"537.31"},"27":{"release_date":"2013-05-21","release_notes":"https://chromereleases.googleblog.com/2013/05/stable-channel-release.html","status":"retired","engine":"WebKit","engine_version":"537.36"},"28":{"release_date":"2013-07-09","release_notes":"https://chromereleases.googleblog.com/2013/07/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"28"},"29":{"release_date":"2013-08-20","release_notes":"https://chromereleases.googleblog.com/2013/08/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"29"},"30":{"release_date":"2013-10-01","release_notes":"https://chromereleases.googleblog.com/2013/10/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"30"},"31":{"release_date":"2013-11-12","release_notes":"https://chromereleases.googleblog.com/2013/11/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"31"},"32":{"release_date":"2014-01-14","release_notes":"https://chromereleases.googleblog.com/2014/01/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"32"},"33":{"release_date":"2014-02-20","release_notes":"https://chromereleases.googleblog.com/2014/02/stable-channel-update_20.html","status":"retired","engine":"Blink","engine_version":"33"},"34":{"release_date":"2014-04-08","release_notes":"https://chromereleases.googleblog.com/2014/04/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"34"},"35":{"release_date":"2014-05-20","release_notes":"https://chromereleases.googleblog.com/2014/05/stable-channel-update_20.html","status":"retired","engine":"Blink","engine_version":"35"},"36":{"release_date":"2014-07-16","release_notes":"https://chromereleases.googleblog.com/2014/07/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"36"},"37":{"release_date":"2014-08-26","release_notes":"https://chromereleases.googleblog.com/2014/08/stable-channel-update_26.html","status":"retired","engine":"Blink","engine_version":"37"},"38":{"release_date":"2014-10-07","release_notes":"https://chromereleases.googleblog.com/2014/10/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"38"},"39":{"release_date":"2014-11-18","release_notes":"https://chromereleases.googleblog.com/2014/11/stable-channel-update_18.html","status":"retired","engine":"Blink","engine_version":"39"},"40":{"release_date":"2015-01-21","release_notes":"https://chromereleases.googleblog.com/2015/01/stable-update.html","status":"retired","engine":"Blink","engine_version":"40"},"41":{"release_date":"2015-03-03","release_notes":"https://chromereleases.googleblog.com/2015/03/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"41"},"42":{"release_date":"2015-04-14","release_notes":"https://chromereleases.googleblog.com/2015/04/stable-channel-update_14.html","status":"retired","engine":"Blink","engine_version":"42"},"43":{"release_date":"2015-05-19","release_notes":"https://chromereleases.googleblog.com/2015/05/stable-channel-update_19.html","status":"retired","engine":"Blink","engine_version":"43"},"44":{"release_date":"2015-07-21","release_notes":"https://chromereleases.googleblog.com/2015/07/stable-channel-update_21.html","status":"retired","engine":"Blink","engine_version":"44"},"45":{"release_date":"2015-09-01","release_notes":"https://chromereleases.googleblog.com/2015/09/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"45"},"46":{"release_date":"2015-10-13","release_notes":"https://chromereleases.googleblog.com/2015/10/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"46"},"47":{"release_date":"2015-12-01","release_notes":"https://chromereleases.googleblog.com/2015/12/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"47"},"48":{"release_date":"2016-01-20","release_notes":"https://chromereleases.googleblog.com/2016/01/stable-channel-update_20.html","status":"retired","engine":"Blink","engine_version":"48"},"49":{"release_date":"2016-03-02","release_notes":"https://chromereleases.googleblog.com/2016/03/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"49"},"50":{"release_date":"2016-04-13","release_notes":"https://chromereleases.googleblog.com/2016/04/stable-channel-update_13.html","status":"retired","engine":"Blink","engine_version":"50"},"51":{"release_date":"2016-05-25","release_notes":"https://chromereleases.googleblog.com/2016/05/stable-channel-update_25.html","status":"retired","engine":"Blink","engine_version":"51"},"52":{"release_date":"2016-07-20","release_notes":"https://chromereleases.googleblog.com/2016/07/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"52"},"53":{"release_date":"2016-08-31","release_notes":"https://chromereleases.googleblog.com/2016/08/stable-channel-update-for-desktop_31.html","status":"retired","engine":"Blink","engine_version":"53"},"54":{"release_date":"2016-10-12","release_notes":"https://chromereleases.googleblog.com/2016/10/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"54"},"55":{"release_date":"2016-12-01","release_notes":"https://chromereleases.googleblog.com/2016/12/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"55"},"56":{"release_date":"2017-01-25","release_notes":"https://chromereleases.googleblog.com/2017/01/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"56"},"57":{"release_date":"2017-03-09","release_notes":"https://chromereleases.googleblog.com/2017/03/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"57"},"58":{"release_date":"2017-04-19","release_notes":"https://chromereleases.googleblog.com/2017/04/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"58"},"59":{"release_date":"2017-06-05","release_notes":"https://chromereleases.googleblog.com/2017/06/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"59"},"60":{"release_date":"2017-07-25","release_notes":"https://chromereleases.googleblog.com/2017/07/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"60"},"61":{"release_date":"2017-09-05","release_notes":"https://chromereleases.googleblog.com/2017/09/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"61"},"62":{"release_date":"2017-10-17","release_notes":"https://chromereleases.googleblog.com/2017/10/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"62"},"63":{"release_date":"2017-12-06","release_notes":"https://chromereleases.googleblog.com/2017/12/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"63"},"64":{"release_date":"2018-01-23","release_notes":"https://chromereleases.googleblog.com/2018/01/stable-channel-update-for-desktop_24.html","status":"retired","engine":"Blink","engine_version":"64"},"65":{"release_date":"2018-03-06","release_notes":"https://chromereleases.googleblog.com/2018/03/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"65"},"66":{"release_date":"2018-04-17","release_notes":"https://chromereleases.googleblog.com/2018/04/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"66"},"67":{"release_date":"2018-05-29","release_notes":"https://chromereleases.googleblog.com/2018/05/stable-channel-update-for-desktop_58.html","status":"retired","engine":"Blink","engine_version":"67"},"68":{"release_date":"2018-07-24","release_notes":"https://chromereleases.googleblog.com/2018/07/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"68"},"69":{"release_date":"2018-09-04","release_notes":"https://chromereleases.googleblog.com/2018/09/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"69"},"70":{"release_date":"2018-10-16","release_notes":"https://chromereleases.googleblog.com/2018/10/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"70"},"71":{"release_date":"2018-12-04","release_notes":"https://chromereleases.googleblog.com/2018/12/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"71"},"72":{"release_date":"2019-01-29","release_notes":"https://chromereleases.googleblog.com/2019/01/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"72"},"73":{"release_date":"2019-03-12","release_notes":"https://chromereleases.googleblog.com/2019/03/stable-channel-update-for-desktop_12.html","status":"retired","engine":"Blink","engine_version":"73"},"74":{"release_date":"2019-04-23","release_notes":"https://chromereleases.googleblog.com/2019/04/stable-channel-update-for-desktop_23.html","status":"retired","engine":"Blink","engine_version":"74"},"75":{"release_date":"2019-06-04","release_notes":"https://chromereleases.googleblog.com/2019/06/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"75"},"76":{"release_date":"2019-07-30","release_notes":"https://chromereleases.googleblog.com/2019/07/stable-channel-update-for-desktop_30.html","status":"retired","engine":"Blink","engine_version":"76"},"77":{"release_date":"2019-09-10","release_notes":"https://chromereleases.googleblog.com/2019/09/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"77"},"78":{"release_date":"2019-10-22","release_notes":"https://chromereleases.googleblog.com/2019/10/stable-channel-update-for-desktop_22.html","status":"retired","engine":"Blink","engine_version":"78"},"79":{"release_date":"2019-12-10","release_notes":"https://chromereleases.googleblog.com/2019/12/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"79"},"80":{"release_date":"2020-02-04","release_notes":"https://chromereleases.googleblog.com/2020/02/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"80"},"81":{"release_date":"2020-04-07","release_notes":"https://chromereleases.googleblog.com/2020/04/stable-channel-update-for-desktop_7.html","status":"retired","engine":"Blink","engine_version":"81"},"83":{"release_date":"2020-05-19","release_notes":"https://chromereleases.googleblog.com/2020/05/stable-channel-update-for-desktop_19.html","status":"retired","engine":"Blink","engine_version":"83"},"84":{"release_date":"2020-07-27","release_notes":"https://chromereleases.googleblog.com/2020/07/stable-channel-update-for-desktop_27.html","status":"retired","engine":"Blink","engine_version":"84"},"85":{"release_date":"2020-08-25","release_notes":"https://chromereleases.googleblog.com/2020/08/stable-channel-update-for-desktop_25.html","status":"retired","engine":"Blink","engine_version":"85"},"86":{"release_date":"2020-10-20","release_notes":"https://chromereleases.googleblog.com/2020/10/stable-channel-update-for-desktop_20.html","status":"retired","engine":"Blink","engine_version":"86"},"87":{"release_date":"2020-11-17","release_notes":"https://chromereleases.googleblog.com/2020/11/stable-channel-update-for-desktop_17.html","status":"retired","engine":"Blink","engine_version":"87"},"88":{"release_date":"2021-01-19","release_notes":"https://chromereleases.googleblog.com/2021/01/stable-channel-update-for-desktop_19.html","status":"retired","engine":"Blink","engine_version":"88"},"89":{"release_date":"2021-03-02","release_notes":"https://chromereleases.googleblog.com/2021/03/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"89"},"90":{"release_date":"2021-04-13","release_notes":"https://chromereleases.googleblog.com/2021/04/stable-channel-update-for-desktop_14.html","status":"retired","engine":"Blink","engine_version":"90"},"91":{"release_date":"2021-05-25","release_notes":"https://chromereleases.googleblog.com/2021/05/stable-channel-update-for-desktop_25.html","status":"retired","engine":"Blink","engine_version":"91"},"92":{"release_date":"2021-07-20","release_notes":"https://chromereleases.googleblog.com/2021/07/stable-channel-update-for-desktop_20.html","status":"retired","engine":"Blink","engine_version":"92"},"93":{"release_date":"2021-08-31","release_notes":"https://chromereleases.googleblog.com/2021/08/stable-channel-update-for-desktop_31.html","status":"retired","engine":"Blink","engine_version":"93"},"94":{"release_date":"2021-09-21","release_notes":"https://chromereleases.googleblog.com/2021/09/stable-channel-update-for-desktop_21.html","status":"retired","engine":"Blink","engine_version":"94"},"95":{"release_date":"2021-10-19","release_notes":"https://chromereleases.googleblog.com/2021/10/stable-channel-update-for-desktop_19.html","status":"retired","engine":"Blink","engine_version":"95"},"96":{"release_date":"2021-11-15","release_notes":"https://chromereleases.googleblog.com/2021/11/stable-channel-update-for-desktop.html","status":"current","engine":"Blink","engine_version":"96"},"97":{"release_date":"2022-01-04","status":"beta","engine":"Blink","engine_version":"97"},"98":{"release_date":"2022-02-01","status":"nightly","engine":"Blink","engine_version":"98"}}},"chrome_android":{"name":"Chrome Android","pref_url":"chrome://flags","releases":{"18":{"release_date":"2012-06-27","release_notes":"https://chromereleases.googleblog.com/2012/06/chrome-for-android-out-of-beta.html","status":"retired","engine":"WebKit","engine_version":"535.19"},"25":{"release_date":"2013-02-27","release_notes":"https://chromereleases.googleblog.com/2013/02/chrome-for-android-update.html","status":"retired","engine":"WebKit","engine_version":"537.22"},"26":{"release_date":"2013-04-03","release_notes":"https://chromereleases.googleblog.com/2013/04/chrome-for-android-stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"537.31"},"27":{"release_date":"2013-05-22","release_notes":"https://chromereleases.googleblog.com/2013/05/chrome-for-android-update.html","status":"retired","engine":"WebKit","engine_version":"537.36"},"28":{"release_date":"2013-07-10","release_notes":"https://chromereleases.googleblog.com/2013/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"28"},"29":{"release_date":"2013-08-21","release_notes":"https://chromereleases.googleblog.com/2013/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"29"},"30":{"release_date":"2013-10-02","release_notes":"https://chromereleases.googleblog.com/2013/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"30"},"31":{"release_date":"2013-11-14","release_notes":"https://chromereleases.googleblog.com/2013/11/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"31"},"32":{"release_date":"2014-01-15","release_notes":"https://chromereleases.googleblog.com/2014/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"32"},"33":{"release_date":"2014-02-26","release_notes":"https://chromereleases.googleblog.com/2014/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"33"},"34":{"release_date":"2014-04-02","release_notes":"https://chromereleases.googleblog.com/2014/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"34"},"35":{"release_date":"2014-05-20","release_notes":"https://chromereleases.googleblog.com/2014/05/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"35"},"36":{"release_date":"2014-07-16","release_notes":"https://chromereleases.googleblog.com/2014/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"36"},"37":{"release_date":"2014-09-03","release_notes":"https://chromereleases.googleblog.com/2014/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"37"},"38":{"release_date":"2014-10-08","release_notes":"https://chromereleases.googleblog.com/2014/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"38"},"39":{"release_date":"2014-11-12","release_notes":"https://chromereleases.googleblog.com/2014/11/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"39"},"40":{"release_date":"2015-01-21","release_notes":"https://chromereleases.googleblog.com/2015/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"40"},"41":{"release_date":"2015-03-11","release_notes":"https://chromereleases.googleblog.com/2015/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"41"},"42":{"release_date":"2015-04-15","release_notes":"https://chromereleases.googleblog.com/2015/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"42"},"43":{"release_date":"2015-05-27","release_notes":"https://chromereleases.googleblog.com/2015/05/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"43"},"44":{"release_date":"2015-07-29","release_notes":"https://chromereleases.googleblog.com/2015/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"44"},"45":{"release_date":"2015-09-01","release_notes":"https://chromereleases.googleblog.com/2015/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"45"},"46":{"release_date":"2015-10-14","release_notes":"https://chromereleases.googleblog.com/2015/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"46"},"47":{"release_date":"2015-12-02","release_notes":"https://chromereleases.googleblog.com/2015/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"47"},"48":{"release_date":"2016-01-26","status":"retired","engine":"Blink","engine_version":"48"},"49":{"release_date":"2016-03-09","release_notes":"https://chromereleases.googleblog.com/2016/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"49"},"50":{"release_date":"2016-04-13","status":"retired","engine":"Blink","engine_version":"50"},"51":{"release_date":"2016-06-08","release_notes":"https://chromereleases.googleblog.com/2016/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"51"},"52":{"release_date":"2016-07-27","release_notes":"https://chromereleases.googleblog.com/2016/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"52"},"53":{"release_date":"2016-09-07","release_notes":"https://chromereleases.googleblog.com/2016/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"53"},"54":{"release_date":"2016-10-19","release_notes":"https://chromereleases.googleblog.com/2016/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"54"},"55":{"release_date":"2016-12-06","release_notes":"https://chromereleases.googleblog.com/2016/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"55"},"56":{"release_date":"2017-02-01","release_notes":"https://chromereleases.googleblog.com/2017/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"56"},"57":{"release_date":"2017-03-16","release_notes":"https://chromereleases.googleblog.com/2017/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"57"},"58":{"release_date":"2017-04-25","release_notes":"https://chromereleases.googleblog.com/2017/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"58"},"59":{"release_date":"2017-06-06","release_notes":"https://chromereleases.googleblog.com/2017/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"59"},"60":{"release_date":"2017-08-01","release_notes":"https://chromereleases.googleblog.com/2017/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"60"},"61":{"release_date":"2017-09-05","release_notes":"https://chromereleases.googleblog.com/2017/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"61"},"62":{"release_date":"2017-10-24","release_notes":"https://chromereleases.googleblog.com/2017/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"62"},"63":{"release_date":"2017-12-05","release_notes":"https://chromereleases.googleblog.com/2017/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"63"},"64":{"release_date":"2018-01-23","release_notes":"https://chromereleases.googleblog.com/2018/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"64"},"65":{"release_date":"2018-03-06","release_notes":"https://chromereleases.googleblog.com/2018/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"65"},"66":{"release_date":"2018-04-17","release_notes":"https://chromereleases.googleblog.com/2018/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"66"},"67":{"release_date":"2018-05-31","release_notes":"https://chromereleases.googleblog.com/2018/05/chrome-for-android-update_31.html","status":"retired","engine":"Blink","engine_version":"67"},"68":{"release_date":"2018-07-24","release_notes":"https://chromereleases.googleblog.com/2018/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"68"},"69":{"release_date":"2018-09-04","release_notes":"https://chromereleases.googleblog.com/2018/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"69"},"70":{"release_date":"2018-10-17","release_notes":"https://chromereleases.googleblog.com/2018/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"70"},"71":{"release_date":"2018-12-04","release_notes":"https://chromereleases.googleblog.com/2018/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"71"},"72":{"release_date":"2019-01-29","release_notes":"https://chromereleases.googleblog.com/2019/01/chrome-for-android-update_29.html","status":"retired","engine":"Blink","engine_version":"72"},"73":{"release_date":"2019-03-12","release_notes":"https://chromereleases.googleblog.com/2019/03/chrome-for-android-update_12.html","status":"retired","engine":"Blink","engine_version":"73"},"74":{"release_date":"2019-04-24","release_notes":"https://chromereleases.googleblog.com/2019/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"74"},"75":{"release_date":"2019-06-04","release_notes":"https://chromereleases.googleblog.com/2019/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"75"},"76":{"release_date":"2019-07-30","release_notes":"https://chromereleases.googleblog.com/2019/07/chrome-for-android-update_30.html","status":"retired","engine":"Blink","engine_version":"76"},"77":{"release_date":"2019-09-10","release_notes":"https://chromereleases.googleblog.com/2019/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"77"},"78":{"release_date":"2019-10-22","release_notes":"https://chromereleases.googleblog.com/2019/10/chrome-for-android-update_22.html","status":"retired","engine":"Blink","engine_version":"78"},"79":{"release_date":"2019-12-17","release_notes":"https://chromereleases.googleblog.com/2019/12/chrome-for-android-update_17.html","status":"retired","engine":"Blink","engine_version":"79"},"80":{"release_date":"2020-02-04","release_notes":"https://chromereleases.googleblog.com/2020/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"80"},"81":{"release_date":"2020-04-07","release_notes":"https://chromereleases.googleblog.com/2020/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"81"},"83":{"release_date":"2020-05-19","release_notes":"https://chromereleases.googleblog.com/2020/05/chrome-for-android-update_19.html","status":"retired","engine":"Blink","engine_version":"83"},"84":{"release_date":"2020-07-27","release_notes":"https://chromereleases.googleblog.com/2020/07/chrome-for-android-update_27.html","status":"retired","engine":"Blink","engine_version":"84"},"85":{"release_date":"2020-08-25","release_notes":"https://chromereleases.googleblog.com/2020/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"85"},"86":{"release_date":"2020-10-20","release_notes":"https://chromereleases.googleblog.com/2020/10/chrome-for-android-update_20.html","status":"retired","engine":"Blink","engine_version":"86"},"87":{"release_date":"2020-11-17","release_notes":"https://chromereleases.googleblog.com/2020/11/chrome-for-android-update_17.html","status":"retired","engine":"Blink","engine_version":"87"},"88":{"release_date":"2021-01-19","release_notes":"https://chromereleases.googleblog.com/2021/01/chrome-for-android-update_19.html","status":"retired","engine":"Blink","engine_version":"88"},"89":{"release_date":"2021-03-02","release_notes":"https://chromereleases.googleblog.com/2021/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"89"},"90":{"release_date":"2021-04-13","release_notes":"https://chromereleases.googleblog.com/2021/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"90"},"91":{"release_date":"2021-05-25","release_notes":"https://chromereleases.googleblog.com/2021/05/chrome-for-android-update_01607414128.html","status":"retired","engine":"Blink","engine_version":"91"},"92":{"release_date":"2021-07-20","release_notes":"https://chromereleases.googleblog.com/2021/07/chrome-for-android-update_01500789893.html","status":"retired","engine":"Blink","engine_version":"92"},"93":{"release_date":"2021-08-31","release_notes":"https://chromereleases.googleblog.com/2021/08/chrome-for-android-update_0881967577.html","status":"retired","engine":"Blink","engine_version":"93"},"94":{"release_date":"2021-09-21","release_notes":"https://chromereleases.googleblog.com/2021/09/chrome-for-android-update_21.html","status":"retired","engine":"Blink","engine_version":"94"},"95":{"release_date":"2021-10-19","release_notes":"https://chromereleases.googleblog.com/2021/10/chrome-for-android-update_01703513036.html","status":"retired","engine":"Blink","engine_version":"95"},"96":{"release_date":"2021-11-15","release_notes":"https://chromereleases.googleblog.com/2021/11/chrome-for-android-update.html","status":"current","engine":"Blink","engine_version":"96"},"97":{"release_date":"2022-01-04","status":"beta","engine":"Blink","engine_version":"97"},"98":{"release_date":"2022-02-01","status":"nightly","engine":"Blink","engine_version":"98"}}},"deno":{"name":"Deno","releases":{"1.0":{"release_date":"2020-05-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.0.0","status":"retired","engine":"V8","engine_version":"8.4"},"1.1":{"release_date":"2020-06-12","release_notes":"https://github.com/denoland/deno/releases/tag/v1.1.0","status":"retired","engine":"V8","engine_version":"8.4"},"1.2":{"release_date":"2020-07-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.2.0","status":"retired","engine":"V8","engine_version":"8.5"},"1.3":{"release_date":"2020-08-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.3.0","status":"retired","engine":"V8","engine_version":"8.6"},"1.4":{"release_date":"2020-09-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.4.0","status":"retired","engine":"V8","engine_version":"8.7"},"1.5":{"release_date":"2020-10-27","release_notes":"https://github.com/denoland/deno/releases/tag/v1.5.0","status":"retired","engine":"V8","engine_version":"8.7"},"1.6":{"release_date":"2020-12-08","release_notes":"https://github.com/denoland/deno/releases/tag/v1.6.0","status":"retired","engine":"V8","engine_version":"8.8"},"1.7":{"release_date":"2021-01-19","release_notes":"https://github.com/denoland/deno/releases/tag/v1.7.0","status":"retired","engine":"V8","engine_version":"8.9"},"1.8":{"release_date":"2021-03-02","release_notes":"https://github.com/denoland/deno/releases/tag/v1.8.0","status":"retired","engine":"V8","engine_version":"9.0"},"1.9":{"release_date":"2021-04-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.9.0","status":"retired","engine":"V8","engine_version":"9.1"},"1.10":{"release_date":"2021-05-11","release_notes":"https://github.com/denoland/deno/releases/tag/v1.10.1","status":"retired","engine":"V8","engine_version":"9.1"},"1.11":{"release_date":"2021-06-08","release_notes":"https://github.com/denoland/deno/releases/tag/v1.11.0","status":"retired","engine":"V8","engine_version":"9.1"},"1.12":{"release_date":"2021-07-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.12.0","status":"retired","engine":"V8","engine_version":"9.2"},"1.13":{"release_date":"2021-08-10","release_notes":"https://github.com/denoland/deno/releases/tag/v1.13.0","status":"retired","engine":"V8","engine_version":"9.3"},"1.14":{"release_date":"2021-09-14","release_notes":"https://github.com/denoland/deno/releases/tag/v1.14.0","status":"retired","engine":"V8","engine_version":"9.4"},"1.15":{"release_date":"2021-10-12","release_notes":"https://github.com/denoland/deno/releases/tag/v1.15.0","status":"retired","engine":"V8","engine_version":"9.5"},"1.16":{"release_date":"2021-11-08","release_notes":"https://github.com/denoland/deno/releases/tag/v1.16.0","status":"current","engine":"V8","engine_version":"9.7"},"1.17":{"release_date":"2021-12-21","status":"nightly","engine":"V8","engine_version":"9.7"}}},"edge":{"name":"Edge","pref_url":"about:flags","releases":{"12":{"release_date":"2015-07-28","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-12","status":"retired","engine":"EdgeHTML","engine_version":"12"},"13":{"release_date":"2015-11-12","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-13","status":"retired","engine":"EdgeHTML","engine_version":"13"},"14":{"release_date":"2016-08-02","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-14","status":"retired","engine":"EdgeHTML","engine_version":"14"},"15":{"release_date":"2017-04-05","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-15","status":"retired","engine":"EdgeHTML","engine_version":"15"},"16":{"release_date":"2017-10-17","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-16","status":"retired","engine":"EdgeHTML","engine_version":"16"},"17":{"release_date":"2018-04-30","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-17","status":"retired","engine":"EdgeHTML","engine_version":"17"},"18":{"release_date":"2018-10-02","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new","status":"retired","engine":"EdgeHTML","engine_version":"18"},"79":{"release_date":"2020-01-15","release_notes":"https://blogs.windows.com/windowsexperience/2020/01/15/new-year-new-browser-the-new-microsoft-edge-is-out-of-preview-and-now-available-for-download/","status":"retired","engine":"Blink","engine_version":"79"},"80":{"release_date":"2020-02-07","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-80036148-february-7","status":"retired","engine":"Blink","engine_version":"80"},"81":{"release_date":"2020-04-13","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-81041653-april-13","status":"retired","engine":"Blink","engine_version":"81"},"83":{"release_date":"2020-05-21","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-83047837-may-21","status":"retired","engine":"Blink","engine_version":"83"},"84":{"release_date":"2020-07-16","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-84052240-july-16","status":"retired","engine":"Blink","engine_version":"84"},"85":{"release_date":"2020-08-27","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-85056441-august-27","status":"retired","engine":"Blink","engine_version":"85"},"86":{"release_date":"2020-10-09","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-86062238-october-9","status":"retired","engine":"Blink","engine_version":"86"},"87":{"release_date":"2020-11-19","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-87066441-november-19","status":"retired","engine":"Blink","engine_version":"87"},"88":{"release_date":"2021-01-21","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-88070550-january-21","status":"retired","engine":"Blink","engine_version":"88"},"89":{"release_date":"2021-03-04","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-89077445-march-4","status":"retired","engine":"Blink","engine_version":"89"},"90":{"release_date":"2021-04-15","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-90081839-april-15","status":"retired","engine":"Blink","engine_version":"90"},"91":{"release_date":"2021-05-27","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-91086437-may-27","status":"retired","engine":"Blink","engine_version":"91"},"92":{"release_date":"2021-07-22","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-92090255-july-22","status":"retired","engine":"Blink","engine_version":"92"},"93":{"release_date":"2021-09-02","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-93096138-september-02","status":"retired","engine":"Blink","engine_version":"93"},"94":{"release_date":"2021-09-24","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-94099231-september-24","status":"retired","engine":"Blink","engine_version":"94"},"95":{"release_date":"2021-10-21","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-950102030-october-21","status":"retired","engine":"Blink","engine_version":"95"},"96":{"release_date":"2021-11-19","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-960105429-november-19","status":"current","engine":"Blink","engine_version":"96"},"97":{"status":"beta","engine":"Blink","engine_version":"97"},"98":{"status":"nightly","engine":"Blink","engine_version":"98"}}},"firefox":{"name":"Firefox","preview_name":"Nightly","pref_url":"about:config","releases":{"1":{"release_date":"2004-11-09","release_notes":"http://website-archive.mozilla.org/www.mozilla.org/firefox_releasenotes/en-US/firefox/releases/1.0.html","status":"retired","engine":"Gecko","engine_version":"1.7"},"2":{"release_date":"2006-10-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/2","status":"retired","engine":"Gecko","engine_version":"1.8.1"},"3":{"release_date":"2008-06-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/3","status":"retired","engine":"Gecko","engine_version":"1.9"},"4":{"release_date":"2011-03-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/4","status":"retired","engine":"Gecko","engine_version":"2"},"5":{"release_date":"2011-06-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/5","status":"retired","engine":"Gecko","engine_version":"5"},"6":{"release_date":"2011-08-16","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/6","status":"retired","engine":"Gecko","engine_version":"6"},"7":{"release_date":"2011-09-27","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/7","status":"retired","engine":"Gecko","engine_version":"7"},"8":{"release_date":"2011-11-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/8","status":"retired","engine":"Gecko","engine_version":"8"},"9":{"release_date":"2011-12-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/9","status":"retired","engine":"Gecko","engine_version":"9"},"10":{"release_date":"2012-01-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/10","status":"retired","engine":"Gecko","engine_version":"10"},"11":{"release_date":"2012-03-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/11","status":"retired","engine":"Gecko","engine_version":"11"},"12":{"release_date":"2012-04-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/12","status":"retired","engine":"Gecko","engine_version":"12"},"13":{"release_date":"2012-06-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/13","status":"retired","engine":"Gecko","engine_version":"13"},"14":{"release_date":"2012-07-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/14","status":"retired","engine":"Gecko","engine_version":"14"},"15":{"release_date":"2012-08-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/15","status":"retired","engine":"Gecko","engine_version":"15"},"16":{"release_date":"2012-10-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/16","status":"retired","engine":"Gecko","engine_version":"16"},"17":{"release_date":"2012-11-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/17","status":"retired","engine":"Gecko","engine_version":"17"},"18":{"release_date":"2013-01-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/18","status":"retired","engine":"Gecko","engine_version":"18"},"19":{"release_date":"2013-02-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/19","status":"retired","engine":"Gecko","engine_version":"19"},"20":{"release_date":"2013-04-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/20","status":"retired","engine":"Gecko","engine_version":"20"},"21":{"release_date":"2013-05-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/21","status":"retired","engine":"Gecko","engine_version":"21"},"22":{"release_date":"2013-06-25","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/22","status":"retired","engine":"Gecko","engine_version":"22"},"23":{"release_date":"2013-08-06","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/23","status":"retired","engine":"Gecko","engine_version":"23"},"24":{"release_date":"2013-09-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/24","status":"retired","engine":"Gecko","engine_version":"24"},"25":{"release_date":"2013-10-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/25","status":"retired","engine":"Gecko","engine_version":"25"},"26":{"release_date":"2013-12-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/26","status":"retired","engine":"Gecko","engine_version":"26"},"27":{"release_date":"2014-02-04","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/27","status":"retired","engine":"Gecko","engine_version":"27"},"28":{"release_date":"2014-03-18","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/28","status":"retired","engine":"Gecko","engine_version":"28"},"29":{"release_date":"2014-04-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/29","status":"retired","engine":"Gecko","engine_version":"29"},"30":{"release_date":"2014-06-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/30","status":"retired","engine":"Gecko","engine_version":"30"},"31":{"release_date":"2014-07-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/31","status":"retired","engine":"Gecko","engine_version":"31"},"32":{"release_date":"2014-09-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/32","status":"retired","engine":"Gecko","engine_version":"32"},"33":{"release_date":"2014-10-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/33","status":"retired","engine":"Gecko","engine_version":"33"},"34":{"release_date":"2014-12-01","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/34","status":"retired","engine":"Gecko","engine_version":"34"},"35":{"release_date":"2015-01-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/35","status":"retired","engine":"Gecko","engine_version":"35"},"36":{"release_date":"2015-02-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/36","status":"retired","engine":"Gecko","engine_version":"36"},"37":{"release_date":"2015-03-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/37","status":"retired","engine":"Gecko","engine_version":"37"},"38":{"release_date":"2015-05-12","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/38","status":"retired","engine":"Gecko","engine_version":"38"},"39":{"release_date":"2015-07-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/39","status":"retired","engine":"Gecko","engine_version":"39"},"40":{"release_date":"2015-08-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/40","status":"retired","engine":"Gecko","engine_version":"40"},"41":{"release_date":"2015-09-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/41","status":"retired","engine":"Gecko","engine_version":"41"},"42":{"release_date":"2015-11-03","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/42","status":"retired","engine":"Gecko","engine_version":"42"},"43":{"release_date":"2015-12-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/43","status":"retired","engine":"Gecko","engine_version":"43"},"44":{"release_date":"2016-01-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/44","status":"retired","engine":"Gecko","engine_version":"44"},"45":{"release_date":"2016-03-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/45","status":"retired","engine":"Gecko","engine_version":"45"},"46":{"release_date":"2016-04-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/46","status":"retired","engine":"Gecko","engine_version":"46"},"47":{"release_date":"2016-06-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/47","status":"retired","engine":"Gecko","engine_version":"47"},"48":{"release_date":"2016-08-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/48","status":"retired","engine":"Gecko","engine_version":"48"},"49":{"release_date":"2016-09-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/49","status":"retired","engine":"Gecko","engine_version":"49"},"50":{"release_date":"2016-11-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/50","status":"retired","engine":"Gecko","engine_version":"50"},"51":{"release_date":"2017-01-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/51","status":"retired","engine":"Gecko","engine_version":"51"},"52":{"release_date":"2017-03-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/52","status":"retired","engine":"Gecko","engine_version":"52"},"53":{"release_date":"2017-04-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/53","status":"retired","engine":"Gecko","engine_version":"53"},"54":{"release_date":"2017-06-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/54","status":"retired","engine":"Gecko","engine_version":"54"},"55":{"release_date":"2017-08-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/55","status":"retired","engine":"Gecko","engine_version":"55"},"56":{"release_date":"2017-09-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/56","status":"retired","engine":"Gecko","engine_version":"56"},"57":{"release_date":"2017-11-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/57","status":"retired","engine":"Gecko","engine_version":"57"},"58":{"release_date":"2018-01-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/58","status":"retired","engine":"Gecko","engine_version":"58"},"59":{"release_date":"2018-03-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/59","status":"retired","engine":"Gecko","engine_version":"59"},"60":{"release_date":"2018-05-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/60","status":"esr","engine":"Gecko","engine_version":"60"},"61":{"release_date":"2018-06-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/61","status":"retired","engine":"Gecko","engine_version":"61"},"62":{"release_date":"2018-09-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/62","status":"retired","engine":"Gecko","engine_version":"62"},"63":{"release_date":"2018-10-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/63","status":"retired","engine":"Gecko","engine_version":"63"},"64":{"release_date":"2018-12-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/64","status":"retired","engine":"Gecko","engine_version":"64"},"65":{"release_date":"2019-01-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/65","status":"retired","engine":"Gecko","engine_version":"65"},"66":{"release_date":"2019-03-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/66","status":"retired","engine":"Gecko","engine_version":"66"},"67":{"release_date":"2019-05-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/67","status":"retired","engine":"Gecko","engine_version":"67"},"68":{"release_date":"2019-07-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/68","status":"retired","engine":"Gecko","engine_version":"68"},"69":{"release_date":"2019-09-03","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/69","status":"retired","engine":"Gecko","engine_version":"69"},"70":{"release_date":"2019-10-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/70","status":"retired","engine":"Gecko","engine_version":"70"},"71":{"release_date":"2019-12-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/71","status":"retired","engine":"Gecko","engine_version":"71"},"72":{"release_date":"2020-01-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/72","status":"retired","engine":"Gecko","engine_version":"72"},"73":{"release_date":"2020-02-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/73","status":"retired","engine":"Gecko","engine_version":"73"},"74":{"release_date":"2020-03-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/74","status":"retired","engine":"Gecko","engine_version":"74"},"75":{"release_date":"2020-04-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/75","status":"retired","engine":"Gecko","engine_version":"75"},"76":{"release_date":"2020-05-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/76","status":"retired","engine":"Gecko","engine_version":"76"},"77":{"release_date":"2020-06-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/77","status":"retired","engine":"Gecko","engine_version":"77"},"78":{"release_date":"2020-06-30","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/78","status":"retired","engine":"Gecko","engine_version":"78"},"79":{"release_date":"2020-07-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/79","status":"retired","engine":"Gecko","engine_version":"79"},"80":{"release_date":"2020-08-25","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/80","status":"retired","engine":"Gecko","engine_version":"80"},"81":{"release_date":"2020-09-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/81","status":"retired","engine":"Gecko","engine_version":"81"},"82":{"release_date":"2020-10-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/82","status":"retired","engine":"Gecko","engine_version":"82"},"83":{"release_date":"2020-11-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/83","status":"retired","engine":"Gecko","engine_version":"83"},"84":{"release_date":"2020-12-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/84","status":"retired","engine":"Gecko","engine_version":"84"},"85":{"release_date":"2021-01-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/85","status":"retired","engine":"Gecko","engine_version":"85"},"86":{"release_date":"2021-02-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/86","status":"retired","engine":"Gecko","engine_version":"86"},"87":{"release_date":"2021-03-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/87","status":"retired","engine":"Gecko","engine_version":"87"},"88":{"release_date":"2021-04-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/88","status":"retired","engine":"Gecko","engine_version":"88"},"89":{"release_date":"2021-06-01","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/89","status":"retired","engine":"Gecko","engine_version":"89"},"90":{"release_date":"2021-07-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/90","status":"retired","engine":"Gecko","engine_version":"90"},"91":{"release_date":"2021-08-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/91","status":"retired","engine":"Gecko","engine_version":"91"},"92":{"release_date":"2021-09-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/92","status":"retired","engine":"Gecko","engine_version":"92"},"93":{"release_date":"2021-10-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/93","status":"retired","engine":"Gecko","engine_version":"93"},"94":{"release_date":"2021-11-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/94","status":"retired","engine":"Gecko","engine_version":"94"},"95":{"release_date":"2021-12-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/95","status":"current","engine":"Gecko","engine_version":"95"},"96":{"release_date":"2022-01-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/96","status":"beta","engine":"Gecko","engine_version":"96"},"97":{"release_date":"2022-02-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/97","status":"nightly","engine":"Gecko","engine_version":"97"},"98":{"release_date":"2022-03-08","status":"planned","engine":"Gecko","engine_version":"98"},"1.5":{"release_date":"2005-11-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/1.5","status":"retired","engine":"Gecko","engine_version":"1.8"},"3.5":{"release_date":"2009-06-30","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/3.5","status":"retired","engine":"Gecko","engine_version":"1.9.1"},"3.6":{"release_date":"2010-01-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/3.6","status":"retired","engine":"Gecko","engine_version":"1.9.2"}}},"firefox_android":{"name":"Firefox for Android","pref_url":"about:config","releases":{"4":{"release_date":"2011-03-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/4","status":"retired","engine":"Gecko","engine_version":"2"},"5":{"release_date":"2011-06-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/5","status":"retired","engine":"Gecko","engine_version":"5"},"6":{"release_date":"2011-08-16","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/6","status":"retired","engine":"Gecko","engine_version":"6"},"7":{"release_date":"2011-09-27","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/7","status":"retired","engine":"Gecko","engine_version":"7"},"8":{"release_date":"2011-11-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/8","status":"retired","engine":"Gecko","engine_version":"8"},"9":{"release_date":"2011-12-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/9","status":"retired","engine":"Gecko","engine_version":"9"},"10":{"release_date":"2012-01-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/10","status":"retired","engine":"Gecko","engine_version":"10"},"14":{"release_date":"2012-06-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/14","status":"retired","engine":"Gecko","engine_version":"14"},"15":{"release_date":"2012-08-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/15","status":"retired","engine":"Gecko","engine_version":"15"},"16":{"release_date":"2012-10-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/16","status":"retired","engine":"Gecko","engine_version":"16"},"17":{"release_date":"2012-11-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/17","status":"retired","engine":"Gecko","engine_version":"17"},"18":{"release_date":"2013-01-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/18","status":"retired","engine":"Gecko","engine_version":"18"},"19":{"release_date":"2013-02-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/19","status":"retired","engine":"Gecko","engine_version":"19"},"20":{"release_date":"2013-04-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/20","status":"retired","engine":"Gecko","engine_version":"20"},"21":{"release_date":"2013-05-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/21","status":"retired","engine":"Gecko","engine_version":"21"},"22":{"release_date":"2013-06-25","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/22","status":"retired","engine":"Gecko","engine_version":"22"},"23":{"release_date":"2013-08-06","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/23","status":"retired","engine":"Gecko","engine_version":"23"},"24":{"release_date":"2013-09-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/24","status":"retired","engine":"Gecko","engine_version":"24"},"25":{"release_date":"2013-10-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/25","status":"retired","engine":"Gecko","engine_version":"25"},"26":{"release_date":"2013-12-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/26","status":"retired","engine":"Gecko","engine_version":"26"},"27":{"release_date":"2014-02-04","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/27","status":"retired","engine":"Gecko","engine_version":"27"},"28":{"release_date":"2014-03-18","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/28","status":"retired","engine":"Gecko","engine_version":"28"},"29":{"release_date":"2014-04-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/29","status":"retired","engine":"Gecko","engine_version":"29"},"30":{"release_date":"2014-06-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/30","status":"retired","engine":"Gecko","engine_version":"30"},"31":{"release_date":"2014-07-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/31","status":"retired","engine":"Gecko","engine_version":"31"},"32":{"release_date":"2014-09-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/32","status":"retired","engine":"Gecko","engine_version":"32"},"33":{"release_date":"2014-10-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/33","status":"retired","engine":"Gecko","engine_version":"33"},"34":{"release_date":"2014-12-01","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/34","status":"retired","engine":"Gecko","engine_version":"34"},"35":{"release_date":"2015-01-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/35","status":"retired","engine":"Gecko","engine_version":"35"},"36":{"release_date":"2015-02-27","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/36","status":"retired","engine":"Gecko","engine_version":"36"},"37":{"release_date":"2015-03-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/37","status":"retired","engine":"Gecko","engine_version":"37"},"38":{"release_date":"2015-05-12","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/38","status":"retired","engine":"Gecko","engine_version":"38"},"39":{"release_date":"2015-07-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/39","status":"retired","engine":"Gecko","engine_version":"39"},"40":{"release_date":"2015-08-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/40","status":"retired","engine":"Gecko","engine_version":"40"},"41":{"release_date":"2015-09-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/41","status":"retired","engine":"Gecko","engine_version":"41"},"42":{"release_date":"2015-11-03","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/42","status":"retired","engine":"Gecko","engine_version":"42"},"43":{"release_date":"2015-12-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/43","status":"retired","engine":"Gecko","engine_version":"43"},"44":{"release_date":"2016-01-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/44","status":"retired","engine":"Gecko","engine_version":"44"},"45":{"release_date":"2016-03-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/45","status":"retired","engine":"Gecko","engine_version":"45"},"46":{"release_date":"2016-04-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/46","status":"retired","engine":"Gecko","engine_version":"46"},"47":{"release_date":"2016-06-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/47","status":"retired","engine":"Gecko","engine_version":"47"},"48":{"release_date":"2016-08-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/48","status":"retired","engine":"Gecko","engine_version":"48"},"49":{"release_date":"2016-09-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/49","status":"retired","engine":"Gecko","engine_version":"49"},"50":{"release_date":"2016-11-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/50","status":"retired","engine":"Gecko","engine_version":"50"},"51":{"release_date":"2017-01-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/51","status":"retired","engine":"Gecko","engine_version":"51"},"52":{"release_date":"2017-03-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/52","status":"retired","engine":"Gecko","engine_version":"52"},"53":{"release_date":"2017-04-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/53","status":"retired","engine":"Gecko","engine_version":"53"},"54":{"release_date":"2017-06-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/54","status":"retired","engine":"Gecko","engine_version":"54"},"55":{"release_date":"2017-08-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/55","status":"retired","engine":"Gecko","engine_version":"55"},"56":{"release_date":"2017-09-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/56","status":"retired","engine":"Gecko","engine_version":"56"},"57":{"release_date":"2017-11-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/57","status":"retired","engine":"Gecko","engine_version":"57"},"58":{"release_date":"2018-01-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/58","status":"retired","engine":"Gecko","engine_version":"58"},"59":{"release_date":"2018-03-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/59","status":"retired","engine":"Gecko","engine_version":"59"},"60":{"release_date":"2018-05-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/60","status":"retired","engine":"Gecko","engine_version":"60"},"61":{"release_date":"2018-06-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/61","status":"retired","engine":"Gecko","engine_version":"61"},"62":{"release_date":"2018-09-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/62","status":"retired","engine":"Gecko","engine_version":"62"},"63":{"release_date":"2018-10-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/63","status":"retired","engine":"Gecko","engine_version":"63"},"64":{"release_date":"2018-12-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/64","status":"retired","engine":"Gecko","engine_version":"64"},"65":{"release_date":"2019-01-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/65","status":"retired","engine":"Gecko","engine_version":"65"},"66":{"release_date":"2019-03-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/66","status":"retired","engine":"Gecko","engine_version":"66"},"67":{"release_date":"2019-05-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/67","status":"retired","engine":"Gecko","engine_version":"67"},"68":{"release_date":"2019-07-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/68","status":"retired","engine":"Gecko","engine_version":"68"},"79":{"release_date":"2020-07-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/79","status":"retired","engine":"Gecko","engine_version":"79"},"80":{"release_date":"2020-08-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/80","status":"retired","engine":"Gecko","engine_version":"80"},"81":{"release_date":"2020-09-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/81","status":"retired","engine":"Gecko","engine_version":"81"},"82":{"release_date":"2020-10-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/82","status":"retired","engine":"Gecko","engine_version":"82"},"83":{"release_date":"2020-11-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/83","status":"retired","engine":"Gecko","engine_version":"83"},"84":{"release_date":"2020-12-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/84","status":"retired","engine":"Gecko","engine_version":"84"},"85":{"release_date":"2021-01-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/85","status":"retired","engine":"Gecko","engine_version":"85"},"86":{"release_date":"2021-02-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/86","status":"retired","engine":"Gecko","engine_version":"86"},"87":{"release_date":"2021-03-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/87","status":"retired","engine":"Gecko","engine_version":"87"},"88":{"release_date":"2021-04-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/88","status":"retired","engine":"Gecko","engine_version":"88"},"89":{"release_date":"2021-06-01","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/89","status":"retired","engine":"Gecko","engine_version":"89"},"90":{"release_date":"2021-07-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/90","status":"retired","engine":"Gecko","engine_version":"90"},"91":{"release_date":"2021-08-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/91","status":"retired","engine":"Gecko","engine_version":"91"},"92":{"release_date":"2021-09-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/92","status":"retired","engine":"Gecko","engine_version":"92"},"93":{"release_date":"2021-10-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/93","status":"retired","engine":"Gecko","engine_version":"93"},"94":{"release_date":"2021-11-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/94","status":"retired","engine":"Gecko","engine_version":"94"},"95":{"release_date":"2021-12-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/95","status":"current","engine":"Gecko","engine_version":"95"},"96":{"release_date":"2022-01-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/96","status":"beta","engine":"Gecko","engine_version":"96"},"97":{"release_date":"2022-02-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/97","status":"nightly","engine":"Gecko","engine_version":"97"},"98":{"release_date":"2022-03-08","status":"planned","engine":"Gecko","engine_version":"98"}}},"ie":{"name":"Internet Explorer","releases":{"1":{"release_date":"1995-08-16","status":"retired"},"2":{"release_date":"1995-11-22","status":"retired"},"3":{"release_date":"1996-08-13","status":"retired"},"4":{"release_date":"1997-09-30","status":"retired"},"5":{"release_date":"1999-03-18","status":"retired"},"6":{"release_date":"2001-08-27","status":"retired"},"7":{"release_date":"2006-10-18","status":"retired"},"8":{"release_date":"2009-03-19","status":"retired","engine":"Trident","engine_version":"4.0"},"9":{"release_date":"2011-03-14","status":"retired","engine":"Trident","engine_version":"5.0"},"10":{"release_date":"2012-10-26","status":"retired","engine":"Trident","engine_version":"6.0"},"11":{"release_date":"2013-10-17","status":"current","engine":"Trident","engine_version":"7.0"},"5.5":{"release_date":"2000-07-06","status":"retired"}}},"nodejs":{"name":"Node.js","releases":{"0.10.0":{"release_date":"2013-03-11","release_notes":"https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V010.md","status":"retired","engine":"V8","engine_version":"3.14"},"0.12.0":{"release_date":"2015-02-06","release_notes":"https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V012.md","status":"retired","engine":"V8","engine_version":"3.28"},"4.0.0":{"release_date":"2015-09-08","release_notes":"https://nodejs.org/en/blog/release/v4.0.0/","status":"retired","engine":"V8","engine_version":"4.5"},"5.0.0":{"release_date":"2015-10-29","release_notes":"https://nodejs.org/en/blog/release/v5.0.0/","status":"retired","engine":"V8","engine_version":"4.6"},"6.0.0":{"release_date":"2016-04-26","release_notes":"https://nodejs.org/en/blog/release/v6.0.0/","status":"retired","engine":"V8","engine_version":"5"},"6.5.0":{"release_date":"2016-08-26","release_notes":"https://nodejs.org/en/blog/release/v6.5.0/","status":"retired","engine":"V8","engine_version":"5.1"},"7.0.0":{"release_date":"2016-10-25","release_notes":"https://nodejs.org/en/blog/release/v7.0.0/","status":"retired","engine":"V8","engine_version":"5.4"},"7.5.0":{"release_date":"2017-01-31","release_notes":"https://nodejs.org/en/blog/release/v7.5.0/","status":"retired","engine":"V8","engine_version":"5.4"},"7.6.0":{"release_date":"2017-02-21","release_notes":"https://nodejs.org/en/blog/release/v7.6.0/","status":"retired","engine":"V8","engine_version":"5.5"},"7.7.0":{"release_date":"2017-02-28","release_notes":"https://nodejs.org/en/blog/release/v7.7.0/","status":"retired","engine":"V8","engine_version":"5.5"},"7.10.0":{"release_date":"2017-05-02","release_notes":"https://nodejs.org/en/blog/release/v7.10.0/","status":"retired","engine":"V8","engine_version":"5.5"},"8.0.0":{"release_date":"2017-05-30","release_notes":"https://nodejs.org/en/blog/release/v8.0.0/","status":"retired","engine":"V8","engine_version":"5.8"},"8.3.0":{"release_date":"2017-08-09","release_notes":"https://nodejs.org/en/blog/release/v8.3.0/","status":"retired","engine":"V8","engine_version":"6.0"},"8.5.0":{"release_date":"2017-09-12","release_notes":"https://nodejs.org/en/blog/release/v8.5.0/","status":"retired","engine":"V8","engine_version":"6.0"},"8.7.0":{"release_date":"2017-10-11","release_notes":"https://nodejs.org/en/blog/release/v8.7.0/","status":"retired","engine":"V8","engine_version":"6.1"},"8.10.0":{"release_date":"2018-03-06","release_notes":"https://nodejs.org/en/blog/release/v8.10.0/","status":"retired","engine":"V8","engine_version":"6.2"},"9.3.0":{"release_date":"2017-12-12","release_notes":"https://nodejs.org/en/blog/release/v9.3.0/","status":"retired","engine":"V8","engine_version":"6.2"},"10.0.0":{"release_date":"2018-04-24","release_notes":"https://nodejs.org/en/blog/release/v10.0.0/","status":"retired","engine":"V8","engine_version":"6.6"},"10.4.0":{"release_date":"2018-06-06","release_notes":"https://nodejs.org/en/blog/release/v10.4.0/","status":"retired","engine":"V8","engine_version":"6.7"},"10.5.0":{"release_date":"2018-06-20","release_notes":"https://nodejs.org/en/blog/release/v10.5.0/","status":"retired","engine":"V8","engine_version":"6.7"},"10.7.0":{"release_date":"2018-07-18","release_notes":"https://nodejs.org/en/blog/release/v10.7.0/","status":"retired","engine":"V8","engine_version":"6.7"},"10.9.0":{"release_date":"2018-08-16","release_notes":"https://nodejs.org/en/blog/release/v10.9.0/","status":"retired","engine":"V8","engine_version":"6.8"},"11.0.0":{"release_date":"2018-10-23","release_notes":"https://nodejs.org/en/blog/release/v11.0.0/","status":"retired","engine":"V8","engine_version":"7.0"},"11.7.0":{"release_date":"2019-01-18","release_notes":"https://nodejs.org/en/blog/release/v11.7.0/","status":"retired","engine":"V8","engine_version":"7.0"},"12.0.0":{"release_date":"2019-04-23","release_notes":"https://nodejs.org/en/blog/release/v12.0.0/","status":"retired","engine":"V8","engine_version":"7.4"},"12.5.0":{"release_date":"2019-06-27","release_notes":"https://nodejs.org/en/blog/release/v12.5.0/","status":"retired","engine":"V8","engine_version":"7.5"},"12.9.0":{"release_date":"2019-08-20","release_notes":"https://nodejs.org/en/blog/release/v12.9.0/","status":"retired","engine":"V8","engine_version":"7.6"},"12.11.0":{"release_date":"2019-09-25","release_notes":"https://nodejs.org/en/blog/release/v12.11.0/","status":"retired","engine":"V8","engine_version":"7.7"},"12.17.0":{"release_date":"2020-05-26","release_notes":"https://nodejs.org/en/blog/release/v12.17.0/","status":"esr","engine":"V8","engine_version":"7.8"},"13.0.0":{"release_date":"2019-10-10","release_notes":"https://nodejs.org/en/blog/release/v13.0.0/","status":"retired","engine":"V8","engine_version":"7.8"},"13.2.0":{"release_date":"2019-11-21","release_notes":"https://nodejs.org/en/blog/release/v13.2.0/","status":"retired","engine":"V8","engine_version":"7.9"},"14.0.0":{"release_date":"2020-04-21","release_notes":"https://nodejs.org/en/blog/release/v14.0.0/","status":"retired","engine":"V8","engine_version":"8.1"},"14.3.0":{"release_date":"2020-05-19","release_notes":"https://nodejs.org/en/blog/release/v14.3.0/","status":"retired","engine":"V8","engine_version":"8.3"},"14.5.0":{"release_date":"2020-06-30","release_notes":"https://nodejs.org/en/blog/release/v14.5.0/","status":"retired","engine":"V8","engine_version":"8.3"},"14.6.0":{"release_date":"2020-07-21","release_notes":"https://nodejs.org/en/blog/release/v14.6.0/","status":"retired","engine":"V8","engine_version":"8.4"},"14.7.0":{"release_date":"2020-07-29","release_notes":"https://nodejs.org/en/blog/release/v14.7.0/","status":"retired","engine":"V8","engine_version":"8.4"},"14.8.0":{"release_date":"2020-08-11","release_notes":"https://nodejs.org/en/blog/release/v14.8.0/","status":"esr","engine":"V8","engine_version":"8.4"},"15.0.0":{"release_date":"2020-10-20","release_notes":"https://nodejs.org/en/blog/release/v15.0.0/","status":"retired","engine":"V8","engine_version":"8.6"},"15.4.0":{"release_date":"2020-12-09","release_notes":"https://nodejs.org/en/blog/release/v15.4.0/","status":"retired","engine":"V8","engine_version":"8.6"},"15.7.0":{"release_date":"2021-01-26","release_notes":"https://nodejs.org/en/blog/release/v15.7.0/","status":"retired","engine":"V8","engine_version":"8.6"},"15.12.0":{"release_date":"2021-03-17","release_notes":"https://nodejs.org/en/blog/release/v15.12.0/","status":"retired","engine":"V8","engine_version":"8.6"},"16.0.0":{"release_date":"2021-04-20","release_notes":"https://nodejs.org/en/blog/release/v16.0.0/","status":"retired","engine":"V8","engine_version":"9.0"},"16.4.0":{"release_date":"2021-06-23","release_notes":"https://nodejs.org/en/blog/release/v16.4.0/","status":"retired","engine":"V8","engine_version":"9.1"},"16.5.0":{"release_date":"2021-07-14","release_notes":"https://nodejs.org/en/blog/release/v16.5.0/","status":"retired","engine":"V8","engine_version":"9.2"},"16.6.0":{"release_date":"2021-07-29","release_notes":"https://nodejs.org/en/blog/release/v16.6.0/","status":"retired","engine":"V8","engine_version":"9.2"},"16.7.0":{"release_date":"2021-08-17","release_notes":"https://nodejs.org/en/blog/release/v16.7.0/","status":"retired","engine":"V8","engine_version":"9.2"},"16.9.0":{"release_date":"2021-09-07","release_notes":"https://nodejs.org/en/blog/release/v16.9.0/","status":"current","engine":"V8","engine_version":"9.3"},"17.0.0":{"release_date":"2021-10-19","release_notes":"https://nodejs.org/en/blog/release/v17.0.0/","status":"current","engine":"V8","engine_version":"9.5"}}},"opera":{"name":"Opera","releases":{"2":{"release_date":"1996-07-14","status":"retired"},"3":{"release_date":"1997-12-01","status":"retired"},"4":{"release_date":"2000-06-28","status":"retired"},"5":{"release_date":"2000-12-06","status":"retired"},"6":{"release_date":"2001-12-18","status":"retired"},"7":{"release_date":"2003-01-28","status":"retired","engine":"Presto","engine_version":"1"},"8":{"release_date":"2005-04-19","status":"retired","engine":"Presto","engine_version":"1"},"9":{"release_date":"2006-06-20","status":"retired","engine":"Presto","engine_version":"2"},"10":{"release_date":"2009-09-01","release_notes":"https://dev.opera.com/blog/opera-10-weve-only-just-begun/","status":"retired","engine":"Presto","engine_version":"2.2"},"11":{"release_date":"2010-12-16","release_notes":"https://dev.opera.com/blog/new-html5-features-in-opera-11/","status":"retired","engine":"Presto","engine_version":"2.7"},"12":{"release_date":"2012-06-14","release_notes":"https://dev.opera.com/blog/hello-opera-12/","status":"retired","engine":"Presto","engine_version":"2.10"},"15":{"release_date":"2013-07-02","release_notes":"https://dev.opera.com/blog/introducing-opera-15-for-desktop-and-a-fast-release-cycle/","status":"retired","engine":"Blink","engine_version":"28"},"16":{"release_date":"2013-08-27","release_notes":"https://dev.opera.com/blog/opera-16-released-in-the-wild/","status":"retired","engine":"Blink","engine_version":"29"},"17":{"release_date":"2013-10-08","release_notes":"https://dev.opera.com/blog/opera-desktop-17-released/","status":"retired","engine":"Blink","engine_version":"30"},"18":{"release_date":"2013-11-19","release_notes":"https://dev.opera.com/blog/opera-desktop-18-released/","status":"retired","engine":"Blink","engine_version":"31"},"19":{"release_date":"2014-01-28","release_notes":"https://dev.opera.com/blog/opera-19/","status":"retired","engine":"Blink","engine_version":"32"},"20":{"release_date":"2014-03-04","release_notes":"https://dev.opera.com/blog/opera-20/","status":"retired","engine":"Blink","engine_version":"33"},"21":{"release_date":"2014-05-06","release_notes":"https://dev.opera.com/blog/opera-21/","status":"retired","engine":"Blink","engine_version":"34"},"22":{"release_date":"2014-06-03","release_notes":"https://dev.opera.com/blog/opera-22/","status":"retired","engine":"Blink","engine_version":"35"},"23":{"release_date":"2014-07-22","release_notes":"https://dev.opera.com/blog/opera-23/","status":"retired","engine":"Blink","engine_version":"36"},"24":{"release_date":"2014-09-02","release_notes":"https://dev.opera.com/blog/opera-24/","status":"retired","engine":"Blink","engine_version":"37"},"25":{"release_date":"2014-10-15","release_notes":"https://dev.opera.com/blog/opera-25/","status":"retired","engine":"Blink","engine_version":"38"},"26":{"release_date":"2014-12-03","release_notes":"https://dev.opera.com/blog/opera-26/","status":"retired","engine":"Blink","engine_version":"39"},"27":{"release_date":"2015-01-27","release_notes":"https://dev.opera.com/blog/opera-27/","status":"retired","engine":"Blink","engine_version":"40"},"28":{"release_date":"2015-03-10","release_notes":"https://dev.opera.com/blog/opera-28/","status":"retired","engine":"Blink","engine_version":"41"},"29":{"release_date":"2015-04-28","release_notes":"https://dev.opera.com/blog/opera-29/","status":"retired","engine":"Blink","engine_version":"42"},"30":{"release_date":"2015-06-09","release_notes":"https://dev.opera.com/blog/opera-30/","status":"retired","engine":"Blink","engine_version":"43"},"31":{"release_date":"2015-08-04","release_notes":"https://dev.opera.com/blog/opera-31/","status":"retired","engine":"Blink","engine_version":"44"},"32":{"release_date":"2015-09-15","release_notes":"https://dev.opera.com/blog/opera-32/","status":"retired","engine":"Blink","engine_version":"45"},"33":{"release_date":"2015-10-27","release_notes":"https://dev.opera.com/blog/opera-33/","status":"retired","engine":"Blink","engine_version":"46"},"34":{"release_date":"2015-12-08","release_notes":"https://dev.opera.com/blog/opera-34/","status":"retired","engine":"Blink","engine_version":"47"},"35":{"release_date":"2016-02-02","release_notes":"https://dev.opera.com/blog/opera-35/","status":"retired","engine":"Blink","engine_version":"48"},"36":{"release_date":"2016-03-15","release_notes":"https://dev.opera.com/blog/opera-36/","status":"retired","engine":"Blink","engine_version":"49"},"37":{"release_date":"2016-05-04","release_notes":"https://dev.opera.com/blog/opera-37/","status":"retired","engine":"Blink","engine_version":"50"},"38":{"release_date":"2016-06-08","release_notes":"https://dev.opera.com/blog/opera-38/","status":"retired","engine":"Blink","engine_version":"51"},"39":{"release_date":"2016-08-02","release_notes":"https://dev.opera.com/blog/opera-39/","status":"retired","engine":"Blink","engine_version":"52"},"40":{"release_date":"2016-09-20","release_notes":"https://dev.opera.com/blog/opera-40/","status":"retired","engine":"Blink","engine_version":"53"},"41":{"release_date":"2016-10-25","release_notes":"https://dev.opera.com/blog/opera-41/","status":"retired","engine":"Blink","engine_version":"54"},"42":{"release_date":"2016-12-13","release_notes":"https://dev.opera.com/blog/opera-42/","status":"retired","engine":"Blink","engine_version":"55"},"43":{"release_date":"2017-02-07","release_notes":"https://dev.opera.com/blog/opera-43/","status":"retired","engine":"Blink","engine_version":"56"},"44":{"release_date":"2017-03-21","release_notes":"https://dev.opera.com/blog/opera-44/","status":"retired","engine":"Blink","engine_version":"57"},"45":{"release_date":"2017-05-10","release_notes":"https://dev.opera.com/blog/opera-45/","status":"retired","engine":"Blink","engine_version":"58"},"46":{"release_date":"2017-06-22","release_notes":"https://dev.opera.com/blog/opera-46/","status":"retired","engine":"Blink","engine_version":"59"},"47":{"release_date":"2017-08-09","release_notes":"https://dev.opera.com/blog/opera-47/","status":"retired","engine":"Blink","engine_version":"60"},"48":{"release_date":"2017-09-27","status":"retired","engine":"Blink","engine_version":"61"},"49":{"release_date":"2017-11-08","release_notes":"https://dev.opera.com/blog/opera-49/","status":"retired","engine":"Blink","engine_version":"62"},"50":{"release_date":"2018-01-04","release_notes":"https://dev.opera.com/blog/opera-50/","status":"retired","engine":"Blink","engine_version":"63"},"51":{"release_date":"2018-02-07","release_notes":"https://dev.opera.com/blog/opera-51/","status":"retired","engine":"Blink","engine_version":"64"},"52":{"release_date":"2018-03-22","release_notes":"https://dev.opera.com/blog/opera-52/","status":"retired","engine":"Blink","engine_version":"65"},"53":{"release_date":"2018-05-10","release_notes":"https://dev.opera.com/blog/opera-53/","status":"retired","engine":"Blink","engine_version":"66"},"54":{"release_date":"2018-06-28","release_notes":"https://dev.opera.com/blog/opera-54/","status":"retired","engine":"Blink","engine_version":"67"},"55":{"release_date":"2018-08-16","release_notes":"https://blogs.opera.com/desktop/2018/08/opera-55-offers-better-control-web-pages-accessible-bookmarks/","status":"retired","engine":"Blink","engine_version":"68"},"56":{"release_date":"2018-09-25","release_notes":"https://dev.opera.com/blog/opera-56/","status":"retired","engine":"Blink","engine_version":"69"},"57":{"release_date":"2018-11-28","release_notes":"https://dev.opera.com/blog/opera-57/","status":"retired","engine":"Blink","engine_version":"70"},"58":{"release_date":"2019-01-23","release_notes":"https://dev.opera.com/blog/opera-58/","status":"retired","engine":"Blink","engine_version":"71"},"60":{"release_date":"2019-04-09","release_notes":"https://blogs.opera.com/desktop/2019/04/opera-60-reborn-3-web-3-0-vpn-ad-blocker/","status":"retired","engine":"Blink","engine_version":"73"},"62":{"release_date":"2019-06-27","release_notes":"https://blogs.opera.com/desktop/2019/06/opera-62-comes-with-design-updates-to-reborn-3/","status":"retired","engine":"Blink","engine_version":"75"},"63":{"release_date":"2019-08-20","release_notes":"https://blogs.opera.com/desktop/2019/08/opera-63-initial-release/","status":"retired","engine":"Blink","engine_version":"76"},"64":{"release_date":"2019-10-07","release_notes":"https://blogs.opera.com/desktop/2019/10/opera-64-faster-more-private-more-fun/","status":"retired","engine":"Blink","engine_version":"77"},"65":{"release_date":"2019-11-13","release_notes":"https://blogs.opera.com/desktop/2019/11/opera-65-comes-with-an-improved-tracker-blocker-and-redesigned-address-bar/","status":"retired","engine":"Blink","engine_version":"78"},"66":{"release_date":"2020-01-07","release_notes":"https://blogs.opera.com/desktop/2020/01/opera-66-initial-release-makes-it-easier-to-reopen-closed-tabs-and-to-access-extensions/","status":"retired","engine":"Blink","engine_version":"79"},"67":{"release_date":"2020-03-03","release_notes":"https://blogs.opera.com/desktop/2020/03/opera-67-3575-53-stable-update/","status":"retired","engine":"Blink","engine_version":"80"},"68":{"release_date":"2020-04-22","release_notes":"https://blogs.opera.com/desktop/2020/04/opera-68-is-here-with-built-in-instagram-in-the-sidebar/","status":"retired","engine":"Blink","engine_version":"81"},"69":{"release_date":"2020-06-24","release_notes":"https://blogs.opera.com/desktop/2020/06/opera-69-comes-with-built-in-twitter/","status":"retired","engine":"Blink","engine_version":"83"},"70":{"release_date":"2020-07-27","release_notes":"https://blogs.opera.com/desktop/2020/07/opera-70-comes-with-easier-access-to-closed-tabs-simpler-searches-and-new-workspace-icons/","status":"retired","engine":"Blink","engine_version":"84"},"71":{"release_date":"2020-09-15","release_notes":"https://blogs.opera.com/desktop/2020/09/opera-71-update/","status":"retired","engine":"Blink","engine_version":"85"},"72":{"release_date":"2020-10-21","release_notes":"https://blogs.opera.com/desktop/2020/10/opera-72-update/","status":"retired","engine":"Blink","engine_version":"86"},"73":{"release_date":"2020-12-09","release_notes":"https://blogs.opera.com/desktop/2020/12/opera-73-update/","status":"retired","engine":"Blink","engine_version":"87"},"74":{"release_date":"2021-02-02","release_notes":"https://blogs.opera.com/desktop/2021/02/opera-74-stable/","status":"retired","engine":"Blink","engine_version":"88"},"75":{"release_date":"2021-03-24","release_notes":"https://blogs.opera.com/desktop/2021/03/opera-75-brings-easier-access-to-top-features-2/","status":"retired","engine":"Blink","engine_version":"89"},"76":{"release_date":"2021-04-28","release_notes":"https://blogs.opera.com/desktop/2021/04/opera-76-stable/","status":"retired","engine":"Blink","engine_version":"90"},"77":{"release_date":"2021-06-09","release_notes":"https://blogs.opera.com/desktop/2021/06/opera-77-stable/","status":"retired","engine":"Blink","engine_version":"91"},"78":{"release_date":"2021-08-03","release_notes":"https://blogs.opera.com/desktop/2021/08/opera-78-stable/","status":"retired","engine":"Blink","engine_version":"92"},"79":{"release_date":"2021-09-14","release_notes":"https://blogs.opera.com/desktop/2021/09/opera-79-stable/","status":"retired","engine":"Blink","engine_version":"93"},"80":{"release_date":"2021-10-05","release_notes":"https://blogs.opera.com/desktop/2021/10/opera-80-stable/","status":"retired","engine":"Blink","engine_version":"94"},"81":{"release_date":"2021-11-04","release_notes":"https://blogs.opera.com/desktop/2021/11/opera-81-stable/","status":"retired","engine":"Blink","engine_version":"95"},"82":{"release_date":"2021-12-02","release_notes":"https://blogs.opera.com/desktop/2021/12/opera-82/","status":"current","engine":"Blink","engine_version":"96"},"83":{"status":"beta","engine":"Blink","engine_version":"97"},"84":{"status":"nightly","engine":"Blink","engine_version":"98"},"3.5":{"release_date":"1998-11-18","status":"retired"},"3.6":{"release_date":"1999-05-06","status":"retired"},"5.1":{"release_date":"2001-04-10","status":"retired"},"7.1":{"release_date":"2003-04-11","status":"retired","engine":"Presto","engine_version":"1"},"7.2":{"release_date":"2003-09-23","status":"retired","engine":"Presto","engine_version":"1"},"7.5":{"release_date":"2004-05-12","status":"retired","engine":"Presto","engine_version":"1"},"8.5":{"release_date":"2005-09-20","status":"retired","engine":"Presto","engine_version":"1"},"9.1":{"release_date":"2006-12-18","status":"retired","engine":"Presto","engine_version":"2"},"9.2":{"release_date":"2007-04-11","status":"retired","engine":"Presto","engine_version":"2"},"9.5":{"release_date":"2008-06-12","status":"retired","engine":"Presto","engine_version":"2.1"},"9.6":{"release_date":"2008-10-08","release_notes":"https://dev.opera.com/blog/a-look-under-the-hood-of-opera-9-6/","status":"retired","engine":"Presto","engine_version":"2.1"},"10.1":{"release_date":"2009-11-23","release_notes":"https://dev.opera.com/blog/opera-10-10-and-10-2-alpha/","status":"retired","engine":"Presto","engine_version":"2.2"},"10.5":{"release_date":"2010-03-02","release_notes":"https://dev.opera.com/blog/opera-10-50-final-for-windows-is-out/","status":"retired","engine":"Presto","engine_version":"2.5"},"10.6":{"release_date":"2010-07-01","release_notes":"https://dev.opera.com/blog/hello-opera-10-60/","status":"retired","engine":"Presto","engine_version":"2.6"},"11.1":{"release_date":"2011-04-12","release_notes":"https://dev.opera.com/blog/unveiling-opera-11-10-final/","status":"retired","engine":"Presto","engine_version":"2.8"},"11.5":{"release_date":"2011-06-28","release_notes":"https://dev.opera.com/blog/opera-11-50-released-speed-dial-extensions-improved-standards-support/","status":"retired","engine":"Presto","engine_version":"2.9"},"11.6":{"release_date":"2011-12-06","release_notes":"https://dev.opera.com/blog/hello-opera-11-60/","status":"retired","engine":"Presto","engine_version":"2.10"},"12.1":{"release_date":"2012-11-20","release_notes":"https://dev.opera.com/blog/opera-12-10-is-out/","status":"retired","engine":"Presto","engine_version":"2.12"}}},"opera_android":{"name":"Opera Android","releases":{"11":{"release_date":"2011-03-22","release_notes":"https://dev.opera.com/blog/opera-mobile-11-for-maemo-meego-windows/","status":"retired","engine":"Presto","engine_version":"2.7"},"12":{"release_date":"2012-02-25","release_notes":"https://dev.opera.com/blog/opera-mobile-12-and-introducing-opera-mini-next/","status":"retired","engine":"Presto","engine_version":"2.10"},"14":{"release_date":"2013-05-21","release_notes":"https://dev.opera.com/blog/opera-14-for-android-is-out/","status":"retired","engine":"Blink","engine_version":"26"},"15":{"release_date":"2013-07-08","release_notes":"https://blogs.opera.com/news/2013/07/opera-15-for-android/","status":"retired","engine":"Blink","engine_version":"28"},"16":{"release_date":"2013-09-18","status":"retired","engine":"Blink","engine_version":"29"},"18":{"release_date":"2013-11-20","release_notes":"https://blogs.opera.com/news/2013/11/opera-18-android-tablet/","status":"retired","engine":"Blink","engine_version":"31"},"19":{"release_date":"2014-01-28","release_notes":"https://dev.opera.com/blog/opera-19/","status":"retired","engine":"Blink","engine_version":"32"},"20":{"release_date":"2014-03-06","release_notes":"https://forums.opera.com/topic/1081/opera-20-final-release","status":"retired","engine":"Blink","engine_version":"33"},"21":{"release_date":"2014-04-22","release_notes":"https://forums.opera.com/topic/2211/opera-21-final-release","status":"retired","engine":"Blink","engine_version":"34"},"22":{"release_date":"2014-06-17","release_notes":"https://forums.opera.com/topic/3446/opera-22","status":"retired","engine":"Blink","engine_version":"35"},"24":{"release_date":"2014-09-10","release_notes":"https://forums.opera.com/topic/5022/opera-24-final-release","status":"retired","engine":"Blink","engine_version":"37"},"25":{"release_date":"2014-10-16","release_notes":"https://forums.opera.com/topic/5715/opera-25-final-release","status":"retired","engine":"Blink","engine_version":"38"},"26":{"release_date":"2014-12-02","release_notes":"https://forums.opera.com/topic/6800/opera-26-final-release","status":"retired","engine":"Blink","engine_version":"39"},"27":{"release_date":"2015-01-29","release_notes":"https://forums.opera.com/topic/7871/opera-27-final-release","status":"retired","engine":"Blink","engine_version":"40"},"28":{"release_date":"2015-03-10","release_notes":"https://forums.opera.com/topic/8556/synced-bookmarks-and-improved-memory-usage-in-opera-28-for-android","status":"retired","engine":"Blink","engine_version":"41"},"29":{"release_date":"2015-04-28","release_notes":"https://dev.opera.com/blog/opera-29/","status":"retired","engine":"Blink","engine_version":"42"},"30":{"release_date":"2015-06-10","release_notes":"https://blogs.opera.com/mobile/2015/06/opera-30-android-sync-speeddials/","status":"retired","engine":"Blink","engine_version":"43"},"32":{"release_date":"2015-09-23","release_notes":"https://blogs.opera.com/mobile/2015/09/opera-32-add-to-home-screen/","status":"retired","engine":"Blink","engine_version":"45"},"33":{"release_date":"2015-11-03","release_notes":"https://forums.opera.com/topic/12480/opera-33-now-featuring-video-optimization-and-brand-new-icons","status":"retired","engine":"Blink","engine_version":"46"},"34":{"release_date":"2015-12-16","release_notes":"https://forums.opera.com/topic/13085/opera-34-for-android-released","status":"retired","engine":"Blink","engine_version":"47"},"35":{"release_date":"2016-02-04","release_notes":"https://blogs.opera.com/mobile/2016/02/save-space-on-your-android-phone-with-web-apps/","status":"retired","engine":"Blink","engine_version":"48"},"36":{"release_date":"2016-03-31","release_notes":"https://forums.opera.com/topic/14514/opera-36-released","status":"retired","engine":"Blink","engine_version":"49"},"37":{"release_date":"2016-06-16","release_notes":"https://forums.opera.com/topic/15753/opera-37-released","status":"retired","engine":"Blink","engine_version":"50"},"41":{"release_date":"2016-10-25","status":"retired","engine":"Blink","engine_version":"54"},"42":{"release_date":"2017-01-21","release_notes":"https://forums.opera.com/topic/18950/opera-for-android-42","status":"retired","engine":"Blink","engine_version":"55"},"43":{"release_date":"2017-09-27","release_notes":"https://forums.opera.com/topic/22708/opera-for-android-43","status":"retired","engine":"Blink","engine_version":"59"},"44":{"release_date":"2017-12-11","release_notes":"https://forums.opera.com/topic/23860/opera-for-android-44","status":"retired","engine":"Blink","engine_version":"60"},"45":{"release_date":"2018-02-15","release_notes":"https://forums.opera.com/topic/25124/opera-for-android-45","status":"retired","engine":"Blink","engine_version":"61"},"46":{"release_date":"2018-05-14","release_notes":"https://forums.opera.com/topic/26662/opera-for-android-46","status":"retired","engine":"Blink","engine_version":"63"},"47":{"release_date":"2018-07-23","release_notes":"https://forums.opera.com/topic/27794/opera-for-android-47","status":"retired","engine":"Blink","engine_version":"66"},"48":{"release_date":"2018-11-08","release_notes":"https://forums.opera.com/topic/29525/opera-for-android-48","status":"retired","engine":"Blink","engine_version":"69"},"49":{"release_date":"2018-12-07","release_notes":"https://forums.opera.com/topic/29983/opera-for-android-49","status":"retired","engine":"Blink","engine_version":"70"},"50":{"release_date":"2019-02-18","release_notes":"https://forums.opera.com/topic/31003/opera-for-android-50","status":"retired","engine":"Blink","engine_version":"71"},"51":{"release_date":"2019-03-21","release_notes":"https://forums.opera.com/topic/31467/opera-for-android-51-built-in-vpn","status":"retired","engine":"Blink","engine_version":"72"},"52":{"release_date":"2019-05-17","release_notes":"https://forums.opera.com/topic/32516/opera-for-android-52","status":"retired","engine":"Blink","engine_version":"73"},"53":{"release_date":"2019-07-11","release_notes":"https://forums.opera.com/topic/33558/opera-for-android-53","status":"retired","engine":"Blink","engine_version":"74"},"54":{"release_date":"2019-10-18","release_notes":"https://forums.opera.com/topic/35853/opera-for-android-54","status":"retired","engine":"Blink","engine_version":"76"},"55":{"release_date":"2019-12-03","release_notes":"https://forums.opera.com/topic/36858/opera-for-android-55","status":"retired","engine":"Blink","engine_version":"77"},"56":{"release_date":"2020-02-06","release_notes":"https://blogs.opera.com/mobile/2020/02/easy-reading-in-opera-for-android/","status":"retired","engine":"Blink","engine_version":"78"},"57":{"release_date":"2020-03-30","release_notes":"https://blogs.opera.com/mobile/2020/03/introducing-new-features-in-opera-for-android-57/","status":"retired","engine":"Blink","engine_version":"80"},"58":{"release_date":"2020-05-13","release_notes":"https://blogs.opera.com/mobile/2020/05/opera-for-android-58-handle-notifications-easily-and-group-speed-dials-for-a-cleaner-appearance/","status":"retired","engine":"Blink","engine_version":"81"},"59":{"release_date":"2020-06-30","release_notes":"https://blogs.opera.com/mobile/2020/06/opera-for-android-59/","status":"retired","engine":"Blink","engine_version":"83"},"60":{"release_date":"2020-09-23","release_notes":"https://blogs.opera.com/mobile/2020/09/keep-in-sync-with-opera-for-android-60/","status":"retired","engine":"Blink","engine_version":"85"},"61":{"release_date":"2020-12-07","release_notes":"https://blogs.opera.com/mobile/2020/12/new-opera-for-android-61/","status":"retired","engine":"Blink","engine_version":"86"},"62":{"release_date":"2021-02-16","release_notes":"https://blogs.opera.com/mobile/2021/02/the-opera-browser-for-android-hit-a-new-record-of-80-million-maus/","status":"retired","engine":"Blink","engine_version":"87"},"63":{"release_date":"2021-04-16","status":"retired","engine":"Blink","engine_version":"89"},"64":{"release_date":"2021-05-25","status":"retired","engine":"Blink","engine_version":"91"},"65":{"release_date":"2021-10-20","release_notes":"https://blogs.opera.com/mobile/2021/10/opera-for-android-version-65/","status":"current","engine":"Blink","engine_version":"92"},"10.1":{"release_date":"2010-11-09","release_notes":"https://dev.opera.com/blog/opera-mobile-10-1-beta-for-android-is-here/","status":"retired","engine":"Presto","engine_version":"2.5"},"11.1":{"release_date":"2011-06-30","release_notes":"https://dev.opera.com/blog/opera-mobile-11-1-new-features-and-additions/","status":"retired","engine":"Presto","engine_version":"2.8"},"11.5":{"release_date":"2011-10-12","status":"retired","engine":"Presto","engine_version":"2.9"},"12.1":{"release_date":"2012-10-09","release_notes":"https://dev.opera.com/blog/opera-mobile-12-1-with-spdy-web-sockets-flexbox-and-more/","status":"retired","engine":"Presto","engine_version":"2.11"}}},"safari":{"name":"Safari","preview_name":"TP","releases":{"1":{"release_date":"2003-06-23","status":"retired","engine":"WebKit","engine_version":"85"},"2":{"release_date":"2005-04-29","status":"retired","engine":"WebKit","engine_version":"412"},"3":{"release_date":"2007-10-26","status":"retired","engine":"WebKit","engine_version":"523.10"},"4":{"release_date":"2009-06-08","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_4_0.html","status":"retired","engine":"WebKit","engine_version":"530.17"},"5":{"release_date":"2010-06-07","status":"retired","engine":"WebKit","engine_version":"533.16"},"6":{"release_date":"2012-07-25","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_6_0.html","status":"retired","engine":"WebKit","engine_version":"536.25"},"7":{"release_date":"2013-10-22","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_7_0.html","status":"retired","engine":"WebKit","engine_version":"537.71"},"8":{"release_date":"2014-10-16","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_8_0.html","status":"retired","engine":"WebKit","engine_version":"538.35"},"9":{"release_date":"2015-09-30","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_9_0.html","status":"retired","engine":"WebKit","engine_version":"601.1.56"},"10":{"release_date":"2016-09-20","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_0.html","status":"retired","engine":"WebKit","engine_version":"602.1.50"},"11":{"release_date":"2017-09-19","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Safari_11_0/Safari_11_0.html","status":"retired","engine":"WebKit","engine_version":"604.2.4"},"12":{"release_date":"2018-09-24","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_12_release_notes","status":"retired","engine":"WebKit","engine_version":"606.1.36"},"13":{"release_date":"2019-09-19","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_13_release_notes","status":"retired","engine":"WebKit","engine_version":"608.2.11"},"14":{"release_date":"2020-09-16","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-14-release-notes","status":"retired","engine":"WebKit","engine_version":"610.1.28"},"15":{"release_date":"2021-09-20","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-15-release-notes","status":"retired","engine":"WebKit","engine_version":"612.1.29"},"1.1":{"release_date":"2003-10-24","status":"retired","engine":"WebKit","engine_version":"100"},"1.2":{"release_date":"2004-02-02","status":"retired","engine":"WebKit","engine_version":"125"},"1.3":{"release_date":"2005-04-15","status":"retired","engine":"WebKit","engine_version":"312"},"3.1":{"release_date":"2008-03-18","status":"retired","engine":"WebKit","engine_version":"525.13"},"5.1":{"release_date":"2011-07-20","status":"retired","engine":"WebKit","engine_version":"534.48"},"9.1":{"release_date":"2016-03-21","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_9_1.html","status":"retired","engine":"WebKit","engine_version":"601.5.17"},"10.1":{"release_date":"2017-03-27","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_1.html","status":"retired","engine":"WebKit","engine_version":"603.2.1"},"11.1":{"release_date":"2018-04-12","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_11_1.html","status":"retired","engine":"WebKit","engine_version":"605.1.33"},"12.1":{"release_date":"2019-03-25","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_12_1_release_notes","status":"retired","engine":"WebKit","engine_version":"607.1.40"},"13.1":{"release_date":"2020-03-24","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-13_1-release_notes","status":"retired","engine":"WebKit","engine_version":"609.1.20"},"14.1":{"release_date":"2021-04-26","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-14_1-release-notes","status":"retired","engine":"WebKit","engine_version":"611.1.21"},"15.1":{"release_date":"2021-10-25","status":"current","engine":"WebKit","engine_version":"612.2.9"},"15.2":{"status":"beta","engine":"WebKit","engine_version":"612.3.2"}}},"safari_ios":{"name":"Safari on iOS","releases":{"1":{"status":"retired","engine":"WebKit","engine_version":"522.11","release_date":"2007-06-29"},"2":{"status":"retired","engine":"WebKit","engine_version":"525.18","release_date":"2008-07-11"},"3":{"status":"retired","engine":"WebKit","engine_version":"528.18","release_date":"2009-06-17"},"4":{"status":"retired","engine":"WebKit","engine_version":"532.9","release_date":"2010-06-21"},"5":{"status":"retired","engine":"WebKit","engine_version":"534.46","release_date":"2011-10-12"},"6":{"status":"retired","engine":"WebKit","engine_version":"536.26","release_date":"2012-09-10"},"7":{"status":"retired","engine":"WebKit","engine_version":"537.51","release_date":"2013-09-18"},"8":{"status":"retired","engine":"WebKit","engine_version":"600.1.4","release_date":"2014-09-17"},"9":{"status":"retired","engine":"WebKit","engine_version":"601.1.56","release_date":"2015-09-16"},"10":{"status":"retired","engine":"WebKit","engine_version":"602.1.50","release_date":"2016-09-13"},"11":{"status":"retired","engine":"WebKit","engine_version":"604.2.4","release_date":"2017-09-19"},"12":{"release_date":"2018-09-17","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_12_release_notes","status":"retired","engine":"WebKit","engine_version":"606.1.36"},"13":{"release_date":"2019-09-19","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_13_release_notes","status":"retired","engine":"WebKit","engine_version":"608.2.11"},"14":{"release_date":"2020-09-16","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-14-release-notes","status":"retired","engine":"WebKit","engine_version":"610.1.28"},"15":{"release_date":"2021-09-20","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-15-release-notes","status":"retired","engine":"WebKit","engine_version":"612.1.27"},"3.2":{"status":"retired","engine":"WebKit","engine_version":"531.21","release_date":"2010-04-03"},"4.2":{"status":"retired","engine":"WebKit","engine_version":"533.17","release_date":"2010-11-22"},"9.3":{"status":"retired","engine":"WebKit","engine_version":"601.5.17","release_date":"2016-03-21"},"10.3":{"status":"retired","engine":"WebKit","engine_version":"603.2.1","release_date":"2017-03-27"},"11.3":{"status":"retired","engine":"WebKit","engine_version":"605.1.33","release_date":"2018-03-29"},"12.2":{"release_date":"2019-03-25","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_12_1_release_notes","status":"retired","engine":"WebKit","engine_version":"607.1.40"},"13.4":{"release_date":"2020-03-24","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-13_1-release_notes","status":"retired","engine":"WebKit","engine_version":"609.1.20"},"14.5":{"release_date":"2021-04-26","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-14_1-release-notes","status":"retired","engine":"WebKit","engine_version":"611.1.21"},"15.1":{"release_date":"2021-10-25","status":"current","engine":"WebKit","engine_version":"612.2.9"},"15.2":{"status":"beta","engine":"WebKit","engine_version":"612.3.2"}}},"samsunginternet_android":{"name":"Samsung Internet","accepts_flags":false,"releases":{"1.0":{"release_date":"2013-04-27","status":"retired","engine":"WebKit","engine_version":"535.19"},"1.5":{"release_date":"2013-09-25","status":"retired","engine":"Blink","engine_version":"28"},"1.6":{"release_date":"2014-04-11","status":"retired","engine":"Blink","engine_version":"28"},"2.0":{"release_date":"2014-10-17","status":"retired","engine":"Blink","engine_version":"34"},"2.1":{"release_date":"2015-01-07","status":"retired","engine":"Blink","engine_version":"34"},"3.0":{"release_date":"2015-04-10","status":"retired","engine":"Blink","engine_version":"38"},"3.2":{"release_date":"2015-08-24","status":"retired","engine":"Blink","engine_version":"38"},"4.0":{"release_date":"2016-03-11","status":"retired","engine":"Blink","engine_version":"44"},"4.2":{"release_date":"2016-08-02","status":"retired","engine":"Blink","engine_version":"44"},"5.0":{"release_date":"2016-12-15","status":"retired","engine":"Blink","engine_version":"51"},"5.2":{"release_date":"2017-04-21","status":"retired","engine":"Blink","engine_version":"51"},"5.4":{"release_date":"2017-05-17","status":"retired","engine":"Blink","engine_version":"51"},"6.0":{"release_date":"2017-08-23","status":"retired","engine":"Blink","engine_version":"56"},"6.2":{"release_date":"2017-10-26","status":"retired","engine":"Blink","engine_version":"56"},"6.4":{"release_date":"2018-02-19","status":"retired","engine":"Blink","engine_version":"56"},"7.0":{"release_date":"2018-03-16","status":"retired","engine":"Blink","engine_version":"59"},"7.2":{"release_date":"2018-06-20","status":"retired","engine":"Blink","engine_version":"59"},"7.4":{"release_date":"2018-09-12","status":"retired","engine":"Blink","engine_version":"59"},"8.0":{"release_date":"2018-07-18","status":"retired","engine":"Blink","engine_version":"63"},"8.2":{"release_date":"2018-12-21","status":"retired","engine":"Blink","engine_version":"63"},"9.0":{"release_date":"2018-09-15","status":"retired","engine":"Blink","engine_version":"67"},"9.2":{"release_date":"2019-04-02","status":"retired","engine":"Blink","engine_version":"67"},"9.4":{"release_date":"2019-07-25","status":"retired","engine":"Blink","engine_version":"67"},"10.0":{"release_date":"2019-08-22","status":"retired","engine":"Blink","engine_version":"71"},"10.2":{"release_date":"2019-10-09","status":"retired","engine":"Blink","engine_version":"71"},"11.0":{"release_date":"2019-12-05","status":"retired","engine":"Blink","engine_version":"75"},"11.2":{"release_date":"2020-03-22","status":"retired","engine":"Blink","engine_version":"75"},"12.0":{"release_date":"2020-06-19","status":"retired","engine":"Blink","engine_version":"79"},"12.1":{"release_date":"2020-07-07","status":"retired","engine":"Blink","engine_version":"79"},"13.0":{"release_date":"2020-12-02","status":"retired","engine":"Blink","engine_version":"83"},"13.2":{"release_date":"2021-01-20","status":"retired","engine":"Blink","engine_version":"83"},"14.0":{"release_date":"2021-04-17","status":"retired","engine":"Blink","engine_version":"87"},"14.2":{"release_date":"2021-06-25","status":"retired","engine":"Blink","engine_version":"87"},"15.0":{"release_date":"2021-08-13","status":"retired","engine":"Blink","engine_version":"90"},"16.0":{"release_date":"2021-11-25","status":"current","engine":"Blink","engine_version":"92"}}},"webview_android":{"name":"WebView Android","accepts_flags":false,"releases":{"1":{"release_date":"2008-09-23","release_notes":"https://en.wikipedia.org/wiki/Android_version_history#Android_1.0_(API_1)","status":"retired","engine":"WebKit","engine_version":"523.12"},"2":{"release_date":"2009-10-26","release_notes":"https://en.wikipedia.org/wiki/Android_Eclair","status":"retired","engine":"WebKit","engine_version":"530.17"},"3":{"release_date":"2011-02-22","release_notes":"https://en.wikipedia.org/wiki/Android_Honeycomb","status":"retired","engine":"WebKit","engine_version":"534.13"},"4":{"release_date":"2011-10-18","release_notes":"https://en.wikipedia.org/wiki/Android_Ice_Cream_Sandwich","status":"retired","engine":"WebKit","engine_version":"534.30"},"37":{"release_date":"2014-09-03","release_notes":"https://chromereleases.googleblog.com/2014/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"37"},"38":{"release_date":"2014-10-08","release_notes":"https://chromereleases.googleblog.com/2014/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"38"},"39":{"release_date":"2014-11-12","release_notes":"https://chromereleases.googleblog.com/2014/11/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"39"},"40":{"release_date":"2015-01-21","release_notes":"https://chromereleases.googleblog.com/2015/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"40"},"41":{"release_date":"2015-03-11","release_notes":"https://chromereleases.googleblog.com/2015/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"41"},"42":{"release_date":"2015-04-15","release_notes":"https://chromereleases.googleblog.com/2015/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"42"},"43":{"release_date":"2015-05-27","release_notes":"https://chromereleases.googleblog.com/2015/05/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"43"},"44":{"release_date":"2015-07-29","release_notes":"https://chromereleases.googleblog.com/2015/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"44"},"45":{"release_date":"2015-09-01","release_notes":"https://chromereleases.googleblog.com/2015/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"45"},"46":{"release_date":"2015-10-14","release_notes":"https://chromereleases.googleblog.com/2015/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"46"},"47":{"release_date":"2015-12-02","release_notes":"https://chromereleases.googleblog.com/2015/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"47"},"48":{"release_date":"2016-01-26","status":"retired","engine":"Blink","engine_version":"48"},"49":{"release_date":"2016-03-09","release_notes":"https://chromereleases.googleblog.com/2016/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"49"},"50":{"release_date":"2016-04-13","status":"retired","engine":"Blink","engine_version":"50"},"51":{"release_date":"2016-06-08","release_notes":"https://chromereleases.googleblog.com/2016/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"51"},"52":{"release_date":"2016-07-27","release_notes":"https://chromereleases.googleblog.com/2016/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"52"},"53":{"release_date":"2016-09-07","release_notes":"https://chromereleases.googleblog.com/2016/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"53"},"54":{"release_date":"2016-10-19","release_notes":"https://chromereleases.googleblog.com/2016/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"54"},"55":{"release_date":"2016-12-06","release_notes":"https://chromereleases.googleblog.com/2016/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"55"},"56":{"release_date":"2017-02-01","release_notes":"https://chromereleases.googleblog.com/2017/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"56"},"57":{"release_date":"2017-03-16","release_notes":"https://chromereleases.googleblog.com/2017/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"57"},"58":{"release_date":"2017-04-25","release_notes":"https://chromereleases.googleblog.com/2017/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"58"},"59":{"release_date":"2017-06-06","release_notes":"https://chromereleases.googleblog.com/2017/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"59"},"60":{"release_date":"2017-08-01","release_notes":"https://chromereleases.googleblog.com/2017/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"60"},"61":{"release_date":"2017-09-05","release_notes":"https://chromereleases.googleblog.com/2017/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"61"},"62":{"release_date":"2017-10-24","release_notes":"https://chromereleases.googleblog.com/2017/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"62"},"63":{"release_date":"2017-12-05","release_notes":"https://chromereleases.googleblog.com/2017/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"63"},"64":{"release_date":"2018-01-23","release_notes":"https://chromereleases.googleblog.com/2018/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"64"},"65":{"release_date":"2017-03-06","release_notes":"https://chromereleases.googleblog.com/2018/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"65"},"66":{"release_date":"2017-04-17","release_notes":"https://chromereleases.googleblog.com/2018/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"66"},"67":{"release_date":"2018-05-31","release_notes":"https://chromereleases.googleblog.com/2018/05/chrome-for-android-update_31.html","status":"retired","engine":"Blink","engine_version":"67"},"68":{"release_date":"2018-07-24","release_notes":"https://chromereleases.googleblog.com/2018/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"68"},"69":{"release_date":"2018-09-04","release_notes":"https://chromereleases.googleblog.com/2018/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"69"},"70":{"release_date":"2018-10-17","release_notes":"https://chromereleases.googleblog.com/2018/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"70"},"71":{"release_date":"2018-12-04","release_notes":"https://chromereleases.googleblog.com/2018/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"71"},"72":{"release_date":"2019-01-29","release_notes":"https://chromereleases.googleblog.com/2019/01/chrome-for-android-update_29.html","status":"retired","engine":"Blink","engine_version":"72"},"73":{"release_date":"2019-03-12","release_notes":"https://chromereleases.googleblog.com/2019/03/chrome-for-android-update_12.html","status":"retired","engine":"Blink","engine_version":"73"},"74":{"release_date":"2019-04-24","release_notes":"https://chromereleases.googleblog.com/2019/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"74"},"75":{"release_date":"2019-06-04","release_notes":"https://chromereleases.googleblog.com/2019/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"75"},"76":{"release_date":"2019-07-30","release_notes":"https://chromereleases.googleblog.com/2019/07/chrome-for-android-update_30.html","status":"retired","engine":"Blink","engine_version":"76"},"77":{"release_date":"2019-09-10","release_notes":"https://chromereleases.googleblog.com/2019/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"77"},"78":{"release_date":"2019-10-22","release_notes":"https://chromereleases.googleblog.com/2019/10/chrome-for-android-update_22.html","status":"retired","engine":"Blink","engine_version":"78"},"79":{"release_date":"2019-12-17","release_notes":"https://chromereleases.googleblog.com/2019/12/chrome-for-android-update_17.html","status":"retired","engine":"Blink","engine_version":"79"},"80":{"release_date":"2020-02-04","release_notes":"https://chromereleases.googleblog.com/2020/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"80"},"81":{"release_date":"2020-04-07","release_notes":"https://chromereleases.googleblog.com/2020/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"81"},"83":{"release_date":"2020-05-19","release_notes":"https://chromereleases.googleblog.com/2020/05/chrome-for-android-update_19.html","status":"retired","engine":"Blink","engine_version":"83"},"84":{"release_date":"2020-07-27","release_notes":"https://chromereleases.googleblog.com/2020/07/chrome-for-android-update_27.html","status":"retired","engine":"Blink","engine_version":"84"},"85":{"release_date":"2020-08-25","release_notes":"https://chromereleases.googleblog.com/2020/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"85"},"86":{"release_date":"2020-10-20","release_notes":"https://chromereleases.googleblog.com/2020/10/chrome-for-android-update_20.html","status":"retired","engine":"Blink","engine_version":"86"},"87":{"release_date":"2020-11-17","release_notes":"https://chromereleases.googleblog.com/2020/11/chrome-for-android-update_17.html","status":"retired","engine":"Blink","engine_version":"87"},"88":{"release_date":"2021-01-19","release_notes":"https://chromereleases.googleblog.com/2021/01/chrome-for-android-update_19.html","status":"retired","engine":"Blink","engine_version":"88"},"89":{"release_date":"2021-03-02","release_notes":"https://chromereleases.googleblog.com/2021/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"89"},"90":{"release_date":"2021-04-13","release_notes":"https://chromereleases.googleblog.com/2021/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"90"},"91":{"release_date":"2021-05-25","release_notes":"https://chromereleases.googleblog.com/2021/05/chrome-for-android-update_01607414128.html","status":"retired","engine":"Blink","engine_version":"91"},"92":{"release_date":"2021-07-20","release_notes":"https://chromereleases.googleblog.com/2021/07/chrome-for-android-update_01500789893.html","status":"retired","engine":"Blink","engine_version":"92"},"93":{"release_date":"2021-08-31","release_notes":"https://chromereleases.googleblog.com/2021/08/chrome-for-android-update_0881967577.html","status":"retired","engine":"Blink","engine_version":"93"},"94":{"release_date":"2021-09-21","release_notes":"https://chromereleases.googleblog.com/2021/09/chrome-for-android-update_21.html","status":"retired","engine":"Blink","engine_version":"94"},"95":{"release_date":"2021-10-19","release_notes":"https://chromereleases.googleblog.com/2021/10/chrome-for-android-update_01703513036.html","status":"retired","engine":"Blink","engine_version":"95"},"96":{"release_date":"2021-11-15","release_notes":"https://chromereleases.googleblog.com/2021/11/chrome-for-android-update.html","status":"current","engine":"Blink","engine_version":"96"},"97":{"release_date":"2022-01-04","status":"beta","engine":"Blink","engine_version":"97"},"98":{"release_date":"2022-02-01","status":"nightly","engine":"Blink","engine_version":"98"},"1.5":{"release_date":"2009-04-27","release_notes":"https://en.wikipedia.org/wiki/Android_Cupcake","status":"retired","engine":"WebKit","engine_version":"525.20"},"2.2":{"release_date":"2010-05-20","release_notes":"https://en.wikipedia.org/wiki/Android_Froyo","status":"retired","engine":"WebKit","engine_version":"533.1"},"4.4":{"release_date":"2013-12-09","release_notes":"https://chromereleases.googleblog.com/2013/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"30"},"4.4.3":{"release_date":"2014-06-02","release_notes":"https://chromereleases.googleblog.com/2014/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"33"}}}}+{"chrome":{"name":"Chrome","preview_name":"Canary","pref_url":"chrome://flags","releases":{"1":{"release_date":"2008-12-11","release_notes":"https://chromereleases.googleblog.com/2008/12/stable-release-google-chrome-is-out-of.html","status":"retired","engine":"WebKit","engine_version":"528"},"2":{"release_date":"2009-05-21","release_notes":"https://chromereleases.googleblog.com/2009/05/stable-update-google-chrome-2017228.html","status":"retired","engine":"WebKit","engine_version":"530"},"3":{"release_date":"2009-09-15","release_notes":"https://chromereleases.googleblog.com/2009/09/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"532"},"4":{"release_date":"2010-01-25","release_notes":"https://chromereleases.googleblog.com/2010/01/stable-channel-update_25.html","status":"retired","engine":"WebKit","engine_version":"532.5"},"5":{"release_date":"2010-05-25","release_notes":"https://chromereleases.googleblog.com/2010/05/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"533"},"6":{"release_date":"2010-09-02","release_notes":"https://chromereleases.googleblog.com/2010/09/stable-and-beta-channel-updates.html","status":"retired","engine":"WebKit","engine_version":"534.3"},"7":{"release_date":"2010-10-19","release_notes":"https://chromereleases.googleblog.com/2010/10/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"534.7"},"8":{"release_date":"2010-12-02","release_notes":"https://chromereleases.googleblog.com/2010/12/stable-beta-channel-updates.html","status":"retired","engine":"WebKit","engine_version":"534.10"},"9":{"release_date":"2011-02-03","release_notes":"https://chromereleases.googleblog.com/2011/02/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"534.13"},"10":{"release_date":"2011-03-08","release_notes":"https://chromereleases.googleblog.com/2011/03/chrome-stable-release.html","status":"retired","engine":"WebKit","engine_version":"534.16"},"11":{"release_date":"2011-04-27","release_notes":"https://chromereleases.googleblog.com/2011/04/chrome-stable-update.html","status":"retired","engine":"WebKit","engine_version":"534.24"},"12":{"release_date":"2011-06-07","release_notes":"https://chromereleases.googleblog.com/2011/06/chrome-stable-release.html","status":"retired","engine":"WebKit","engine_version":"534.30"},"13":{"release_date":"2011-08-02","release_notes":"https://chromereleases.googleblog.com/2011/08/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"535.1"},"14":{"release_date":"2011-09-16","release_notes":"https://chromereleases.googleblog.com/2011/09/stable-channel-update_16.html","status":"retired","engine":"WebKit","engine_version":"535.1"},"15":{"release_date":"2011-10-25","release_notes":"https://chromereleases.googleblog.com/2011/10/chrome-stable-release.html","status":"retired","engine":"WebKit","engine_version":"535.2"},"16":{"release_date":"2011-12-13","release_notes":"https://chromereleases.googleblog.com/2011/12/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"535.7"},"17":{"release_date":"2012-02-08","release_notes":"https://chromereleases.googleblog.com/2012/02/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"535.11"},"18":{"release_date":"2012-03-28","release_notes":"https://chromereleases.googleblog.com/2012/03/stable-channel-release-and-beta-channel.html","status":"retired","engine":"WebKit","engine_version":"535.19"},"19":{"release_date":"2012-05-15","release_notes":"https://chromereleases.googleblog.com/2012/05/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"536.5"},"20":{"release_date":"2012-06-26","release_notes":"https://chromereleases.googleblog.com/2012/06/stable-channel-update_26.html","status":"retired","engine":"WebKit","engine_version":"536.10"},"21":{"release_date":"2012-07-31","release_notes":"https://chromereleases.googleblog.com/2012/07/stable-channel-release.html","status":"retired","engine":"WebKit","engine_version":"537.1"},"22":{"release_date":"2012-09-25","release_notes":"https://chromereleases.googleblog.com/2012/09/stable-channel-update_25.html","status":"retired","engine":"WebKit","engine_version":"537.4"},"23":{"release_date":"2012-11-06","release_notes":"https://chromereleases.googleblog.com/2012/11/stable-channel-release-and-beta-channel.html","status":"retired","engine":"WebKit","engine_version":"537.11"},"24":{"release_date":"2013-01-10","release_notes":"https://chromereleases.googleblog.com/2013/01/stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"537.17"},"25":{"release_date":"2013-02-21","release_notes":"https://chromereleases.googleblog.com/2013/02/stable-channel-update_21.html","status":"retired","engine":"WebKit","engine_version":"537.22"},"26":{"release_date":"2013-03-26","release_notes":"https://chromereleases.googleblog.com/2013/03/stable-channel-update_26.html","status":"retired","engine":"WebKit","engine_version":"537.31"},"27":{"release_date":"2013-05-21","release_notes":"https://chromereleases.googleblog.com/2013/05/stable-channel-release.html","status":"retired","engine":"WebKit","engine_version":"537.36"},"28":{"release_date":"2013-07-09","release_notes":"https://chromereleases.googleblog.com/2013/07/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"28"},"29":{"release_date":"2013-08-20","release_notes":"https://chromereleases.googleblog.com/2013/08/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"29"},"30":{"release_date":"2013-10-01","release_notes":"https://chromereleases.googleblog.com/2013/10/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"30"},"31":{"release_date":"2013-11-12","release_notes":"https://chromereleases.googleblog.com/2013/11/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"31"},"32":{"release_date":"2014-01-14","release_notes":"https://chromereleases.googleblog.com/2014/01/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"32"},"33":{"release_date":"2014-02-20","release_notes":"https://chromereleases.googleblog.com/2014/02/stable-channel-update_20.html","status":"retired","engine":"Blink","engine_version":"33"},"34":{"release_date":"2014-04-08","release_notes":"https://chromereleases.googleblog.com/2014/04/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"34"},"35":{"release_date":"2014-05-20","release_notes":"https://chromereleases.googleblog.com/2014/05/stable-channel-update_20.html","status":"retired","engine":"Blink","engine_version":"35"},"36":{"release_date":"2014-07-16","release_notes":"https://chromereleases.googleblog.com/2014/07/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"36"},"37":{"release_date":"2014-08-26","release_notes":"https://chromereleases.googleblog.com/2014/08/stable-channel-update_26.html","status":"retired","engine":"Blink","engine_version":"37"},"38":{"release_date":"2014-10-07","release_notes":"https://chromereleases.googleblog.com/2014/10/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"38"},"39":{"release_date":"2014-11-18","release_notes":"https://chromereleases.googleblog.com/2014/11/stable-channel-update_18.html","status":"retired","engine":"Blink","engine_version":"39"},"40":{"release_date":"2015-01-21","release_notes":"https://chromereleases.googleblog.com/2015/01/stable-update.html","status":"retired","engine":"Blink","engine_version":"40"},"41":{"release_date":"2015-03-03","release_notes":"https://chromereleases.googleblog.com/2015/03/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"41"},"42":{"release_date":"2015-04-14","release_notes":"https://chromereleases.googleblog.com/2015/04/stable-channel-update_14.html","status":"retired","engine":"Blink","engine_version":"42"},"43":{"release_date":"2015-05-19","release_notes":"https://chromereleases.googleblog.com/2015/05/stable-channel-update_19.html","status":"retired","engine":"Blink","engine_version":"43"},"44":{"release_date":"2015-07-21","release_notes":"https://chromereleases.googleblog.com/2015/07/stable-channel-update_21.html","status":"retired","engine":"Blink","engine_version":"44"},"45":{"release_date":"2015-09-01","release_notes":"https://chromereleases.googleblog.com/2015/09/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"45"},"46":{"release_date":"2015-10-13","release_notes":"https://chromereleases.googleblog.com/2015/10/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"46"},"47":{"release_date":"2015-12-01","release_notes":"https://chromereleases.googleblog.com/2015/12/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"47"},"48":{"release_date":"2016-01-20","release_notes":"https://chromereleases.googleblog.com/2016/01/stable-channel-update_20.html","status":"retired","engine":"Blink","engine_version":"48"},"49":{"release_date":"2016-03-02","release_notes":"https://chromereleases.googleblog.com/2016/03/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"49"},"50":{"release_date":"2016-04-13","release_notes":"https://chromereleases.googleblog.com/2016/04/stable-channel-update_13.html","status":"retired","engine":"Blink","engine_version":"50"},"51":{"release_date":"2016-05-25","release_notes":"https://chromereleases.googleblog.com/2016/05/stable-channel-update_25.html","status":"retired","engine":"Blink","engine_version":"51"},"52":{"release_date":"2016-07-20","release_notes":"https://chromereleases.googleblog.com/2016/07/stable-channel-update.html","status":"retired","engine":"Blink","engine_version":"52"},"53":{"release_date":"2016-08-31","release_notes":"https://chromereleases.googleblog.com/2016/08/stable-channel-update-for-desktop_31.html","status":"retired","engine":"Blink","engine_version":"53"},"54":{"release_date":"2016-10-12","release_notes":"https://chromereleases.googleblog.com/2016/10/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"54"},"55":{"release_date":"2016-12-01","release_notes":"https://chromereleases.googleblog.com/2016/12/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"55"},"56":{"release_date":"2017-01-25","release_notes":"https://chromereleases.googleblog.com/2017/01/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"56"},"57":{"release_date":"2017-03-09","release_notes":"https://chromereleases.googleblog.com/2017/03/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"57"},"58":{"release_date":"2017-04-19","release_notes":"https://chromereleases.googleblog.com/2017/04/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"58"},"59":{"release_date":"2017-06-05","release_notes":"https://chromereleases.googleblog.com/2017/06/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"59"},"60":{"release_date":"2017-07-25","release_notes":"https://chromereleases.googleblog.com/2017/07/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"60"},"61":{"release_date":"2017-09-05","release_notes":"https://chromereleases.googleblog.com/2017/09/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"61"},"62":{"release_date":"2017-10-17","release_notes":"https://chromereleases.googleblog.com/2017/10/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"62"},"63":{"release_date":"2017-12-06","release_notes":"https://chromereleases.googleblog.com/2017/12/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"63"},"64":{"release_date":"2018-01-23","release_notes":"https://chromereleases.googleblog.com/2018/01/stable-channel-update-for-desktop_24.html","status":"retired","engine":"Blink","engine_version":"64"},"65":{"release_date":"2018-03-06","release_notes":"https://chromereleases.googleblog.com/2018/03/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"65"},"66":{"release_date":"2018-04-17","release_notes":"https://chromereleases.googleblog.com/2018/04/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"66"},"67":{"release_date":"2018-05-29","release_notes":"https://chromereleases.googleblog.com/2018/05/stable-channel-update-for-desktop_58.html","status":"retired","engine":"Blink","engine_version":"67"},"68":{"release_date":"2018-07-24","release_notes":"https://chromereleases.googleblog.com/2018/07/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"68"},"69":{"release_date":"2018-09-04","release_notes":"https://chromereleases.googleblog.com/2018/09/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"69"},"70":{"release_date":"2018-10-16","release_notes":"https://chromereleases.googleblog.com/2018/10/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"70"},"71":{"release_date":"2018-12-04","release_notes":"https://chromereleases.googleblog.com/2018/12/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"71"},"72":{"release_date":"2019-01-29","release_notes":"https://chromereleases.googleblog.com/2019/01/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"72"},"73":{"release_date":"2019-03-12","release_notes":"https://chromereleases.googleblog.com/2019/03/stable-channel-update-for-desktop_12.html","status":"retired","engine":"Blink","engine_version":"73"},"74":{"release_date":"2019-04-23","release_notes":"https://chromereleases.googleblog.com/2019/04/stable-channel-update-for-desktop_23.html","status":"retired","engine":"Blink","engine_version":"74"},"75":{"release_date":"2019-06-04","release_notes":"https://chromereleases.googleblog.com/2019/06/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"75"},"76":{"release_date":"2019-07-30","release_notes":"https://chromereleases.googleblog.com/2019/07/stable-channel-update-for-desktop_30.html","status":"retired","engine":"Blink","engine_version":"76"},"77":{"release_date":"2019-09-10","release_notes":"https://chromereleases.googleblog.com/2019/09/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"77"},"78":{"release_date":"2019-10-22","release_notes":"https://chromereleases.googleblog.com/2019/10/stable-channel-update-for-desktop_22.html","status":"retired","engine":"Blink","engine_version":"78"},"79":{"release_date":"2019-12-10","release_notes":"https://chromereleases.googleblog.com/2019/12/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"79"},"80":{"release_date":"2020-02-04","release_notes":"https://chromereleases.googleblog.com/2020/02/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"80"},"81":{"release_date":"2020-04-07","release_notes":"https://chromereleases.googleblog.com/2020/04/stable-channel-update-for-desktop_7.html","status":"retired","engine":"Blink","engine_version":"81"},"83":{"release_date":"2020-05-19","release_notes":"https://chromereleases.googleblog.com/2020/05/stable-channel-update-for-desktop_19.html","status":"retired","engine":"Blink","engine_version":"83"},"84":{"release_date":"2020-07-27","release_notes":"https://chromereleases.googleblog.com/2020/07/stable-channel-update-for-desktop_27.html","status":"retired","engine":"Blink","engine_version":"84"},"85":{"release_date":"2020-08-25","release_notes":"https://chromereleases.googleblog.com/2020/08/stable-channel-update-for-desktop_25.html","status":"retired","engine":"Blink","engine_version":"85"},"86":{"release_date":"2020-10-20","release_notes":"https://chromereleases.googleblog.com/2020/10/stable-channel-update-for-desktop_20.html","status":"retired","engine":"Blink","engine_version":"86"},"87":{"release_date":"2020-11-17","release_notes":"https://chromereleases.googleblog.com/2020/11/stable-channel-update-for-desktop_17.html","status":"retired","engine":"Blink","engine_version":"87"},"88":{"release_date":"2021-01-19","release_notes":"https://chromereleases.googleblog.com/2021/01/stable-channel-update-for-desktop_19.html","status":"retired","engine":"Blink","engine_version":"88"},"89":{"release_date":"2021-03-02","release_notes":"https://chromereleases.googleblog.com/2021/03/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"89"},"90":{"release_date":"2021-04-13","release_notes":"https://chromereleases.googleblog.com/2021/04/stable-channel-update-for-desktop_14.html","status":"retired","engine":"Blink","engine_version":"90"},"91":{"release_date":"2021-05-25","release_notes":"https://chromereleases.googleblog.com/2021/05/stable-channel-update-for-desktop_25.html","status":"retired","engine":"Blink","engine_version":"91"},"92":{"release_date":"2021-07-20","release_notes":"https://chromereleases.googleblog.com/2021/07/stable-channel-update-for-desktop_20.html","status":"retired","engine":"Blink","engine_version":"92"},"93":{"release_date":"2021-08-31","release_notes":"https://chromereleases.googleblog.com/2021/08/stable-channel-update-for-desktop_31.html","status":"retired","engine":"Blink","engine_version":"93"},"94":{"release_date":"2021-09-21","release_notes":"https://chromereleases.googleblog.com/2021/09/stable-channel-update-for-desktop_21.html","status":"retired","engine":"Blink","engine_version":"94"},"95":{"release_date":"2021-10-19","release_notes":"https://chromereleases.googleblog.com/2021/10/stable-channel-update-for-desktop_19.html","status":"retired","engine":"Blink","engine_version":"95"},"96":{"release_date":"2021-11-15","release_notes":"https://chromereleases.googleblog.com/2021/11/stable-channel-update-for-desktop.html","status":"retired","engine":"Blink","engine_version":"96"},"97":{"release_date":"2022-01-04","release_notes":"https://chromereleases.googleblog.com/2022/01/stable-channel-update-for-desktop.html","status":"current","engine":"Blink","engine_version":"97"},"98":{"release_date":"2022-02-01","status":"beta","engine":"Blink","engine_version":"98"},"99":{"release_date":"2022-03-01","status":"nightly","engine":"Blink","engine_version":"99"}}},"chrome_android":{"name":"Chrome Android","pref_url":"chrome://flags","releases":{"18":{"release_date":"2012-06-27","release_notes":"https://chromereleases.googleblog.com/2012/06/chrome-for-android-out-of-beta.html","status":"retired","engine":"WebKit","engine_version":"535.19"},"25":{"release_date":"2013-02-27","release_notes":"https://chromereleases.googleblog.com/2013/02/chrome-for-android-update.html","status":"retired","engine":"WebKit","engine_version":"537.22"},"26":{"release_date":"2013-04-03","release_notes":"https://chromereleases.googleblog.com/2013/04/chrome-for-android-stable-channel-update.html","status":"retired","engine":"WebKit","engine_version":"537.31"},"27":{"release_date":"2013-05-22","release_notes":"https://chromereleases.googleblog.com/2013/05/chrome-for-android-update.html","status":"retired","engine":"WebKit","engine_version":"537.36"},"28":{"release_date":"2013-07-10","release_notes":"https://chromereleases.googleblog.com/2013/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"28"},"29":{"release_date":"2013-08-21","release_notes":"https://chromereleases.googleblog.com/2013/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"29"},"30":{"release_date":"2013-10-02","release_notes":"https://chromereleases.googleblog.com/2013/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"30"},"31":{"release_date":"2013-11-14","release_notes":"https://chromereleases.googleblog.com/2013/11/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"31"},"32":{"release_date":"2014-01-15","release_notes":"https://chromereleases.googleblog.com/2014/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"32"},"33":{"release_date":"2014-02-26","release_notes":"https://chromereleases.googleblog.com/2014/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"33"},"34":{"release_date":"2014-04-02","release_notes":"https://chromereleases.googleblog.com/2014/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"34"},"35":{"release_date":"2014-05-20","release_notes":"https://chromereleases.googleblog.com/2014/05/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"35"},"36":{"release_date":"2014-07-16","release_notes":"https://chromereleases.googleblog.com/2014/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"36"},"37":{"release_date":"2014-09-03","release_notes":"https://chromereleases.googleblog.com/2014/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"37"},"38":{"release_date":"2014-10-08","release_notes":"https://chromereleases.googleblog.com/2014/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"38"},"39":{"release_date":"2014-11-12","release_notes":"https://chromereleases.googleblog.com/2014/11/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"39"},"40":{"release_date":"2015-01-21","release_notes":"https://chromereleases.googleblog.com/2015/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"40"},"41":{"release_date":"2015-03-11","release_notes":"https://chromereleases.googleblog.com/2015/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"41"},"42":{"release_date":"2015-04-15","release_notes":"https://chromereleases.googleblog.com/2015/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"42"},"43":{"release_date":"2015-05-27","release_notes":"https://chromereleases.googleblog.com/2015/05/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"43"},"44":{"release_date":"2015-07-29","release_notes":"https://chromereleases.googleblog.com/2015/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"44"},"45":{"release_date":"2015-09-01","release_notes":"https://chromereleases.googleblog.com/2015/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"45"},"46":{"release_date":"2015-10-14","release_notes":"https://chromereleases.googleblog.com/2015/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"46"},"47":{"release_date":"2015-12-02","release_notes":"https://chromereleases.googleblog.com/2015/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"47"},"48":{"release_date":"2016-01-26","status":"retired","engine":"Blink","engine_version":"48"},"49":{"release_date":"2016-03-09","release_notes":"https://chromereleases.googleblog.com/2016/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"49"},"50":{"release_date":"2016-04-13","status":"retired","engine":"Blink","engine_version":"50"},"51":{"release_date":"2016-06-08","release_notes":"https://chromereleases.googleblog.com/2016/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"51"},"52":{"release_date":"2016-07-27","release_notes":"https://chromereleases.googleblog.com/2016/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"52"},"53":{"release_date":"2016-09-07","release_notes":"https://chromereleases.googleblog.com/2016/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"53"},"54":{"release_date":"2016-10-19","release_notes":"https://chromereleases.googleblog.com/2016/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"54"},"55":{"release_date":"2016-12-06","release_notes":"https://chromereleases.googleblog.com/2016/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"55"},"56":{"release_date":"2017-02-01","release_notes":"https://chromereleases.googleblog.com/2017/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"56"},"57":{"release_date":"2017-03-16","release_notes":"https://chromereleases.googleblog.com/2017/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"57"},"58":{"release_date":"2017-04-25","release_notes":"https://chromereleases.googleblog.com/2017/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"58"},"59":{"release_date":"2017-06-06","release_notes":"https://chromereleases.googleblog.com/2017/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"59"},"60":{"release_date":"2017-08-01","release_notes":"https://chromereleases.googleblog.com/2017/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"60"},"61":{"release_date":"2017-09-05","release_notes":"https://chromereleases.googleblog.com/2017/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"61"},"62":{"release_date":"2017-10-24","release_notes":"https://chromereleases.googleblog.com/2017/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"62"},"63":{"release_date":"2017-12-05","release_notes":"https://chromereleases.googleblog.com/2017/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"63"},"64":{"release_date":"2018-01-23","release_notes":"https://chromereleases.googleblog.com/2018/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"64"},"65":{"release_date":"2018-03-06","release_notes":"https://chromereleases.googleblog.com/2018/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"65"},"66":{"release_date":"2018-04-17","release_notes":"https://chromereleases.googleblog.com/2018/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"66"},"67":{"release_date":"2018-05-31","release_notes":"https://chromereleases.googleblog.com/2018/05/chrome-for-android-update_31.html","status":"retired","engine":"Blink","engine_version":"67"},"68":{"release_date":"2018-07-24","release_notes":"https://chromereleases.googleblog.com/2018/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"68"},"69":{"release_date":"2018-09-04","release_notes":"https://chromereleases.googleblog.com/2018/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"69"},"70":{"release_date":"2018-10-17","release_notes":"https://chromereleases.googleblog.com/2018/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"70"},"71":{"release_date":"2018-12-04","release_notes":"https://chromereleases.googleblog.com/2018/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"71"},"72":{"release_date":"2019-01-29","release_notes":"https://chromereleases.googleblog.com/2019/01/chrome-for-android-update_29.html","status":"retired","engine":"Blink","engine_version":"72"},"73":{"release_date":"2019-03-12","release_notes":"https://chromereleases.googleblog.com/2019/03/chrome-for-android-update_12.html","status":"retired","engine":"Blink","engine_version":"73"},"74":{"release_date":"2019-04-24","release_notes":"https://chromereleases.googleblog.com/2019/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"74"},"75":{"release_date":"2019-06-04","release_notes":"https://chromereleases.googleblog.com/2019/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"75"},"76":{"release_date":"2019-07-30","release_notes":"https://chromereleases.googleblog.com/2019/07/chrome-for-android-update_30.html","status":"retired","engine":"Blink","engine_version":"76"},"77":{"release_date":"2019-09-10","release_notes":"https://chromereleases.googleblog.com/2019/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"77"},"78":{"release_date":"2019-10-22","release_notes":"https://chromereleases.googleblog.com/2019/10/chrome-for-android-update_22.html","status":"retired","engine":"Blink","engine_version":"78"},"79":{"release_date":"2019-12-17","release_notes":"https://chromereleases.googleblog.com/2019/12/chrome-for-android-update_17.html","status":"retired","engine":"Blink","engine_version":"79"},"80":{"release_date":"2020-02-04","release_notes":"https://chromereleases.googleblog.com/2020/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"80"},"81":{"release_date":"2020-04-07","release_notes":"https://chromereleases.googleblog.com/2020/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"81"},"83":{"release_date":"2020-05-19","release_notes":"https://chromereleases.googleblog.com/2020/05/chrome-for-android-update_19.html","status":"retired","engine":"Blink","engine_version":"83"},"84":{"release_date":"2020-07-27","release_notes":"https://chromereleases.googleblog.com/2020/07/chrome-for-android-update_27.html","status":"retired","engine":"Blink","engine_version":"84"},"85":{"release_date":"2020-08-25","release_notes":"https://chromereleases.googleblog.com/2020/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"85"},"86":{"release_date":"2020-10-20","release_notes":"https://chromereleases.googleblog.com/2020/10/chrome-for-android-update_20.html","status":"retired","engine":"Blink","engine_version":"86"},"87":{"release_date":"2020-11-17","release_notes":"https://chromereleases.googleblog.com/2020/11/chrome-for-android-update_17.html","status":"retired","engine":"Blink","engine_version":"87"},"88":{"release_date":"2021-01-19","release_notes":"https://chromereleases.googleblog.com/2021/01/chrome-for-android-update_19.html","status":"retired","engine":"Blink","engine_version":"88"},"89":{"release_date":"2021-03-02","release_notes":"https://chromereleases.googleblog.com/2021/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"89"},"90":{"release_date":"2021-04-13","release_notes":"https://chromereleases.googleblog.com/2021/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"90"},"91":{"release_date":"2021-05-25","release_notes":"https://chromereleases.googleblog.com/2021/05/chrome-for-android-update_01607414128.html","status":"retired","engine":"Blink","engine_version":"91"},"92":{"release_date":"2021-07-20","release_notes":"https://chromereleases.googleblog.com/2021/07/chrome-for-android-update_01500789893.html","status":"retired","engine":"Blink","engine_version":"92"},"93":{"release_date":"2021-08-31","release_notes":"https://chromereleases.googleblog.com/2021/08/chrome-for-android-update_0881967577.html","status":"retired","engine":"Blink","engine_version":"93"},"94":{"release_date":"2021-09-21","release_notes":"https://chromereleases.googleblog.com/2021/09/chrome-for-android-update_21.html","status":"retired","engine":"Blink","engine_version":"94"},"95":{"release_date":"2021-10-19","release_notes":"https://chromereleases.googleblog.com/2021/10/chrome-for-android-update_01703513036.html","status":"retired","engine":"Blink","engine_version":"95"},"96":{"release_date":"2021-11-15","release_notes":"https://chromereleases.googleblog.com/2021/11/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"96"},"97":{"release_date":"2022-01-04","release_notes":"https://chromereleases.googleblog.com/2022/01/chrome-for-android-update.html","status":"current","engine":"Blink","engine_version":"97"},"98":{"release_date":"2022-02-01","status":"beta","engine":"Blink","engine_version":"98"},"99":{"release_date":"2022-03-01","status":"nightly","engine":"Blink","engine_version":"99"}}},"deno":{"name":"Deno","releases":{"1.0":{"release_date":"2020-05-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.0.0","status":"retired","engine":"V8","engine_version":"8.4"},"1.1":{"release_date":"2020-06-12","release_notes":"https://github.com/denoland/deno/releases/tag/v1.1.0","status":"retired","engine":"V8","engine_version":"8.4"},"1.2":{"release_date":"2020-07-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.2.0","status":"retired","engine":"V8","engine_version":"8.5"},"1.3":{"release_date":"2020-08-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.3.0","status":"retired","engine":"V8","engine_version":"8.6"},"1.4":{"release_date":"2020-09-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.4.0","status":"retired","engine":"V8","engine_version":"8.7"},"1.5":{"release_date":"2020-10-27","release_notes":"https://github.com/denoland/deno/releases/tag/v1.5.0","status":"retired","engine":"V8","engine_version":"8.7"},"1.6":{"release_date":"2020-12-08","release_notes":"https://github.com/denoland/deno/releases/tag/v1.6.0","status":"retired","engine":"V8","engine_version":"8.8"},"1.7":{"release_date":"2021-01-19","release_notes":"https://github.com/denoland/deno/releases/tag/v1.7.0","status":"retired","engine":"V8","engine_version":"8.9"},"1.8":{"release_date":"2021-03-02","release_notes":"https://github.com/denoland/deno/releases/tag/v1.8.0","status":"retired","engine":"V8","engine_version":"9.0"},"1.9":{"release_date":"2021-04-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.9.0","status":"retired","engine":"V8","engine_version":"9.1"},"1.10":{"release_date":"2021-05-11","release_notes":"https://github.com/denoland/deno/releases/tag/v1.10.1","status":"retired","engine":"V8","engine_version":"9.1"},"1.11":{"release_date":"2021-06-08","release_notes":"https://github.com/denoland/deno/releases/tag/v1.11.0","status":"retired","engine":"V8","engine_version":"9.1"},"1.12":{"release_date":"2021-07-13","release_notes":"https://github.com/denoland/deno/releases/tag/v1.12.0","status":"retired","engine":"V8","engine_version":"9.2"},"1.13":{"release_date":"2021-08-10","release_notes":"https://github.com/denoland/deno/releases/tag/v1.13.0","status":"retired","engine":"V8","engine_version":"9.3"},"1.14":{"release_date":"2021-09-14","release_notes":"https://github.com/denoland/deno/releases/tag/v1.14.0","status":"retired","engine":"V8","engine_version":"9.4"},"1.15":{"release_date":"2021-10-12","release_notes":"https://github.com/denoland/deno/releases/tag/v1.15.0","status":"retired","engine":"V8","engine_version":"9.5"},"1.16":{"release_date":"2021-11-08","release_notes":"https://github.com/denoland/deno/releases/tag/v1.16.0","status":"current","engine":"V8","engine_version":"9.7"},"1.17":{"release_date":"2021-12-16","release_notes":"https://github.com/denoland/deno/releases/tag/v1.17.0","status":"current","engine":"V8","engine_version":"9.7"},"1.18":{"release_date":"2022-01-20","release_notes":"https://github.com/denoland/deno/releases/tag/v1.18.0","status":"current","engine":"V8","engine_version":"9.8"},"1.19":{"release_date":"2022-02-17","status":"nightly","engine":"V8","engine_version":"9.9"}}},"edge":{"name":"Edge","pref_url":"about:flags","releases":{"12":{"release_date":"2015-07-28","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-12","status":"retired","engine":"EdgeHTML","engine_version":"12"},"13":{"release_date":"2015-11-12","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-13","status":"retired","engine":"EdgeHTML","engine_version":"13"},"14":{"release_date":"2016-08-02","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-14","status":"retired","engine":"EdgeHTML","engine_version":"14"},"15":{"release_date":"2017-04-05","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-15","status":"retired","engine":"EdgeHTML","engine_version":"15"},"16":{"release_date":"2017-10-17","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-16","status":"retired","engine":"EdgeHTML","engine_version":"16"},"17":{"release_date":"2018-04-30","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new/edgehtml-17","status":"retired","engine":"EdgeHTML","engine_version":"17"},"18":{"release_date":"2018-10-02","release_notes":"https://docs.microsoft.com/en-us/microsoft-edge/dev-guide/whats-new","status":"retired","engine":"EdgeHTML","engine_version":"18"},"79":{"release_date":"2020-01-15","release_notes":"https://blogs.windows.com/windowsexperience/2020/01/15/new-year-new-browser-the-new-microsoft-edge-is-out-of-preview-and-now-available-for-download/","status":"retired","engine":"Blink","engine_version":"79"},"80":{"release_date":"2020-02-07","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-80036148-february-7","status":"retired","engine":"Blink","engine_version":"80"},"81":{"release_date":"2020-04-13","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-81041653-april-13","status":"retired","engine":"Blink","engine_version":"81"},"83":{"release_date":"2020-05-21","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-83047837-may-21","status":"retired","engine":"Blink","engine_version":"83"},"84":{"release_date":"2020-07-16","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-84052240-july-16","status":"retired","engine":"Blink","engine_version":"84"},"85":{"release_date":"2020-08-27","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-85056441-august-27","status":"retired","engine":"Blink","engine_version":"85"},"86":{"release_date":"2020-10-09","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-86062238-october-9","status":"retired","engine":"Blink","engine_version":"86"},"87":{"release_date":"2020-11-19","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-87066441-november-19","status":"retired","engine":"Blink","engine_version":"87"},"88":{"release_date":"2021-01-21","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-88070550-january-21","status":"retired","engine":"Blink","engine_version":"88"},"89":{"release_date":"2021-03-04","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-89077445-march-4","status":"retired","engine":"Blink","engine_version":"89"},"90":{"release_date":"2021-04-15","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-90081839-april-15","status":"retired","engine":"Blink","engine_version":"90"},"91":{"release_date":"2021-05-27","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-91086437-may-27","status":"retired","engine":"Blink","engine_version":"91"},"92":{"release_date":"2021-07-22","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-92090255-july-22","status":"retired","engine":"Blink","engine_version":"92"},"93":{"release_date":"2021-09-02","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-93096138-september-02","status":"retired","engine":"Blink","engine_version":"93"},"94":{"release_date":"2021-09-24","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-94099231-september-24","status":"retired","engine":"Blink","engine_version":"94"},"95":{"release_date":"2021-10-21","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-950102030-october-21","status":"retired","engine":"Blink","engine_version":"95"},"96":{"release_date":"2021-11-19","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-960105429-november-19","status":"retired","engine":"Blink","engine_version":"96"},"97":{"release_date":"2022-01-06","release_notes":"https://docs.microsoft.com/en-us/deployedge/microsoft-edge-relnote-stable-channel#version-970107255-january-6","status":"current","engine":"Blink","engine_version":"97"},"98":{"status":"beta","engine":"Blink","engine_version":"98"},"99":{"status":"nightly","engine":"Blink","engine_version":"99"}}},"firefox":{"name":"Firefox","preview_name":"Nightly","pref_url":"about:config","releases":{"1":{"release_date":"2004-11-09","release_notes":"http://website-archive.mozilla.org/www.mozilla.org/firefox_releasenotes/en-US/firefox/releases/1.0.html","status":"retired","engine":"Gecko","engine_version":"1.7"},"2":{"release_date":"2006-10-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/2","status":"retired","engine":"Gecko","engine_version":"1.8.1"},"3":{"release_date":"2008-06-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/3","status":"retired","engine":"Gecko","engine_version":"1.9"},"4":{"release_date":"2011-03-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/4","status":"retired","engine":"Gecko","engine_version":"2"},"5":{"release_date":"2011-06-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/5","status":"retired","engine":"Gecko","engine_version":"5"},"6":{"release_date":"2011-08-16","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/6","status":"retired","engine":"Gecko","engine_version":"6"},"7":{"release_date":"2011-09-27","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/7","status":"retired","engine":"Gecko","engine_version":"7"},"8":{"release_date":"2011-11-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/8","status":"retired","engine":"Gecko","engine_version":"8"},"9":{"release_date":"2011-12-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/9","status":"retired","engine":"Gecko","engine_version":"9"},"10":{"release_date":"2012-01-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/10","status":"retired","engine":"Gecko","engine_version":"10"},"11":{"release_date":"2012-03-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/11","status":"retired","engine":"Gecko","engine_version":"11"},"12":{"release_date":"2012-04-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/12","status":"retired","engine":"Gecko","engine_version":"12"},"13":{"release_date":"2012-06-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/13","status":"retired","engine":"Gecko","engine_version":"13"},"14":{"release_date":"2012-07-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/14","status":"retired","engine":"Gecko","engine_version":"14"},"15":{"release_date":"2012-08-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/15","status":"retired","engine":"Gecko","engine_version":"15"},"16":{"release_date":"2012-10-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/16","status":"retired","engine":"Gecko","engine_version":"16"},"17":{"release_date":"2012-11-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/17","status":"retired","engine":"Gecko","engine_version":"17"},"18":{"release_date":"2013-01-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/18","status":"retired","engine":"Gecko","engine_version":"18"},"19":{"release_date":"2013-02-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/19","status":"retired","engine":"Gecko","engine_version":"19"},"20":{"release_date":"2013-04-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/20","status":"retired","engine":"Gecko","engine_version":"20"},"21":{"release_date":"2013-05-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/21","status":"retired","engine":"Gecko","engine_version":"21"},"22":{"release_date":"2013-06-25","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/22","status":"retired","engine":"Gecko","engine_version":"22"},"23":{"release_date":"2013-08-06","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/23","status":"retired","engine":"Gecko","engine_version":"23"},"24":{"release_date":"2013-09-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/24","status":"retired","engine":"Gecko","engine_version":"24"},"25":{"release_date":"2013-10-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/25","status":"retired","engine":"Gecko","engine_version":"25"},"26":{"release_date":"2013-12-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/26","status":"retired","engine":"Gecko","engine_version":"26"},"27":{"release_date":"2014-02-04","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/27","status":"retired","engine":"Gecko","engine_version":"27"},"28":{"release_date":"2014-03-18","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/28","status":"retired","engine":"Gecko","engine_version":"28"},"29":{"release_date":"2014-04-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/29","status":"retired","engine":"Gecko","engine_version":"29"},"30":{"release_date":"2014-06-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/30","status":"retired","engine":"Gecko","engine_version":"30"},"31":{"release_date":"2014-07-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/31","status":"retired","engine":"Gecko","engine_version":"31"},"32":{"release_date":"2014-09-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/32","status":"retired","engine":"Gecko","engine_version":"32"},"33":{"release_date":"2014-10-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/33","status":"retired","engine":"Gecko","engine_version":"33"},"34":{"release_date":"2014-12-01","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/34","status":"retired","engine":"Gecko","engine_version":"34"},"35":{"release_date":"2015-01-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/35","status":"retired","engine":"Gecko","engine_version":"35"},"36":{"release_date":"2015-02-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/36","status":"retired","engine":"Gecko","engine_version":"36"},"37":{"release_date":"2015-03-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/37","status":"retired","engine":"Gecko","engine_version":"37"},"38":{"release_date":"2015-05-12","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/38","status":"retired","engine":"Gecko","engine_version":"38"},"39":{"release_date":"2015-07-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/39","status":"retired","engine":"Gecko","engine_version":"39"},"40":{"release_date":"2015-08-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/40","status":"retired","engine":"Gecko","engine_version":"40"},"41":{"release_date":"2015-09-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/41","status":"retired","engine":"Gecko","engine_version":"41"},"42":{"release_date":"2015-11-03","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/42","status":"retired","engine":"Gecko","engine_version":"42"},"43":{"release_date":"2015-12-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/43","status":"retired","engine":"Gecko","engine_version":"43"},"44":{"release_date":"2016-01-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/44","status":"retired","engine":"Gecko","engine_version":"44"},"45":{"release_date":"2016-03-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/45","status":"retired","engine":"Gecko","engine_version":"45"},"46":{"release_date":"2016-04-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/46","status":"retired","engine":"Gecko","engine_version":"46"},"47":{"release_date":"2016-06-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/47","status":"retired","engine":"Gecko","engine_version":"47"},"48":{"release_date":"2016-08-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/48","status":"retired","engine":"Gecko","engine_version":"48"},"49":{"release_date":"2016-09-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/49","status":"retired","engine":"Gecko","engine_version":"49"},"50":{"release_date":"2016-11-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/50","status":"retired","engine":"Gecko","engine_version":"50"},"51":{"release_date":"2017-01-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/51","status":"retired","engine":"Gecko","engine_version":"51"},"52":{"release_date":"2017-03-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/52","status":"retired","engine":"Gecko","engine_version":"52"},"53":{"release_date":"2017-04-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/53","status":"retired","engine":"Gecko","engine_version":"53"},"54":{"release_date":"2017-06-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/54","status":"retired","engine":"Gecko","engine_version":"54"},"55":{"release_date":"2017-08-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/55","status":"retired","engine":"Gecko","engine_version":"55"},"56":{"release_date":"2017-09-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/56","status":"retired","engine":"Gecko","engine_version":"56"},"57":{"release_date":"2017-11-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/57","status":"retired","engine":"Gecko","engine_version":"57"},"58":{"release_date":"2018-01-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/58","status":"retired","engine":"Gecko","engine_version":"58"},"59":{"release_date":"2018-03-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/59","status":"retired","engine":"Gecko","engine_version":"59"},"60":{"release_date":"2018-05-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/60","status":"retired","engine":"Gecko","engine_version":"60"},"61":{"release_date":"2018-06-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/61","status":"retired","engine":"Gecko","engine_version":"61"},"62":{"release_date":"2018-09-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/62","status":"retired","engine":"Gecko","engine_version":"62"},"63":{"release_date":"2018-10-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/63","status":"retired","engine":"Gecko","engine_version":"63"},"64":{"release_date":"2018-12-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/64","status":"retired","engine":"Gecko","engine_version":"64"},"65":{"release_date":"2019-01-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/65","status":"retired","engine":"Gecko","engine_version":"65"},"66":{"release_date":"2019-03-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/66","status":"retired","engine":"Gecko","engine_version":"66"},"67":{"release_date":"2019-05-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/67","status":"retired","engine":"Gecko","engine_version":"67"},"68":{"release_date":"2019-07-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/68","status":"retired","engine":"Gecko","engine_version":"68"},"69":{"release_date":"2019-09-03","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/69","status":"retired","engine":"Gecko","engine_version":"69"},"70":{"release_date":"2019-10-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/70","status":"retired","engine":"Gecko","engine_version":"70"},"71":{"release_date":"2019-12-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/71","status":"retired","engine":"Gecko","engine_version":"71"},"72":{"release_date":"2020-01-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/72","status":"retired","engine":"Gecko","engine_version":"72"},"73":{"release_date":"2020-02-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/73","status":"retired","engine":"Gecko","engine_version":"73"},"74":{"release_date":"2020-03-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/74","status":"retired","engine":"Gecko","engine_version":"74"},"75":{"release_date":"2020-04-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/75","status":"retired","engine":"Gecko","engine_version":"75"},"76":{"release_date":"2020-05-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/76","status":"retired","engine":"Gecko","engine_version":"76"},"77":{"release_date":"2020-06-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/77","status":"retired","engine":"Gecko","engine_version":"77"},"78":{"release_date":"2020-06-30","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/78","status":"retired","engine":"Gecko","engine_version":"78"},"79":{"release_date":"2020-07-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/79","status":"retired","engine":"Gecko","engine_version":"79"},"80":{"release_date":"2020-08-25","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/80","status":"retired","engine":"Gecko","engine_version":"80"},"81":{"release_date":"2020-09-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/81","status":"retired","engine":"Gecko","engine_version":"81"},"82":{"release_date":"2020-10-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/82","status":"retired","engine":"Gecko","engine_version":"82"},"83":{"release_date":"2020-11-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/83","status":"retired","engine":"Gecko","engine_version":"83"},"84":{"release_date":"2020-12-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/84","status":"retired","engine":"Gecko","engine_version":"84"},"85":{"release_date":"2021-01-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/85","status":"retired","engine":"Gecko","engine_version":"85"},"86":{"release_date":"2021-02-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/86","status":"retired","engine":"Gecko","engine_version":"86"},"87":{"release_date":"2021-03-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/87","status":"retired","engine":"Gecko","engine_version":"87"},"88":{"release_date":"2021-04-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/88","status":"retired","engine":"Gecko","engine_version":"88"},"89":{"release_date":"2021-06-01","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/89","status":"retired","engine":"Gecko","engine_version":"89"},"90":{"release_date":"2021-07-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/90","status":"retired","engine":"Gecko","engine_version":"90"},"91":{"release_date":"2021-08-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/91","status":"esr","engine":"Gecko","engine_version":"91"},"92":{"release_date":"2021-09-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/92","status":"retired","engine":"Gecko","engine_version":"92"},"93":{"release_date":"2021-10-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/93","status":"retired","engine":"Gecko","engine_version":"93"},"94":{"release_date":"2021-11-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/94","status":"retired","engine":"Gecko","engine_version":"94"},"95":{"release_date":"2021-12-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/95","status":"retired","engine":"Gecko","engine_version":"95"},"96":{"release_date":"2022-01-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/96","status":"current","engine":"Gecko","engine_version":"96"},"97":{"release_date":"2022-02-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/97","status":"beta","engine":"Gecko","engine_version":"97"},"98":{"release_date":"2022-03-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/98","status":"nightly","engine":"Gecko","engine_version":"98"},"1.5":{"release_date":"2005-11-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/1.5","status":"retired","engine":"Gecko","engine_version":"1.8"},"3.5":{"release_date":"2009-06-30","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/3.5","status":"retired","engine":"Gecko","engine_version":"1.9.1"},"3.6":{"release_date":"2010-01-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/3.6","status":"retired","engine":"Gecko","engine_version":"1.9.2"}}},"firefox_android":{"name":"Firefox for Android","pref_url":"about:config","releases":{"4":{"release_date":"2011-03-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/4","status":"retired","engine":"Gecko","engine_version":"2"},"5":{"release_date":"2011-06-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/5","status":"retired","engine":"Gecko","engine_version":"5"},"6":{"release_date":"2011-08-16","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/6","status":"retired","engine":"Gecko","engine_version":"6"},"7":{"release_date":"2011-09-27","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/7","status":"retired","engine":"Gecko","engine_version":"7"},"8":{"release_date":"2011-11-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/8","status":"retired","engine":"Gecko","engine_version":"8"},"9":{"release_date":"2011-12-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/9","status":"retired","engine":"Gecko","engine_version":"9"},"10":{"release_date":"2012-01-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/10","status":"retired","engine":"Gecko","engine_version":"10"},"14":{"release_date":"2012-06-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/14","status":"retired","engine":"Gecko","engine_version":"14"},"15":{"release_date":"2012-08-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/15","status":"retired","engine":"Gecko","engine_version":"15"},"16":{"release_date":"2012-10-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/16","status":"retired","engine":"Gecko","engine_version":"16"},"17":{"release_date":"2012-11-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/17","status":"retired","engine":"Gecko","engine_version":"17"},"18":{"release_date":"2013-01-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/18","status":"retired","engine":"Gecko","engine_version":"18"},"19":{"release_date":"2013-02-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/19","status":"retired","engine":"Gecko","engine_version":"19"},"20":{"release_date":"2013-04-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/20","status":"retired","engine":"Gecko","engine_version":"20"},"21":{"release_date":"2013-05-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/21","status":"retired","engine":"Gecko","engine_version":"21"},"22":{"release_date":"2013-06-25","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/22","status":"retired","engine":"Gecko","engine_version":"22"},"23":{"release_date":"2013-08-06","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/23","status":"retired","engine":"Gecko","engine_version":"23"},"24":{"release_date":"2013-09-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/24","status":"retired","engine":"Gecko","engine_version":"24"},"25":{"release_date":"2013-10-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/25","status":"retired","engine":"Gecko","engine_version":"25"},"26":{"release_date":"2013-12-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/26","status":"retired","engine":"Gecko","engine_version":"26"},"27":{"release_date":"2014-02-04","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/27","status":"retired","engine":"Gecko","engine_version":"27"},"28":{"release_date":"2014-03-18","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/28","status":"retired","engine":"Gecko","engine_version":"28"},"29":{"release_date":"2014-04-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/29","status":"retired","engine":"Gecko","engine_version":"29"},"30":{"release_date":"2014-06-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/30","status":"retired","engine":"Gecko","engine_version":"30"},"31":{"release_date":"2014-07-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/31","status":"retired","engine":"Gecko","engine_version":"31"},"32":{"release_date":"2014-09-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/32","status":"retired","engine":"Gecko","engine_version":"32"},"33":{"release_date":"2014-10-14","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/33","status":"retired","engine":"Gecko","engine_version":"33"},"34":{"release_date":"2014-12-01","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/34","status":"retired","engine":"Gecko","engine_version":"34"},"35":{"release_date":"2015-01-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/35","status":"retired","engine":"Gecko","engine_version":"35"},"36":{"release_date":"2015-02-27","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/36","status":"retired","engine":"Gecko","engine_version":"36"},"37":{"release_date":"2015-03-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/37","status":"retired","engine":"Gecko","engine_version":"37"},"38":{"release_date":"2015-05-12","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/38","status":"retired","engine":"Gecko","engine_version":"38"},"39":{"release_date":"2015-07-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/39","status":"retired","engine":"Gecko","engine_version":"39"},"40":{"release_date":"2015-08-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/40","status":"retired","engine":"Gecko","engine_version":"40"},"41":{"release_date":"2015-09-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/41","status":"retired","engine":"Gecko","engine_version":"41"},"42":{"release_date":"2015-11-03","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/42","status":"retired","engine":"Gecko","engine_version":"42"},"43":{"release_date":"2015-12-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/43","status":"retired","engine":"Gecko","engine_version":"43"},"44":{"release_date":"2016-01-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/44","status":"retired","engine":"Gecko","engine_version":"44"},"45":{"release_date":"2016-03-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/45","status":"retired","engine":"Gecko","engine_version":"45"},"46":{"release_date":"2016-04-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/46","status":"retired","engine":"Gecko","engine_version":"46"},"47":{"release_date":"2016-06-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/47","status":"retired","engine":"Gecko","engine_version":"47"},"48":{"release_date":"2016-08-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/48","status":"retired","engine":"Gecko","engine_version":"48"},"49":{"release_date":"2016-09-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/49","status":"retired","engine":"Gecko","engine_version":"49"},"50":{"release_date":"2016-11-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/50","status":"retired","engine":"Gecko","engine_version":"50"},"51":{"release_date":"2017-01-24","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/51","status":"retired","engine":"Gecko","engine_version":"51"},"52":{"release_date":"2017-03-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/52","status":"retired","engine":"Gecko","engine_version":"52"},"53":{"release_date":"2017-04-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/53","status":"retired","engine":"Gecko","engine_version":"53"},"54":{"release_date":"2017-06-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/54","status":"retired","engine":"Gecko","engine_version":"54"},"55":{"release_date":"2017-08-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/55","status":"retired","engine":"Gecko","engine_version":"55"},"56":{"release_date":"2017-09-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/56","status":"retired","engine":"Gecko","engine_version":"56"},"57":{"release_date":"2017-11-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/57","status":"retired","engine":"Gecko","engine_version":"57"},"58":{"release_date":"2018-01-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/58","status":"retired","engine":"Gecko","engine_version":"58"},"59":{"release_date":"2018-03-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/59","status":"retired","engine":"Gecko","engine_version":"59"},"60":{"release_date":"2018-05-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/60","status":"retired","engine":"Gecko","engine_version":"60"},"61":{"release_date":"2018-06-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/61","status":"retired","engine":"Gecko","engine_version":"61"},"62":{"release_date":"2018-09-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/62","status":"retired","engine":"Gecko","engine_version":"62"},"63":{"release_date":"2018-10-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/63","status":"retired","engine":"Gecko","engine_version":"63"},"64":{"release_date":"2018-12-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/64","status":"retired","engine":"Gecko","engine_version":"64"},"65":{"release_date":"2019-01-29","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/65","status":"retired","engine":"Gecko","engine_version":"65"},"66":{"release_date":"2019-03-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/66","status":"retired","engine":"Gecko","engine_version":"66"},"67":{"release_date":"2019-05-21","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/67","status":"retired","engine":"Gecko","engine_version":"67"},"68":{"release_date":"2019-07-09","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/68","status":"retired","engine":"Gecko","engine_version":"68"},"79":{"release_date":"2020-07-28","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/79","status":"retired","engine":"Gecko","engine_version":"79"},"80":{"release_date":"2020-08-31","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/80","status":"retired","engine":"Gecko","engine_version":"80"},"81":{"release_date":"2020-09-22","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/81","status":"retired","engine":"Gecko","engine_version":"81"},"82":{"release_date":"2020-10-20","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/82","status":"retired","engine":"Gecko","engine_version":"82"},"83":{"release_date":"2020-11-17","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/83","status":"retired","engine":"Gecko","engine_version":"83"},"84":{"release_date":"2020-12-15","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/84","status":"retired","engine":"Gecko","engine_version":"84"},"85":{"release_date":"2021-01-26","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/85","status":"retired","engine":"Gecko","engine_version":"85"},"86":{"release_date":"2021-02-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/86","status":"retired","engine":"Gecko","engine_version":"86"},"87":{"release_date":"2021-03-23","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/87","status":"retired","engine":"Gecko","engine_version":"87"},"88":{"release_date":"2021-04-19","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/88","status":"retired","engine":"Gecko","engine_version":"88"},"89":{"release_date":"2021-06-01","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/89","status":"retired","engine":"Gecko","engine_version":"89"},"90":{"release_date":"2021-07-13","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/90","status":"retired","engine":"Gecko","engine_version":"90"},"91":{"release_date":"2021-08-10","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/91","status":"retired","engine":"Gecko","engine_version":"91"},"92":{"release_date":"2021-09-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/92","status":"retired","engine":"Gecko","engine_version":"92"},"93":{"release_date":"2021-10-05","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/93","status":"retired","engine":"Gecko","engine_version":"93"},"94":{"release_date":"2021-11-02","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/94","status":"retired","engine":"Gecko","engine_version":"94"},"95":{"release_date":"2021-12-07","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/95","status":"retired","engine":"Gecko","engine_version":"95"},"96":{"release_date":"2022-01-11","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/96","status":"current","engine":"Gecko","engine_version":"96"},"97":{"release_date":"2022-02-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/97","status":"beta","engine":"Gecko","engine_version":"97"},"98":{"release_date":"2022-03-08","release_notes":"https://developer.mozilla.org/docs/Mozilla/Firefox/Releases/98","status":"nightly","engine":"Gecko","engine_version":"98"}}},"ie":{"name":"Internet Explorer","releases":{"1":{"release_date":"1995-08-16","status":"retired"},"2":{"release_date":"1995-11-22","status":"retired"},"3":{"release_date":"1996-08-13","status":"retired"},"4":{"release_date":"1997-09-30","status":"retired"},"5":{"release_date":"1999-03-18","status":"retired"},"6":{"release_date":"2001-08-27","status":"retired"},"7":{"release_date":"2006-10-18","status":"retired"},"8":{"release_date":"2009-03-19","status":"retired","engine":"Trident","engine_version":"4.0"},"9":{"release_date":"2011-03-14","status":"retired","engine":"Trident","engine_version":"5.0"},"10":{"release_date":"2012-10-26","status":"retired","engine":"Trident","engine_version":"6.0"},"11":{"release_date":"2013-10-17","status":"current","engine":"Trident","engine_version":"7.0"},"5.5":{"release_date":"2000-07-06","status":"retired"}}},"nodejs":{"name":"Node.js","releases":{"0.10.0":{"release_date":"2013-03-11","release_notes":"https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V010.md","status":"retired","engine":"V8","engine_version":"3.14"},"0.12.0":{"release_date":"2015-02-06","release_notes":"https://github.com/nodejs/node/blob/master/doc/changelogs/CHANGELOG_V012.md","status":"retired","engine":"V8","engine_version":"3.28"},"4.0.0":{"release_date":"2015-09-08","release_notes":"https://nodejs.org/en/blog/release/v4.0.0/","status":"retired","engine":"V8","engine_version":"4.5"},"5.0.0":{"release_date":"2015-10-29","release_notes":"https://nodejs.org/en/blog/release/v5.0.0/","status":"retired","engine":"V8","engine_version":"4.6"},"6.0.0":{"release_date":"2016-04-26","release_notes":"https://nodejs.org/en/blog/release/v6.0.0/","status":"retired","engine":"V8","engine_version":"5"},"6.5.0":{"release_date":"2016-08-26","release_notes":"https://nodejs.org/en/blog/release/v6.5.0/","status":"retired","engine":"V8","engine_version":"5.1"},"7.0.0":{"release_date":"2016-10-25","release_notes":"https://nodejs.org/en/blog/release/v7.0.0/","status":"retired","engine":"V8","engine_version":"5.4"},"7.5.0":{"release_date":"2017-01-31","release_notes":"https://nodejs.org/en/blog/release/v7.5.0/","status":"retired","engine":"V8","engine_version":"5.4"},"7.6.0":{"release_date":"2017-02-21","release_notes":"https://nodejs.org/en/blog/release/v7.6.0/","status":"retired","engine":"V8","engine_version":"5.5"},"7.7.0":{"release_date":"2017-02-28","release_notes":"https://nodejs.org/en/blog/release/v7.7.0/","status":"retired","engine":"V8","engine_version":"5.5"},"7.10.0":{"release_date":"2017-05-02","release_notes":"https://nodejs.org/en/blog/release/v7.10.0/","status":"retired","engine":"V8","engine_version":"5.5"},"8.0.0":{"release_date":"2017-05-30","release_notes":"https://nodejs.org/en/blog/release/v8.0.0/","status":"retired","engine":"V8","engine_version":"5.8"},"8.3.0":{"release_date":"2017-08-09","release_notes":"https://nodejs.org/en/blog/release/v8.3.0/","status":"retired","engine":"V8","engine_version":"6.0"},"8.5.0":{"release_date":"2017-09-12","release_notes":"https://nodejs.org/en/blog/release/v8.5.0/","status":"retired","engine":"V8","engine_version":"6.0"},"8.7.0":{"release_date":"2017-10-11","release_notes":"https://nodejs.org/en/blog/release/v8.7.0/","status":"retired","engine":"V8","engine_version":"6.1"},"8.10.0":{"release_date":"2018-03-06","release_notes":"https://nodejs.org/en/blog/release/v8.10.0/","status":"retired","engine":"V8","engine_version":"6.2"},"9.3.0":{"release_date":"2017-12-12","release_notes":"https://nodejs.org/en/blog/release/v9.3.0/","status":"retired","engine":"V8","engine_version":"6.2"},"10.0.0":{"release_date":"2018-04-24","release_notes":"https://nodejs.org/en/blog/release/v10.0.0/","status":"retired","engine":"V8","engine_version":"6.6"},"10.4.0":{"release_date":"2018-06-06","release_notes":"https://nodejs.org/en/blog/release/v10.4.0/","status":"retired","engine":"V8","engine_version":"6.7"},"10.5.0":{"release_date":"2018-06-20","release_notes":"https://nodejs.org/en/blog/release/v10.5.0/","status":"retired","engine":"V8","engine_version":"6.7"},"10.7.0":{"release_date":"2018-07-18","release_notes":"https://nodejs.org/en/blog/release/v10.7.0/","status":"retired","engine":"V8","engine_version":"6.7"},"10.9.0":{"release_date":"2018-08-16","release_notes":"https://nodejs.org/en/blog/release/v10.9.0/","status":"retired","engine":"V8","engine_version":"6.8"},"11.0.0":{"release_date":"2018-10-23","release_notes":"https://nodejs.org/en/blog/release/v11.0.0/","status":"retired","engine":"V8","engine_version":"7.0"},"11.7.0":{"release_date":"2019-01-18","release_notes":"https://nodejs.org/en/blog/release/v11.7.0/","status":"retired","engine":"V8","engine_version":"7.0"},"12.0.0":{"release_date":"2019-04-23","release_notes":"https://nodejs.org/en/blog/release/v12.0.0/","status":"retired","engine":"V8","engine_version":"7.4"},"12.5.0":{"release_date":"2019-06-27","release_notes":"https://nodejs.org/en/blog/release/v12.5.0/","status":"retired","engine":"V8","engine_version":"7.5"},"12.9.0":{"release_date":"2019-08-20","release_notes":"https://nodejs.org/en/blog/release/v12.9.0/","status":"retired","engine":"V8","engine_version":"7.6"},"12.11.0":{"release_date":"2019-09-25","release_notes":"https://nodejs.org/en/blog/release/v12.11.0/","status":"retired","engine":"V8","engine_version":"7.7"},"12.17.0":{"release_date":"2020-05-26","release_notes":"https://nodejs.org/en/blog/release/v12.17.0/","status":"esr","engine":"V8","engine_version":"7.8"},"13.0.0":{"release_date":"2019-10-10","release_notes":"https://nodejs.org/en/blog/release/v13.0.0/","status":"retired","engine":"V8","engine_version":"7.8"},"13.2.0":{"release_date":"2019-11-21","release_notes":"https://nodejs.org/en/blog/release/v13.2.0/","status":"retired","engine":"V8","engine_version":"7.9"},"14.0.0":{"release_date":"2020-04-21","release_notes":"https://nodejs.org/en/blog/release/v14.0.0/","status":"retired","engine":"V8","engine_version":"8.1"},"14.3.0":{"release_date":"2020-05-19","release_notes":"https://nodejs.org/en/blog/release/v14.3.0/","status":"retired","engine":"V8","engine_version":"8.3"},"14.5.0":{"release_date":"2020-06-30","release_notes":"https://nodejs.org/en/blog/release/v14.5.0/","status":"retired","engine":"V8","engine_version":"8.3"},"14.6.0":{"release_date":"2020-07-21","release_notes":"https://nodejs.org/en/blog/release/v14.6.0/","status":"retired","engine":"V8","engine_version":"8.4"},"14.7.0":{"release_date":"2020-07-29","release_notes":"https://nodejs.org/en/blog/release/v14.7.0/","status":"retired","engine":"V8","engine_version":"8.4"},"14.8.0":{"release_date":"2020-08-11","release_notes":"https://nodejs.org/en/blog/release/v14.8.0/","status":"esr","engine":"V8","engine_version":"8.4"},"15.0.0":{"release_date":"2020-10-20","release_notes":"https://nodejs.org/en/blog/release/v15.0.0/","status":"retired","engine":"V8","engine_version":"8.6"},"15.4.0":{"release_date":"2020-12-09","release_notes":"https://nodejs.org/en/blog/release/v15.4.0/","status":"retired","engine":"V8","engine_version":"8.6"},"15.7.0":{"release_date":"2021-01-26","release_notes":"https://nodejs.org/en/blog/release/v15.7.0/","status":"retired","engine":"V8","engine_version":"8.6"},"15.12.0":{"release_date":"2021-03-17","release_notes":"https://nodejs.org/en/blog/release/v15.12.0/","status":"retired","engine":"V8","engine_version":"8.6"},"16.0.0":{"release_date":"2021-04-20","release_notes":"https://nodejs.org/en/blog/release/v16.0.0/","status":"retired","engine":"V8","engine_version":"9.0"},"16.4.0":{"release_date":"2021-06-23","release_notes":"https://nodejs.org/en/blog/release/v16.4.0/","status":"retired","engine":"V8","engine_version":"9.1"},"16.5.0":{"release_date":"2021-07-14","release_notes":"https://nodejs.org/en/blog/release/v16.5.0/","status":"retired","engine":"V8","engine_version":"9.2"},"16.6.0":{"release_date":"2021-07-29","release_notes":"https://nodejs.org/en/blog/release/v16.6.0/","status":"retired","engine":"V8","engine_version":"9.2"},"16.7.0":{"release_date":"2021-08-17","release_notes":"https://nodejs.org/en/blog/release/v16.7.0/","status":"retired","engine":"V8","engine_version":"9.2"},"16.9.0":{"release_date":"2021-09-07","release_notes":"https://nodejs.org/en/blog/release/v16.9.0/","status":"current","engine":"V8","engine_version":"9.3"},"17.0.0":{"release_date":"2021-10-19","release_notes":"https://nodejs.org/en/blog/release/v17.0.0/","status":"current","engine":"V8","engine_version":"9.5"}}},"opera":{"name":"Opera","releases":{"2":{"release_date":"1996-07-14","status":"retired"},"3":{"release_date":"1997-12-01","status":"retired"},"4":{"release_date":"2000-06-28","status":"retired"},"5":{"release_date":"2000-12-06","status":"retired"},"6":{"release_date":"2001-12-18","status":"retired"},"7":{"release_date":"2003-01-28","status":"retired","engine":"Presto","engine_version":"1"},"8":{"release_date":"2005-04-19","status":"retired","engine":"Presto","engine_version":"1"},"9":{"release_date":"2006-06-20","status":"retired","engine":"Presto","engine_version":"2"},"10":{"release_date":"2009-09-01","release_notes":"https://dev.opera.com/blog/opera-10-weve-only-just-begun/","status":"retired","engine":"Presto","engine_version":"2.2"},"11":{"release_date":"2010-12-16","release_notes":"https://dev.opera.com/blog/new-html5-features-in-opera-11/","status":"retired","engine":"Presto","engine_version":"2.7"},"12":{"release_date":"2012-06-14","release_notes":"https://dev.opera.com/blog/hello-opera-12/","status":"retired","engine":"Presto","engine_version":"2.10"},"15":{"release_date":"2013-07-02","release_notes":"https://dev.opera.com/blog/introducing-opera-15-for-desktop-and-a-fast-release-cycle/","status":"retired","engine":"Blink","engine_version":"28"},"16":{"release_date":"2013-08-27","release_notes":"https://dev.opera.com/blog/opera-16-released-in-the-wild/","status":"retired","engine":"Blink","engine_version":"29"},"17":{"release_date":"2013-10-08","release_notes":"https://dev.opera.com/blog/opera-desktop-17-released/","status":"retired","engine":"Blink","engine_version":"30"},"18":{"release_date":"2013-11-19","release_notes":"https://dev.opera.com/blog/opera-desktop-18-released/","status":"retired","engine":"Blink","engine_version":"31"},"19":{"release_date":"2014-01-28","release_notes":"https://dev.opera.com/blog/opera-19/","status":"retired","engine":"Blink","engine_version":"32"},"20":{"release_date":"2014-03-04","release_notes":"https://dev.opera.com/blog/opera-20/","status":"retired","engine":"Blink","engine_version":"33"},"21":{"release_date":"2014-05-06","release_notes":"https://dev.opera.com/blog/opera-21/","status":"retired","engine":"Blink","engine_version":"34"},"22":{"release_date":"2014-06-03","release_notes":"https://dev.opera.com/blog/opera-22/","status":"retired","engine":"Blink","engine_version":"35"},"23":{"release_date":"2014-07-22","release_notes":"https://dev.opera.com/blog/opera-23/","status":"retired","engine":"Blink","engine_version":"36"},"24":{"release_date":"2014-09-02","release_notes":"https://dev.opera.com/blog/opera-24/","status":"retired","engine":"Blink","engine_version":"37"},"25":{"release_date":"2014-10-15","release_notes":"https://dev.opera.com/blog/opera-25/","status":"retired","engine":"Blink","engine_version":"38"},"26":{"release_date":"2014-12-03","release_notes":"https://dev.opera.com/blog/opera-26/","status":"retired","engine":"Blink","engine_version":"39"},"27":{"release_date":"2015-01-27","release_notes":"https://dev.opera.com/blog/opera-27/","status":"retired","engine":"Blink","engine_version":"40"},"28":{"release_date":"2015-03-10","release_notes":"https://dev.opera.com/blog/opera-28/","status":"retired","engine":"Blink","engine_version":"41"},"29":{"release_date":"2015-04-28","release_notes":"https://dev.opera.com/blog/opera-29/","status":"retired","engine":"Blink","engine_version":"42"},"30":{"release_date":"2015-06-09","release_notes":"https://dev.opera.com/blog/opera-30/","status":"retired","engine":"Blink","engine_version":"43"},"31":{"release_date":"2015-08-04","release_notes":"https://dev.opera.com/blog/opera-31/","status":"retired","engine":"Blink","engine_version":"44"},"32":{"release_date":"2015-09-15","release_notes":"https://dev.opera.com/blog/opera-32/","status":"retired","engine":"Blink","engine_version":"45"},"33":{"release_date":"2015-10-27","release_notes":"https://dev.opera.com/blog/opera-33/","status":"retired","engine":"Blink","engine_version":"46"},"34":{"release_date":"2015-12-08","release_notes":"https://dev.opera.com/blog/opera-34/","status":"retired","engine":"Blink","engine_version":"47"},"35":{"release_date":"2016-02-02","release_notes":"https://dev.opera.com/blog/opera-35/","status":"retired","engine":"Blink","engine_version":"48"},"36":{"release_date":"2016-03-15","release_notes":"https://dev.opera.com/blog/opera-36/","status":"retired","engine":"Blink","engine_version":"49"},"37":{"release_date":"2016-05-04","release_notes":"https://dev.opera.com/blog/opera-37/","status":"retired","engine":"Blink","engine_version":"50"},"38":{"release_date":"2016-06-08","release_notes":"https://dev.opera.com/blog/opera-38/","status":"retired","engine":"Blink","engine_version":"51"},"39":{"release_date":"2016-08-02","release_notes":"https://dev.opera.com/blog/opera-39/","status":"retired","engine":"Blink","engine_version":"52"},"40":{"release_date":"2016-09-20","release_notes":"https://dev.opera.com/blog/opera-40/","status":"retired","engine":"Blink","engine_version":"53"},"41":{"release_date":"2016-10-25","release_notes":"https://dev.opera.com/blog/opera-41/","status":"retired","engine":"Blink","engine_version":"54"},"42":{"release_date":"2016-12-13","release_notes":"https://dev.opera.com/blog/opera-42/","status":"retired","engine":"Blink","engine_version":"55"},"43":{"release_date":"2017-02-07","release_notes":"https://dev.opera.com/blog/opera-43/","status":"retired","engine":"Blink","engine_version":"56"},"44":{"release_date":"2017-03-21","release_notes":"https://dev.opera.com/blog/opera-44/","status":"retired","engine":"Blink","engine_version":"57"},"45":{"release_date":"2017-05-10","release_notes":"https://dev.opera.com/blog/opera-45/","status":"retired","engine":"Blink","engine_version":"58"},"46":{"release_date":"2017-06-22","release_notes":"https://dev.opera.com/blog/opera-46/","status":"retired","engine":"Blink","engine_version":"59"},"47":{"release_date":"2017-08-09","release_notes":"https://dev.opera.com/blog/opera-47/","status":"retired","engine":"Blink","engine_version":"60"},"48":{"release_date":"2017-09-27","status":"retired","engine":"Blink","engine_version":"61"},"49":{"release_date":"2017-11-08","release_notes":"https://dev.opera.com/blog/opera-49/","status":"retired","engine":"Blink","engine_version":"62"},"50":{"release_date":"2018-01-04","release_notes":"https://dev.opera.com/blog/opera-50/","status":"retired","engine":"Blink","engine_version":"63"},"51":{"release_date":"2018-02-07","release_notes":"https://dev.opera.com/blog/opera-51/","status":"retired","engine":"Blink","engine_version":"64"},"52":{"release_date":"2018-03-22","release_notes":"https://dev.opera.com/blog/opera-52/","status":"retired","engine":"Blink","engine_version":"65"},"53":{"release_date":"2018-05-10","release_notes":"https://dev.opera.com/blog/opera-53/","status":"retired","engine":"Blink","engine_version":"66"},"54":{"release_date":"2018-06-28","release_notes":"https://dev.opera.com/blog/opera-54/","status":"retired","engine":"Blink","engine_version":"67"},"55":{"release_date":"2018-08-16","release_notes":"https://blogs.opera.com/desktop/2018/08/opera-55-offers-better-control-web-pages-accessible-bookmarks/","status":"retired","engine":"Blink","engine_version":"68"},"56":{"release_date":"2018-09-25","release_notes":"https://dev.opera.com/blog/opera-56/","status":"retired","engine":"Blink","engine_version":"69"},"57":{"release_date":"2018-11-28","release_notes":"https://dev.opera.com/blog/opera-57/","status":"retired","engine":"Blink","engine_version":"70"},"58":{"release_date":"2019-01-23","release_notes":"https://dev.opera.com/blog/opera-58/","status":"retired","engine":"Blink","engine_version":"71"},"60":{"release_date":"2019-04-09","release_notes":"https://blogs.opera.com/desktop/2019/04/opera-60-reborn-3-web-3-0-vpn-ad-blocker/","status":"retired","engine":"Blink","engine_version":"73"},"62":{"release_date":"2019-06-27","release_notes":"https://blogs.opera.com/desktop/2019/06/opera-62-comes-with-design-updates-to-reborn-3/","status":"retired","engine":"Blink","engine_version":"75"},"63":{"release_date":"2019-08-20","release_notes":"https://blogs.opera.com/desktop/2019/08/opera-63-initial-release/","status":"retired","engine":"Blink","engine_version":"76"},"64":{"release_date":"2019-10-07","release_notes":"https://blogs.opera.com/desktop/2019/10/opera-64-faster-more-private-more-fun/","status":"retired","engine":"Blink","engine_version":"77"},"65":{"release_date":"2019-11-13","release_notes":"https://blogs.opera.com/desktop/2019/11/opera-65-comes-with-an-improved-tracker-blocker-and-redesigned-address-bar/","status":"retired","engine":"Blink","engine_version":"78"},"66":{"release_date":"2020-01-07","release_notes":"https://blogs.opera.com/desktop/2020/01/opera-66-initial-release-makes-it-easier-to-reopen-closed-tabs-and-to-access-extensions/","status":"retired","engine":"Blink","engine_version":"79"},"67":{"release_date":"2020-03-03","release_notes":"https://blogs.opera.com/desktop/2020/03/opera-67-3575-53-stable-update/","status":"retired","engine":"Blink","engine_version":"80"},"68":{"release_date":"2020-04-22","release_notes":"https://blogs.opera.com/desktop/2020/04/opera-68-is-here-with-built-in-instagram-in-the-sidebar/","status":"retired","engine":"Blink","engine_version":"81"},"69":{"release_date":"2020-06-24","release_notes":"https://blogs.opera.com/desktop/2020/06/opera-69-comes-with-built-in-twitter/","status":"retired","engine":"Blink","engine_version":"83"},"70":{"release_date":"2020-07-27","release_notes":"https://blogs.opera.com/desktop/2020/07/opera-70-comes-with-easier-access-to-closed-tabs-simpler-searches-and-new-workspace-icons/","status":"retired","engine":"Blink","engine_version":"84"},"71":{"release_date":"2020-09-15","release_notes":"https://blogs.opera.com/desktop/2020/09/opera-71-update/","status":"retired","engine":"Blink","engine_version":"85"},"72":{"release_date":"2020-10-21","release_notes":"https://blogs.opera.com/desktop/2020/10/opera-72-update/","status":"retired","engine":"Blink","engine_version":"86"},"73":{"release_date":"2020-12-09","release_notes":"https://blogs.opera.com/desktop/2020/12/opera-73-update/","status":"retired","engine":"Blink","engine_version":"87"},"74":{"release_date":"2021-02-02","release_notes":"https://blogs.opera.com/desktop/2021/02/opera-74-stable/","status":"retired","engine":"Blink","engine_version":"88"},"75":{"release_date":"2021-03-24","release_notes":"https://blogs.opera.com/desktop/2021/03/opera-75-brings-easier-access-to-top-features-2/","status":"retired","engine":"Blink","engine_version":"89"},"76":{"release_date":"2021-04-28","release_notes":"https://blogs.opera.com/desktop/2021/04/opera-76-stable/","status":"retired","engine":"Blink","engine_version":"90"},"77":{"release_date":"2021-06-09","release_notes":"https://blogs.opera.com/desktop/2021/06/opera-77-stable/","status":"retired","engine":"Blink","engine_version":"91"},"78":{"release_date":"2021-08-03","release_notes":"https://blogs.opera.com/desktop/2021/08/opera-78-stable/","status":"retired","engine":"Blink","engine_version":"92"},"79":{"release_date":"2021-09-14","release_notes":"https://blogs.opera.com/desktop/2021/09/opera-79-stable/","status":"retired","engine":"Blink","engine_version":"93"},"80":{"release_date":"2021-10-05","release_notes":"https://blogs.opera.com/desktop/2021/10/opera-80-stable/","status":"retired","engine":"Blink","engine_version":"94"},"81":{"release_date":"2021-11-04","release_notes":"https://blogs.opera.com/desktop/2021/11/opera-81-stable/","status":"retired","engine":"Blink","engine_version":"95"},"82":{"release_date":"2021-12-02","release_notes":"https://blogs.opera.com/desktop/2021/12/opera-82/","status":"retired","engine":"Blink","engine_version":"96"},"83":{"release_date":"2022-01-19","release_notes":"https://blogs.opera.com/desktop/2022/01/opera-83/","status":"current","engine":"Blink","engine_version":"97"},"84":{"status":"beta","engine":"Blink","engine_version":"98"},"85":{"status":"nightly","engine":"Blink","engine_version":"99"},"3.5":{"release_date":"1998-11-18","status":"retired"},"3.6":{"release_date":"1999-05-06","status":"retired"},"5.1":{"release_date":"2001-04-10","status":"retired"},"7.1":{"release_date":"2003-04-11","status":"retired","engine":"Presto","engine_version":"1"},"7.2":{"release_date":"2003-09-23","status":"retired","engine":"Presto","engine_version":"1"},"7.5":{"release_date":"2004-05-12","status":"retired","engine":"Presto","engine_version":"1"},"8.5":{"release_date":"2005-09-20","status":"retired","engine":"Presto","engine_version":"1"},"9.1":{"release_date":"2006-12-18","status":"retired","engine":"Presto","engine_version":"2"},"9.2":{"release_date":"2007-04-11","status":"retired","engine":"Presto","engine_version":"2"},"9.5":{"release_date":"2008-06-12","status":"retired","engine":"Presto","engine_version":"2.1"},"9.6":{"release_date":"2008-10-08","release_notes":"https://dev.opera.com/blog/a-look-under-the-hood-of-opera-9-6/","status":"retired","engine":"Presto","engine_version":"2.1"},"10.1":{"release_date":"2009-11-23","release_notes":"https://dev.opera.com/blog/opera-10-10-and-10-2-alpha/","status":"retired","engine":"Presto","engine_version":"2.2"},"10.5":{"release_date":"2010-03-02","release_notes":"https://dev.opera.com/blog/opera-10-50-final-for-windows-is-out/","status":"retired","engine":"Presto","engine_version":"2.5"},"10.6":{"release_date":"2010-07-01","release_notes":"https://dev.opera.com/blog/hello-opera-10-60/","status":"retired","engine":"Presto","engine_version":"2.6"},"11.1":{"release_date":"2011-04-12","release_notes":"https://dev.opera.com/blog/unveiling-opera-11-10-final/","status":"retired","engine":"Presto","engine_version":"2.8"},"11.5":{"release_date":"2011-06-28","release_notes":"https://dev.opera.com/blog/opera-11-50-released-speed-dial-extensions-improved-standards-support/","status":"retired","engine":"Presto","engine_version":"2.9"},"11.6":{"release_date":"2011-12-06","release_notes":"https://dev.opera.com/blog/hello-opera-11-60/","status":"retired","engine":"Presto","engine_version":"2.10"},"12.1":{"release_date":"2012-11-20","release_notes":"https://dev.opera.com/blog/opera-12-10-is-out/","status":"retired","engine":"Presto","engine_version":"2.12"}}},"opera_android":{"name":"Opera Android","releases":{"11":{"release_date":"2011-03-22","release_notes":"https://dev.opera.com/blog/opera-mobile-11-for-maemo-meego-windows/","status":"retired","engine":"Presto","engine_version":"2.7"},"12":{"release_date":"2012-02-25","release_notes":"https://dev.opera.com/blog/opera-mobile-12-and-introducing-opera-mini-next/","status":"retired","engine":"Presto","engine_version":"2.10"},"14":{"release_date":"2013-05-21","release_notes":"https://dev.opera.com/blog/opera-14-for-android-is-out/","status":"retired","engine":"Blink","engine_version":"26"},"15":{"release_date":"2013-07-08","release_notes":"https://blogs.opera.com/news/2013/07/opera-15-for-android/","status":"retired","engine":"Blink","engine_version":"28"},"16":{"release_date":"2013-09-18","status":"retired","engine":"Blink","engine_version":"29"},"18":{"release_date":"2013-11-20","release_notes":"https://blogs.opera.com/news/2013/11/opera-18-android-tablet/","status":"retired","engine":"Blink","engine_version":"31"},"19":{"release_date":"2014-01-28","release_notes":"https://dev.opera.com/blog/opera-19/","status":"retired","engine":"Blink","engine_version":"32"},"20":{"release_date":"2014-03-06","release_notes":"https://forums.opera.com/topic/1081/opera-20-final-release","status":"retired","engine":"Blink","engine_version":"33"},"21":{"release_date":"2014-04-22","release_notes":"https://forums.opera.com/topic/2211/opera-21-final-release","status":"retired","engine":"Blink","engine_version":"34"},"22":{"release_date":"2014-06-17","release_notes":"https://forums.opera.com/topic/3446/opera-22","status":"retired","engine":"Blink","engine_version":"35"},"24":{"release_date":"2014-09-10","release_notes":"https://forums.opera.com/topic/5022/opera-24-final-release","status":"retired","engine":"Blink","engine_version":"37"},"25":{"release_date":"2014-10-16","release_notes":"https://forums.opera.com/topic/5715/opera-25-final-release","status":"retired","engine":"Blink","engine_version":"38"},"26":{"release_date":"2014-12-02","release_notes":"https://forums.opera.com/topic/6800/opera-26-final-release","status":"retired","engine":"Blink","engine_version":"39"},"27":{"release_date":"2015-01-29","release_notes":"https://forums.opera.com/topic/7871/opera-27-final-release","status":"retired","engine":"Blink","engine_version":"40"},"28":{"release_date":"2015-03-10","release_notes":"https://forums.opera.com/topic/8556/synced-bookmarks-and-improved-memory-usage-in-opera-28-for-android","status":"retired","engine":"Blink","engine_version":"41"},"29":{"release_date":"2015-04-28","release_notes":"https://dev.opera.com/blog/opera-29/","status":"retired","engine":"Blink","engine_version":"42"},"30":{"release_date":"2015-06-10","release_notes":"https://blogs.opera.com/mobile/2015/06/opera-30-android-sync-speeddials/","status":"retired","engine":"Blink","engine_version":"43"},"32":{"release_date":"2015-09-23","release_notes":"https://blogs.opera.com/mobile/2015/09/opera-32-add-to-home-screen/","status":"retired","engine":"Blink","engine_version":"45"},"33":{"release_date":"2015-11-03","release_notes":"https://forums.opera.com/topic/12480/opera-33-now-featuring-video-optimization-and-brand-new-icons","status":"retired","engine":"Blink","engine_version":"46"},"34":{"release_date":"2015-12-16","release_notes":"https://forums.opera.com/topic/13085/opera-34-for-android-released","status":"retired","engine":"Blink","engine_version":"47"},"35":{"release_date":"2016-02-04","release_notes":"https://blogs.opera.com/mobile/2016/02/save-space-on-your-android-phone-with-web-apps/","status":"retired","engine":"Blink","engine_version":"48"},"36":{"release_date":"2016-03-31","release_notes":"https://forums.opera.com/topic/14514/opera-36-released","status":"retired","engine":"Blink","engine_version":"49"},"37":{"release_date":"2016-06-16","release_notes":"https://forums.opera.com/topic/15753/opera-37-released","status":"retired","engine":"Blink","engine_version":"50"},"41":{"release_date":"2016-10-25","status":"retired","engine":"Blink","engine_version":"54"},"42":{"release_date":"2017-01-21","release_notes":"https://forums.opera.com/topic/18950/opera-for-android-42","status":"retired","engine":"Blink","engine_version":"55"},"43":{"release_date":"2017-09-27","release_notes":"https://forums.opera.com/topic/22708/opera-for-android-43","status":"retired","engine":"Blink","engine_version":"59"},"44":{"release_date":"2017-12-11","release_notes":"https://forums.opera.com/topic/23860/opera-for-android-44","status":"retired","engine":"Blink","engine_version":"60"},"45":{"release_date":"2018-02-15","release_notes":"https://forums.opera.com/topic/25124/opera-for-android-45","status":"retired","engine":"Blink","engine_version":"61"},"46":{"release_date":"2018-05-14","release_notes":"https://forums.opera.com/topic/26662/opera-for-android-46","status":"retired","engine":"Blink","engine_version":"63"},"47":{"release_date":"2018-07-23","release_notes":"https://forums.opera.com/topic/27794/opera-for-android-47","status":"retired","engine":"Blink","engine_version":"66"},"48":{"release_date":"2018-11-08","release_notes":"https://forums.opera.com/topic/29525/opera-for-android-48","status":"retired","engine":"Blink","engine_version":"69"},"49":{"release_date":"2018-12-07","release_notes":"https://forums.opera.com/topic/29983/opera-for-android-49","status":"retired","engine":"Blink","engine_version":"70"},"50":{"release_date":"2019-02-18","release_notes":"https://forums.opera.com/topic/31003/opera-for-android-50","status":"retired","engine":"Blink","engine_version":"71"},"51":{"release_date":"2019-03-21","release_notes":"https://forums.opera.com/topic/31467/opera-for-android-51-built-in-vpn","status":"retired","engine":"Blink","engine_version":"72"},"52":{"release_date":"2019-05-17","release_notes":"https://forums.opera.com/topic/32516/opera-for-android-52","status":"retired","engine":"Blink","engine_version":"73"},"53":{"release_date":"2019-07-11","release_notes":"https://forums.opera.com/topic/33558/opera-for-android-53","status":"retired","engine":"Blink","engine_version":"74"},"54":{"release_date":"2019-10-18","release_notes":"https://forums.opera.com/topic/35853/opera-for-android-54","status":"retired","engine":"Blink","engine_version":"76"},"55":{"release_date":"2019-12-03","release_notes":"https://forums.opera.com/topic/36858/opera-for-android-55","status":"retired","engine":"Blink","engine_version":"77"},"56":{"release_date":"2020-02-06","release_notes":"https://blogs.opera.com/mobile/2020/02/easy-reading-in-opera-for-android/","status":"retired","engine":"Blink","engine_version":"78"},"57":{"release_date":"2020-03-30","release_notes":"https://blogs.opera.com/mobile/2020/03/introducing-new-features-in-opera-for-android-57/","status":"retired","engine":"Blink","engine_version":"80"},"58":{"release_date":"2020-05-13","release_notes":"https://blogs.opera.com/mobile/2020/05/opera-for-android-58-handle-notifications-easily-and-group-speed-dials-for-a-cleaner-appearance/","status":"retired","engine":"Blink","engine_version":"81"},"59":{"release_date":"2020-06-30","release_notes":"https://blogs.opera.com/mobile/2020/06/opera-for-android-59/","status":"retired","engine":"Blink","engine_version":"83"},"60":{"release_date":"2020-09-23","release_notes":"https://blogs.opera.com/mobile/2020/09/keep-in-sync-with-opera-for-android-60/","status":"retired","engine":"Blink","engine_version":"85"},"61":{"release_date":"2020-12-07","release_notes":"https://blogs.opera.com/mobile/2020/12/new-opera-for-android-61/","status":"retired","engine":"Blink","engine_version":"86"},"62":{"release_date":"2021-02-16","release_notes":"https://blogs.opera.com/mobile/2021/02/the-opera-browser-for-android-hit-a-new-record-of-80-million-maus/","status":"retired","engine":"Blink","engine_version":"87"},"63":{"release_date":"2021-04-16","status":"retired","engine":"Blink","engine_version":"89"},"64":{"release_date":"2021-05-25","status":"retired","engine":"Blink","engine_version":"91"},"65":{"release_date":"2021-10-20","release_notes":"https://blogs.opera.com/mobile/2021/10/opera-for-android-version-65/","status":"current","engine":"Blink","engine_version":"92"},"10.1":{"release_date":"2010-11-09","release_notes":"https://dev.opera.com/blog/opera-mobile-10-1-beta-for-android-is-here/","status":"retired","engine":"Presto","engine_version":"2.5"},"11.1":{"release_date":"2011-06-30","release_notes":"https://dev.opera.com/blog/opera-mobile-11-1-new-features-and-additions/","status":"retired","engine":"Presto","engine_version":"2.8"},"11.5":{"release_date":"2011-10-12","status":"retired","engine":"Presto","engine_version":"2.9"},"12.1":{"release_date":"2012-10-09","release_notes":"https://dev.opera.com/blog/opera-mobile-12-1-with-spdy-web-sockets-flexbox-and-more/","status":"retired","engine":"Presto","engine_version":"2.11"}}},"safari":{"name":"Safari","preview_name":"TP","releases":{"1":{"release_date":"2003-06-23","status":"retired","engine":"WebKit","engine_version":"85"},"2":{"release_date":"2005-04-29","status":"retired","engine":"WebKit","engine_version":"412"},"3":{"release_date":"2007-10-26","status":"retired","engine":"WebKit","engine_version":"523.10"},"4":{"release_date":"2009-06-08","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_4_0.html","status":"retired","engine":"WebKit","engine_version":"530.17"},"5":{"release_date":"2010-06-07","status":"retired","engine":"WebKit","engine_version":"533.16"},"6":{"release_date":"2012-07-25","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_6_0.html","status":"retired","engine":"WebKit","engine_version":"536.25"},"7":{"release_date":"2013-10-22","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_7_0.html","status":"retired","engine":"WebKit","engine_version":"537.71"},"8":{"release_date":"2014-10-16","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_8_0.html","status":"retired","engine":"WebKit","engine_version":"538.35"},"9":{"release_date":"2015-09-30","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_9_0.html","status":"retired","engine":"WebKit","engine_version":"601.1.56"},"10":{"release_date":"2016-09-20","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_0.html","status":"retired","engine":"WebKit","engine_version":"602.1.50"},"11":{"release_date":"2017-09-19","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Safari_11_0/Safari_11_0.html","status":"retired","engine":"WebKit","engine_version":"604.2.4"},"12":{"release_date":"2018-09-24","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_12_release_notes","status":"retired","engine":"WebKit","engine_version":"606.1.36"},"13":{"release_date":"2019-09-19","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_13_release_notes","status":"retired","engine":"WebKit","engine_version":"608.2.11"},"14":{"release_date":"2020-09-16","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-14-release-notes","status":"retired","engine":"WebKit","engine_version":"610.1.28"},"15":{"release_date":"2021-09-20","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-15-release-notes","status":"retired","engine":"WebKit","engine_version":"612.1.29"},"1.1":{"release_date":"2003-10-24","status":"retired","engine":"WebKit","engine_version":"100"},"1.2":{"release_date":"2004-02-02","status":"retired","engine":"WebKit","engine_version":"125"},"1.3":{"release_date":"2005-04-15","status":"retired","engine":"WebKit","engine_version":"312"},"3.1":{"release_date":"2008-03-18","status":"retired","engine":"WebKit","engine_version":"525.13"},"5.1":{"release_date":"2011-07-20","status":"retired","engine":"WebKit","engine_version":"534.48"},"9.1":{"release_date":"2016-03-21","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_9_1.html","status":"retired","engine":"WebKit","engine_version":"601.5.17"},"10.1":{"release_date":"2017-03-27","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_1.html","status":"retired","engine":"WebKit","engine_version":"603.2.1"},"11.1":{"release_date":"2018-04-12","release_notes":"https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_11_1.html","status":"retired","engine":"WebKit","engine_version":"605.1.33"},"12.1":{"release_date":"2019-03-25","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_12_1_release_notes","status":"retired","engine":"WebKit","engine_version":"607.1.40"},"13.1":{"release_date":"2020-03-24","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-13_1-release_notes","status":"retired","engine":"WebKit","engine_version":"609.1.20"},"14.1":{"release_date":"2021-04-26","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-14_1-release-notes","status":"retired","engine":"WebKit","engine_version":"611.1.21"},"15.1":{"release_date":"2021-10-25","status":"retired","engine":"WebKit","engine_version":"612.2.9"},"15.2":{"release_date":"2021-12-13","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-15_2-release-notes","status":"current","engine":"WebKit","engine_version":"612.3.6"}}},"safari_ios":{"name":"Safari on iOS","releases":{"1":{"status":"retired","engine":"WebKit","engine_version":"522.11","release_date":"2007-06-29"},"2":{"status":"retired","engine":"WebKit","engine_version":"525.18","release_date":"2008-07-11"},"3":{"status":"retired","engine":"WebKit","engine_version":"528.18","release_date":"2009-06-17"},"4":{"status":"retired","engine":"WebKit","engine_version":"532.9","release_date":"2010-06-21"},"5":{"status":"retired","engine":"WebKit","engine_version":"534.46","release_date":"2011-10-12"},"6":{"status":"retired","engine":"WebKit","engine_version":"536.26","release_date":"2012-09-10"},"7":{"status":"retired","engine":"WebKit","engine_version":"537.51","release_date":"2013-09-18"},"8":{"status":"retired","engine":"WebKit","engine_version":"600.1.4","release_date":"2014-09-17"},"9":{"status":"retired","engine":"WebKit","engine_version":"601.1.56","release_date":"2015-09-16"},"10":{"status":"retired","engine":"WebKit","engine_version":"602.1.50","release_date":"2016-09-13"},"11":{"status":"retired","engine":"WebKit","engine_version":"604.2.4","release_date":"2017-09-19"},"12":{"release_date":"2018-09-17","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_12_release_notes","status":"retired","engine":"WebKit","engine_version":"606.1.36"},"13":{"release_date":"2019-09-19","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_13_release_notes","status":"retired","engine":"WebKit","engine_version":"608.2.11"},"14":{"release_date":"2020-09-16","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-14-release-notes","status":"retired","engine":"WebKit","engine_version":"610.1.28"},"15":{"release_date":"2021-09-20","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-15-release-notes","status":"retired","engine":"WebKit","engine_version":"612.1.27"},"3.2":{"status":"retired","engine":"WebKit","engine_version":"531.21","release_date":"2010-04-03"},"4.2":{"status":"retired","engine":"WebKit","engine_version":"533.17","release_date":"2010-11-22"},"9.3":{"status":"retired","engine":"WebKit","engine_version":"601.5.17","release_date":"2016-03-21"},"10.3":{"status":"retired","engine":"WebKit","engine_version":"603.2.1","release_date":"2017-03-27"},"11.3":{"status":"retired","engine":"WebKit","engine_version":"605.1.33","release_date":"2018-03-29"},"12.2":{"release_date":"2019-03-25","release_notes":"https://developer.apple.com/documentation/safari_release_notes/safari_12_1_release_notes","status":"retired","engine":"WebKit","engine_version":"607.1.40"},"13.4":{"release_date":"2020-03-24","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-13_1-release_notes","status":"retired","engine":"WebKit","engine_version":"609.1.20"},"14.5":{"release_date":"2021-04-26","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-14_1-release-notes","status":"retired","engine":"WebKit","engine_version":"611.1.21"},"15.1":{"release_date":"2021-10-25","status":"retired","engine":"WebKit","engine_version":"612.2.9"},"15.2":{"release_date":"2021-12-13","release_notes":"https://developer.apple.com/documentation/safari-release-notes/safari-15_2-release-notes","status":"current","engine":"WebKit","engine_version":"612.3.6"}}},"samsunginternet_android":{"name":"Samsung Internet","accepts_flags":false,"releases":{"1.0":{"release_date":"2013-04-27","status":"retired","engine":"WebKit","engine_version":"535.19"},"1.5":{"release_date":"2013-09-25","status":"retired","engine":"Blink","engine_version":"28"},"1.6":{"release_date":"2014-04-11","status":"retired","engine":"Blink","engine_version":"28"},"2.0":{"release_date":"2014-10-17","status":"retired","engine":"Blink","engine_version":"34"},"2.1":{"release_date":"2015-01-07","status":"retired","engine":"Blink","engine_version":"34"},"3.0":{"release_date":"2015-04-10","status":"retired","engine":"Blink","engine_version":"38"},"3.2":{"release_date":"2015-08-24","status":"retired","engine":"Blink","engine_version":"38"},"4.0":{"release_date":"2016-03-11","status":"retired","engine":"Blink","engine_version":"44"},"4.2":{"release_date":"2016-08-02","status":"retired","engine":"Blink","engine_version":"44"},"5.0":{"release_date":"2016-12-15","status":"retired","engine":"Blink","engine_version":"51"},"5.2":{"release_date":"2017-04-21","status":"retired","engine":"Blink","engine_version":"51"},"5.4":{"release_date":"2017-05-17","status":"retired","engine":"Blink","engine_version":"51"},"6.0":{"release_date":"2017-08-23","status":"retired","engine":"Blink","engine_version":"56"},"6.2":{"release_date":"2017-10-26","status":"retired","engine":"Blink","engine_version":"56"},"6.4":{"release_date":"2018-02-19","status":"retired","engine":"Blink","engine_version":"56"},"7.0":{"release_date":"2018-03-16","status":"retired","engine":"Blink","engine_version":"59"},"7.2":{"release_date":"2018-06-20","status":"retired","engine":"Blink","engine_version":"59"},"7.4":{"release_date":"2018-09-12","status":"retired","engine":"Blink","engine_version":"59"},"8.0":{"release_date":"2018-07-18","status":"retired","engine":"Blink","engine_version":"63"},"8.2":{"release_date":"2018-12-21","status":"retired","engine":"Blink","engine_version":"63"},"9.0":{"release_date":"2018-09-15","status":"retired","engine":"Blink","engine_version":"67"},"9.2":{"release_date":"2019-04-02","status":"retired","engine":"Blink","engine_version":"67"},"9.4":{"release_date":"2019-07-25","status":"retired","engine":"Blink","engine_version":"67"},"10.0":{"release_date":"2019-08-22","status":"retired","engine":"Blink","engine_version":"71"},"10.2":{"release_date":"2019-10-09","status":"retired","engine":"Blink","engine_version":"71"},"11.0":{"release_date":"2019-12-05","status":"retired","engine":"Blink","engine_version":"75"},"11.2":{"release_date":"2020-03-22","status":"retired","engine":"Blink","engine_version":"75"},"12.0":{"release_date":"2020-06-19","status":"retired","engine":"Blink","engine_version":"79"},"12.1":{"release_date":"2020-07-07","status":"retired","engine":"Blink","engine_version":"79"},"13.0":{"release_date":"2020-12-02","status":"retired","engine":"Blink","engine_version":"83"},"13.2":{"release_date":"2021-01-20","status":"retired","engine":"Blink","engine_version":"83"},"14.0":{"release_date":"2021-04-17","status":"retired","engine":"Blink","engine_version":"87"},"14.2":{"release_date":"2021-06-25","status":"retired","engine":"Blink","engine_version":"87"},"15.0":{"release_date":"2021-08-13","status":"retired","engine":"Blink","engine_version":"90"},"16.0":{"release_date":"2021-11-25","status":"current","engine":"Blink","engine_version":"92"}}},"webview_android":{"name":"WebView Android","accepts_flags":false,"releases":{"1":{"release_date":"2008-09-23","release_notes":"https://en.wikipedia.org/wiki/Android_version_history#Android_1.0_(API_1)","status":"retired","engine":"WebKit","engine_version":"523.12"},"2":{"release_date":"2009-10-26","release_notes":"https://en.wikipedia.org/wiki/Android_Eclair","status":"retired","engine":"WebKit","engine_version":"530.17"},"3":{"release_date":"2011-02-22","release_notes":"https://en.wikipedia.org/wiki/Android_Honeycomb","status":"retired","engine":"WebKit","engine_version":"534.13"},"4":{"release_date":"2011-10-18","release_notes":"https://en.wikipedia.org/wiki/Android_Ice_Cream_Sandwich","status":"retired","engine":"WebKit","engine_version":"534.30"},"37":{"release_date":"2014-09-03","release_notes":"https://chromereleases.googleblog.com/2014/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"37"},"38":{"release_date":"2014-10-08","release_notes":"https://chromereleases.googleblog.com/2014/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"38"},"39":{"release_date":"2014-11-12","release_notes":"https://chromereleases.googleblog.com/2014/11/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"39"},"40":{"release_date":"2015-01-21","release_notes":"https://chromereleases.googleblog.com/2015/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"40"},"41":{"release_date":"2015-03-11","release_notes":"https://chromereleases.googleblog.com/2015/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"41"},"42":{"release_date":"2015-04-15","release_notes":"https://chromereleases.googleblog.com/2015/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"42"},"43":{"release_date":"2015-05-27","release_notes":"https://chromereleases.googleblog.com/2015/05/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"43"},"44":{"release_date":"2015-07-29","release_notes":"https://chromereleases.googleblog.com/2015/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"44"},"45":{"release_date":"2015-09-01","release_notes":"https://chromereleases.googleblog.com/2015/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"45"},"46":{"release_date":"2015-10-14","release_notes":"https://chromereleases.googleblog.com/2015/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"46"},"47":{"release_date":"2015-12-02","release_notes":"https://chromereleases.googleblog.com/2015/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"47"},"48":{"release_date":"2016-01-26","status":"retired","engine":"Blink","engine_version":"48"},"49":{"release_date":"2016-03-09","release_notes":"https://chromereleases.googleblog.com/2016/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"49"},"50":{"release_date":"2016-04-13","status":"retired","engine":"Blink","engine_version":"50"},"51":{"release_date":"2016-06-08","release_notes":"https://chromereleases.googleblog.com/2016/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"51"},"52":{"release_date":"2016-07-27","release_notes":"https://chromereleases.googleblog.com/2016/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"52"},"53":{"release_date":"2016-09-07","release_notes":"https://chromereleases.googleblog.com/2016/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"53"},"54":{"release_date":"2016-10-19","release_notes":"https://chromereleases.googleblog.com/2016/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"54"},"55":{"release_date":"2016-12-06","release_notes":"https://chromereleases.googleblog.com/2016/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"55"},"56":{"release_date":"2017-02-01","release_notes":"https://chromereleases.googleblog.com/2017/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"56"},"57":{"release_date":"2017-03-16","release_notes":"https://chromereleases.googleblog.com/2017/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"57"},"58":{"release_date":"2017-04-25","release_notes":"https://chromereleases.googleblog.com/2017/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"58"},"59":{"release_date":"2017-06-06","release_notes":"https://chromereleases.googleblog.com/2017/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"59"},"60":{"release_date":"2017-08-01","release_notes":"https://chromereleases.googleblog.com/2017/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"60"},"61":{"release_date":"2017-09-05","release_notes":"https://chromereleases.googleblog.com/2017/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"61"},"62":{"release_date":"2017-10-24","release_notes":"https://chromereleases.googleblog.com/2017/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"62"},"63":{"release_date":"2017-12-05","release_notes":"https://chromereleases.googleblog.com/2017/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"63"},"64":{"release_date":"2018-01-23","release_notes":"https://chromereleases.googleblog.com/2018/01/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"64"},"65":{"release_date":"2017-03-06","release_notes":"https://chromereleases.googleblog.com/2018/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"65"},"66":{"release_date":"2017-04-17","release_notes":"https://chromereleases.googleblog.com/2018/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"66"},"67":{"release_date":"2018-05-31","release_notes":"https://chromereleases.googleblog.com/2018/05/chrome-for-android-update_31.html","status":"retired","engine":"Blink","engine_version":"67"},"68":{"release_date":"2018-07-24","release_notes":"https://chromereleases.googleblog.com/2018/07/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"68"},"69":{"release_date":"2018-09-04","release_notes":"https://chromereleases.googleblog.com/2018/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"69"},"70":{"release_date":"2018-10-17","release_notes":"https://chromereleases.googleblog.com/2018/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"70"},"71":{"release_date":"2018-12-04","release_notes":"https://chromereleases.googleblog.com/2018/12/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"71"},"72":{"release_date":"2019-01-29","release_notes":"https://chromereleases.googleblog.com/2019/01/chrome-for-android-update_29.html","status":"retired","engine":"Blink","engine_version":"72"},"73":{"release_date":"2019-03-12","release_notes":"https://chromereleases.googleblog.com/2019/03/chrome-for-android-update_12.html","status":"retired","engine":"Blink","engine_version":"73"},"74":{"release_date":"2019-04-24","release_notes":"https://chromereleases.googleblog.com/2019/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"74"},"75":{"release_date":"2019-06-04","release_notes":"https://chromereleases.googleblog.com/2019/06/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"75"},"76":{"release_date":"2019-07-30","release_notes":"https://chromereleases.googleblog.com/2019/07/chrome-for-android-update_30.html","status":"retired","engine":"Blink","engine_version":"76"},"77":{"release_date":"2019-09-10","release_notes":"https://chromereleases.googleblog.com/2019/09/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"77"},"78":{"release_date":"2019-10-22","release_notes":"https://chromereleases.googleblog.com/2019/10/chrome-for-android-update_22.html","status":"retired","engine":"Blink","engine_version":"78"},"79":{"release_date":"2019-12-17","release_notes":"https://chromereleases.googleblog.com/2019/12/chrome-for-android-update_17.html","status":"retired","engine":"Blink","engine_version":"79"},"80":{"release_date":"2020-02-04","release_notes":"https://chromereleases.googleblog.com/2020/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"80"},"81":{"release_date":"2020-04-07","release_notes":"https://chromereleases.googleblog.com/2020/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"81"},"83":{"release_date":"2020-05-19","release_notes":"https://chromereleases.googleblog.com/2020/05/chrome-for-android-update_19.html","status":"retired","engine":"Blink","engine_version":"83"},"84":{"release_date":"2020-07-27","release_notes":"https://chromereleases.googleblog.com/2020/07/chrome-for-android-update_27.html","status":"retired","engine":"Blink","engine_version":"84"},"85":{"release_date":"2020-08-25","release_notes":"https://chromereleases.googleblog.com/2020/08/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"85"},"86":{"release_date":"2020-10-20","release_notes":"https://chromereleases.googleblog.com/2020/10/chrome-for-android-update_20.html","status":"retired","engine":"Blink","engine_version":"86"},"87":{"release_date":"2020-11-17","release_notes":"https://chromereleases.googleblog.com/2020/11/chrome-for-android-update_17.html","status":"retired","engine":"Blink","engine_version":"87"},"88":{"release_date":"2021-01-19","release_notes":"https://chromereleases.googleblog.com/2021/01/chrome-for-android-update_19.html","status":"retired","engine":"Blink","engine_version":"88"},"89":{"release_date":"2021-03-02","release_notes":"https://chromereleases.googleblog.com/2021/03/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"89"},"90":{"release_date":"2021-04-13","release_notes":"https://chromereleases.googleblog.com/2021/04/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"90"},"91":{"release_date":"2021-05-25","release_notes":"https://chromereleases.googleblog.com/2021/05/chrome-for-android-update_01607414128.html","status":"retired","engine":"Blink","engine_version":"91"},"92":{"release_date":"2021-07-20","release_notes":"https://chromereleases.googleblog.com/2021/07/chrome-for-android-update_01500789893.html","status":"retired","engine":"Blink","engine_version":"92"},"93":{"release_date":"2021-08-31","release_notes":"https://chromereleases.googleblog.com/2021/08/chrome-for-android-update_0881967577.html","status":"retired","engine":"Blink","engine_version":"93"},"94":{"release_date":"2021-09-21","release_notes":"https://chromereleases.googleblog.com/2021/09/chrome-for-android-update_21.html","status":"retired","engine":"Blink","engine_version":"94"},"95":{"release_date":"2021-10-19","release_notes":"https://chromereleases.googleblog.com/2021/10/chrome-for-android-update_01703513036.html","status":"retired","engine":"Blink","engine_version":"95"},"96":{"release_date":"2021-11-15","release_notes":"https://chromereleases.googleblog.com/2021/11/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"96"},"97":{"release_date":"2022-01-04","release_notes":"https://chromereleases.googleblog.com/2022/01/chrome-for-android-update.html","status":"current","engine":"Blink","engine_version":"97"},"98":{"release_date":"2022-02-01","status":"beta","engine":"Blink","engine_version":"98"},"99":{"release_date":"2022-03-01","status":"nightly","engine":"Blink","engine_version":"99"},"1.5":{"release_date":"2009-04-27","release_notes":"https://en.wikipedia.org/wiki/Android_Cupcake","status":"retired","engine":"WebKit","engine_version":"525.20"},"2.2":{"release_date":"2010-05-20","release_notes":"https://en.wikipedia.org/wiki/Android_Froyo","status":"retired","engine":"WebKit","engine_version":"533.1"},"4.4":{"release_date":"2013-12-09","release_notes":"https://chromereleases.googleblog.com/2013/10/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"30"},"4.4.3":{"release_date":"2014-06-02","release_notes":"https://chromereleases.googleblog.com/2014/02/chrome-for-android-update.html","status":"retired","engine":"Blink","engine_version":"33"}}}}=========taskcluster/scripts/misc/android-gradle-dependencies.sh========--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/taskcluster/scripts/misc/android-gradle-dependencies.sh+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/taskcluster/scripts/misc/android-gradle-dependencies.sh@@ -8,13 +8,14 @@ cd $GECKO_PATH-# Needed for Nexus-export PATH=$JAVA_HOME/bin:$PATH+# Nexus needs Java 8+export PATH=$MOZ_FETCHES_DIR/jdk-8/bin:$PATH . taskcluster/scripts/misc/android-gradle-dependencies/before.sh export MOZCONFIG=mobile/android/config/mozconfigs/android-arm-gradle-dependencies/nightly ./mach build+./mach gradle downloadDependencies ./mach android gradle-dependencies . taskcluster/scripts/misc/android-gradle-dependencies/after.sh
AI Analysis
Error: {"error":{"message":"This model's maximum context length is 65536 tokens. However, you requested 85704 tokens (77512 in the messages, 8192 in the completion). Please reduce the length of the messages or completion.","type":"invalid_request_error","param":null,"code":"invalid_request_error"}}
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
browser/components/newtab/aboutwelcome/content/aboutwelcome.bundle.js AI: Not sure
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/browser/components/newtab/aboutwelcome/content/aboutwelcome.bundle.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/browser/components/newtab/aboutwelcome/content/aboutwelcome.bundle.js@@ -176,9 +176,11 @@     if (props.template === "return_to_amo") {       return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_components_ReturnToAMO__WEBPACK_IMPORTED_MODULE_3__["ReturnToAMO"], {         message_id: props.messageId,+        type: props.type,         name: props.name,         url: props.url,-        iconURL: props.iconURL+        iconURL: props.iconURL,+        metricsFlowUri: this.state.metricsFlowUri       });     }@@ -692,20 +694,31 @@ }; const DEFAULT_RTAMO_CONTENT = {   template: "return_to_amo",+  utm_term: "rtamo",+  totalNumberOfScreens: 1,+  order: 0,   content: {-    header: {-      string_id: "onboarding-welcome-header"+    hero_text: {+      string_id: "mr1-welcome-screen-hero-text"+    },+    title: {+      string_id: "return-to-amo-subtitle"     },     subtitle: {-      string_id: "return-to-amo-subtitle"-    },-    text: {       string_id: "return-to-amo-addon-title"     },+    help_text: {+      text: {+        string_id: "mr1-onboarding-welcome-image-caption"+      }+    },+    hideLogo: true,+    background_url: "chrome://activity-stream/content/data/content/assets/proton-bkg.avif",     primary_button: {       label: {         string_id: "return-to-amo-add-extension-label"       },+      source_id: "ADD_EXTENSION_BUTTON",       action: {         type: "INSTALL_ADDON_FROM_URL",         data: {@@ -714,13 +727,26 @@         }       }     },-    startButton: {+    secondary_button: {       label: {         string_id: "onboarding-not-now-button-label"       },-      message_id: "RTAMO_START_BROWSING_BUTTON",+      source_id: "RTAMO_START_BROWSING_BUTTON",       action: {         type: "OPEN_AWESOME_BAR"+      }+    },+    secondary_button_top: {+      label: {+        string_id: "mr1-onboarding-sign-in-button-label"+      },+      source_id: "RTAMO_FXA_SIGNIN_BUTTON",+      action: {+        data: {+          entrypoint: "activity-stream-firstrun"+        },+        type: "SHOW_FIREFOX_ACCOUNTS",+        addFlowParams: true       }     }   }@@ -756,6 +782,7 @@     const {       autoClose,       content,+      isRtamo,       totalNumberOfScreens: total     } = this.props;     const windowObj = this.props.windowObj || window;@@ -793,7 +820,7 @@     }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {       className: "spacer-top"     }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_1__["Localized"], {-      text: content.subtitle+      text: content.hero_text     }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {       className: "spacer-bottom"     })), content.help_text && content.help_text.text ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_1__["Localized"], {@@ -820,7 +847,13 @@       className: `main-content ${isLastScreen && autoClose ? "no-steps" : ""}`     }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {       className: `brand-logo ${content.hideLogo ? "hide" : ""}`-    }), isLastScreen && content.hasFancyTitle ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {+    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {+      className: `${isRtamo ? "rtamo-icon" : "hide-rtamo-icon"}`+    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {+      src: this.props.iconURL,+      role: "presentation",+      alt: ""+    })), isLastScreen && content.hasFancyTitle ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {       className: "confetti"     }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {       className: "main-content-inner"@@ -830,9 +863,13 @@       text: content.title     }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", {       id: "mainContentHeader"-    })), !isWelcomeScreen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_1__["Localized"], {+    })), content.subtitle ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_1__["Localized"], {       text: content.subtitle-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", null)) : null), content.tiles && content.tiles.type === "colorway" && content.tiles.colorways ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Colorways__WEBPACK_IMPORTED_MODULE_2__["Colorways"], {+    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {+      "data-l10n-args": JSON.stringify({+        "addon-name": this.props.addonName+      })+    })) : null), content.tiles && content.tiles.type === "colorway" && content.tiles.colorways ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_Colorways__WEBPACK_IMPORTED_MODULE_2__["Colorways"], {       content: content,       activeTheme: this.props.activeTheme,       handleAction: this.props.handleAction@@ -1159,107 +1196,115 @@ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _lib_aboutwelcome_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5);-/* harmony import */ var _MSLocalized__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4);+/* harmony import */ var _MultiStageProtonScreen__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6);+/* harmony import */ var _asrouter_templates_FirstRun_addUtmParams__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9); /* This Source Code Form is subject to the terms of the Mozilla Public  * License, v. 2.0. If a copy of the MPL was not distributed with this file,  * You can obtain one at http://mozilla.org/MPL/2.0/. */+ class ReturnToAMO extends react__WEBPACK_IMPORTED_MODULE_0___default.a.PureComponent {   constructor(props) {     super(props);-    this.onClickAddExtension = this.onClickAddExtension.bind(this);-    this.handleStartBtnClick = this.handleStartBtnClick.bind(this);-  }--  onClickAddExtension() {-    var _content$primary_butt, _content$primary_butt2;-+    this.fetchFlowParams = this.fetchFlowParams.bind(this);+    this.handleAction = this.handleAction.bind(this);+  }++  async fetchFlowParams() {+    if (this.props.metricsFlowUri) {+      this.setState({+        flowParams: await _lib_aboutwelcome_utils__WEBPACK_IMPORTED_MODULE_1__["AboutWelcomeUtils"].fetchFlowParams(this.props.metricsFlowUri)+      });+    }+  }++  componentDidUpdate() {+    this.fetchFlowParams();+  }++  handleAction(event) {     const {       content,       message_id,-      url+      url,+      utm_term     } = this.props;--    if (!(content !== null && content !== void 0 && (_content$primary_butt = content.primary_button) !== null && _content$primary_butt !== void 0 && (_content$primary_butt2 = _content$primary_butt.action) !== null && _content$primary_butt2 !== void 0 && _content$primary_butt2.data)) {-      return;-    } // Set add-on url in action.data.url property from JSON---    content.primary_button.action.data.url = url;-    _lib_aboutwelcome_utils__WEBPACK_IMPORTED_MODULE_1__["AboutWelcomeUtils"].handleUserAction(content.primary_button.action);-    const ping = {-      event: "INSTALL",-      event_context: {-        source: "ADD_EXTENSION_BUTTON",-        page: "about:welcome"-      },-      message_id-    };-    window.AWSendEventTelemetry(ping);-  }--  handleStartBtnClick() {+    let {+      action,+      source_id+    } = content[event.currentTarget.value];+    let {+      type,+      data+    } = action;++    if (type === "INSTALL_ADDON_FROM_URL") {+      if (!data) {+        return;+      } // Set add-on url in action.data.url property from JSON+++      data = { ...data,+        url+      };+    } else if (type === "SHOW_FIREFOX_ACCOUNTS") {+      let params = { ..._asrouter_templates_FirstRun_addUtmParams__WEBPACK_IMPORTED_MODULE_3__["BASE_PARAMS"],+        utm_term: `aboutwelcome-${utm_term}-screen`+      };++      if (action.addFlowParams && this.state.flowParams) {+        params = { ...params,+          ...this.state.flowParams+        };+      }++      data = { ...data,+        extraParams: params+      };+    }++    _lib_aboutwelcome_utils__WEBPACK_IMPORTED_MODULE_1__["AboutWelcomeUtils"].handleUserAction({+      type,+      data+    });+    _lib_aboutwelcome_utils__WEBPACK_IMPORTED_MODULE_1__["AboutWelcomeUtils"].sendActionTelemetry(message_id, source_id);+  }++  render() {     const {       content,-      message_id-    } = this.props;-    _lib_aboutwelcome_utils__WEBPACK_IMPORTED_MODULE_1__["AboutWelcomeUtils"].handleUserAction(content.startButton.action);-    const ping = {-      event: "CLICK_BUTTON",-      event_context: {-        source: content.startButton.message_id,-        page: "about:welcome"-      },-      message_id-    };-    window.AWSendEventTelemetry(ping);-  }--  render() {-    const {-      content+      type     } = this.props;     if (!content) {       return null;+    }++    if (content !== null && content !== void 0 && content.primary_button.label) {+      content.primary_button.label.string_id = type.includes("theme") ? "return-to-amo-add-theme-label" : "return-to-amo-add-extension-label";     } // For experiments, when needed below rendered UI allows settings hard coded strings     // directly inside JSON except for ReturnToAMOText which picks add-on name and icon from fluent string     return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {-      className: "outer-wrapper onboardingContainer rtamo"-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("main", {-      className: "screen"-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {-      className: "brand-logo"-    }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {-      className: "welcome-text"-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_2__["Localized"], {-      text: content.subtitle-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h1", null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_2__["Localized"], {-      text: content.text-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("h2", {-      "data-l10n-args": this.props.name ? JSON.stringify({-        "addon-name": this.props.name-      }) : null-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {-      "data-l10n-name": "icon",-      src: this.props.iconURL,-      role: "presentation",-      alt: ""-    }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_2__["Localized"], {-      text: content.primary_button.label-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {-      onClick: this.onClickAddExtension,-      className: "primary"-    })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_2__["Localized"], {-      text: content.startButton.label-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("button", {-      onClick: this.handleStartBtnClick,-      className: "secondary"-    })))));+      className: "outer-wrapper onboardingContainer proton",+      style: {+        backgroundImage: `url(${content.background_url})`+      }+    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_MultiStageProtonScreen__WEBPACK_IMPORTED_MODULE_2__["MultiStageProtonScreen"], {+      content: content,+      isRtamo: true,+      id: this.props.messageId,+      order: this.props.order,+      totalNumberOfScreens: this.props.totalNumberOfScreens,+      autoClose: this.props.autoClose,+      iconURL: this.props.iconURL,+      addonName: this.props.name,+      handleAction: this.handleAction,+      addExtension: this.onClickAddExtension+    }));   } }
AI Analysis
I'll analyze the code diff for security vulnerabilities following the specified format.

1. Vulnerability Existed: not sure
[XSS Potential] [browser/components/newtab/aboutwelcome/content/aboutwelcome.bundle.js] [Lines 847-852]
Old Code: (Not present in old version)
Fixed Code: 
```js
/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
  className: `${isRtamo ? "rtamo-icon" : "hide-rtamo-icon"}`
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("img", {
  src: this.props.iconURL,
  role: "presentation",
  alt: ""
}))
```
Additional Details: The new code adds an image element with a dynamic src attribute (this.props.iconURL). While role="presentation" and alt="" are good practices, there's no visible sanitization of the URL, which could potentially lead to XSS if the URL is attacker-controlled.

2. Vulnerability Existed: not sure
[Insecure Object Assignment] [browser/components/newtab/aboutwelcome/content/aboutwelcome.bundle.js] [Lines 1250-1252]
Old Code: (Not present in old version)
Fixed Code:
```js
data = { ...data,
  url
};
```
Additional Details: The spread operator is used to merge objects, which could potentially lead to prototype pollution if the data object contains untrusted input. However, the context suggests this is for extension installation URLs, so the risk may be limited.

3. Vulnerability Existed: not sure
[Insecure Dynamic String Interpolation] [browser/components/newtab/aboutwelcome/content/aboutwelcome.bundle.js] [Lines 1196-1199]
Old Code: (Not present in old version)
Fixed Code:
```js
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("div", {
  className: "outer-wrapper onboardingContainer proton",
  style: {
    backgroundImage: `url(${content.background_url})`
  }
}
```
Additional Details: The background_url is interpolated directly into a style attribute without visible sanitization, which could potentially lead to CSS injection if the URL is attacker-controlled.

Note: While I've identified several potential security concerns, the actual risk depends on how these props (iconURL, background_url, etc.) are sourced and validated elsewhere in the application. The changes appear to be part of a feature enhancement rather than explicit security fixes.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
testing/web-platform/tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/shadows/2d.shadow.image.alpha.html@@ -17,8 +17,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50);@@ -36,7 +36,7 @@ promise.then(function(response) {     createImageBitmap(response).then(bitmap => {         ctx.drawImage(bitmap, 0, -50);-        _assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);+        _assertPixelApprox(canvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);     }, t_fail); }).then(t_pass, t_fail);
AI Analysis
Based on the provided code diff, I don't see any security vulnerabilities being fixed. The changes appear to be purely variable renaming and don't involve any security-related modifications. Here's the analysis:

1. Vulnerability Existed: no
   Variable Renaming [File] [Lines 17-18, 36]
   Old Code:
   ```javascript
   var offscreenCanvas = new OffscreenCanvas(100, 50);
   var ctx = offscreenCanvas.getContext('2d');
   ```
   Fixed Code:
   ```javascript
   var canvas = new OffscreenCanvas(100, 50);
   var ctx = canvas.getContext('2d');
   ```

2. Vulnerability Existed: no
   Variable Renaming [File] [Line 36]
   Old Code:
   ```javascript
   _assertPixelApprox(offscreenCanvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
   ```
   Fixed Code:
   ```javascript
   _assertPixelApprox(canvas, 50,25, 127,0,127,255, "50,25", "127,0,127,255", 2);
   ```

The changes simply rename the variable `offscreenCanvas` to `canvas` for consistency or clarity, but don't address any security issues. No known vulnerabilities are being patched in this diff.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js@@ -13,8 +13,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); var promise = new Promise(function(resolve, reject) {     var xhr = new XMLHttpRequest();@@ -32,10 +32,10 @@         ctx.fillRect(0, 0, 100, 50);         ctx.translate(-128, -78);         ctx.fillRect(128, 78, 100, 50);-        _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");-        _assertPixel(offscreenCanvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");-        _assertPixel(offscreenCanvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");-        _assertPixel(offscreenCanvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");+        _assertPixel(canvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");+        _assertPixel(canvas, 98,1, 0,255,0,255, "98,1", "0,255,0,255");+        _assertPixel(canvas, 1,48, 0,255,0,255, "1,48", "0,255,0,255");+        _assertPixel(canvas, 98,48, 0,255,0,255, "98,48", "0,255,0,255");     }, t_fail); }).then(t_pass, t_fail);
AI Analysis
Based on the provided code diff, I don't see any security vulnerabilities being fixed. The changes appear to be purely variable renaming (from `offscreenCanvas` to `canvas`) and corresponding updates to the assertions. Here's the analysis:

    Vulnerability Existed: no
    No security vulnerability found
    File: testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js
    Old Code: var offscreenCanvas = new OffscreenCanvas(100, 50);
    Fixed Code: var canvas = new OffscreenCanvas(100, 50);

    Vulnerability Existed: no
    No security vulnerability found
    File: testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.pattern.paint.repeat.coord3.worker.js
    Old Code: _assertPixel(offscreenCanvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");
    Fixed Code: _assertPixel(canvas, 1,1, 0,255,0,255, "1,1", "0,255,0,255");

The changes are consistent throughout the file, simply renaming the variable and updating all references to it. There are no security-related changes in this diff.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/fill-and-stroke-styles/2d.fillStyle.parse.transparent-2.html@@ -17,14 +17,14 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); ctx.fillStyle = '#f00'; ctx.fillStyle = 'TrAnSpArEnT'; ctx.fillRect(0, 0, 100, 50);-_assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");+_assertPixel(canvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0"); t.done(); });
AI Analysis
Analysis of the provided code diff:

1. Vulnerability Existed: no  
   No specific vulnerability found [File] [Lines 17-25]  
   [Old Code]  
   ```javascript
   var offscreenCanvas = new OffscreenCanvas(100, 50);
   var ctx = offscreenCanvas.getContext('2d');
   ctx.fillStyle = '#f00';
   ctx.fillStyle = 'TrAnSpArEnT';
   ctx.fillRect(0, 0, 100, 50);
   _assertPixel(offscreenCanvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
   ```  
   [Fixed Code]  
   ```javascript
   var canvas = new OffscreenCanvas(100, 50);
   var ctx = canvas.getContext('2d');
   ctx.fillStyle = '#f00';
   ctx.fillStyle = 'TrAnSpArEnT';
   ctx.fillRect(0, 0, 100, 50);
   _assertPixel(canvas, 50,25, 0,0,0,0, "50,25", "0,0,0,0");
   ```  
   Additional Details: The changes appear to be purely variable renaming (from `offscreenCanvas` to `canvas`) with no security implications. The functionality remains identical. No security vulnerability was fixed in this change.  

Note: This diff shows only a refactoring change with no apparent security impact. The test case continues to verify the same behavior (transparent fill style handling) with different variable names.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
js/src/jit/arm64/vixl/MozSimulator-vixl.cpp AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/js/src/jit/arm64/vixl/MozSimulator-vixl.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/js/src/jit/arm64/vixl/MozSimulator-vixl.cpp@@ -542,6 +542,47 @@                                                                     int32_t,                                                                     int32_t); typedef int32_t (*Prototype_Int32_GeneralInt32Int32Int32Int32General)(int64_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int64_t);+typedef int32_t (*Prototype_Int32_GeneralInt32Int32Int32Int32Int32Int32General)(int64_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int64_t);+typedef int32_t (*Prototype_Int32_GeneralInt32Float32Float32Int32Int32Int32General)(int64_t,+                                                                      int32_t,+                                                                      float,+                                                                      float,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int64_t);+typedef int32_t (*Prototype_Int32_GeneralInt32Float32Float32Float32Float32Int32Int32Int32Int32General)(int64_t,+                                                                      int32_t,+                                                                      float,+                                                                      float,+                                                                      float,+                                                                      float,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int32_t,+                                                                      int64_t);+typedef int32_t (*Prototype_Int32_GeneralInt32Float32Float32Int32Float32Float32Int32Float32Int32Int32Int32Int32General)(int64_t,+                                                                      int32_t,+                                                                      float,+                                                                      float,+                                                                      int32_t,+                                                                      float,+                                                                      float,+                                                                      int32_t,+                                                                      float,                                                                       int32_t,                                                                       int32_t,                                                                       int32_t,@@ -650,12 +691,16 @@   int64_t x5 = xreg(5);   int64_t x6 = xreg(6);   int64_t x7 = xreg(7);+  int64_t x8 = xreg(8);   double d0 = dreg(0);   double d1 = dreg(1);   double d2 = dreg(2);   double d3 = dreg(3);   float s0 = sreg(0);   float s1 = sreg(1);+  float s2 = sreg(2);+  float s3 = sreg(3);+  float s4 = sreg(4);   // Dispatch the call and set the return value.   switch (redir->type()) {@@ -841,6 +886,34 @@       int32_t ret =           reinterpret_cast<Prototype_Int32_GeneralInt32Int32Int32Int32General>(               nativeFn)(x0, x1, x2, x3, x4, x5);+      setGPR32Result(ret);+      break;+    }+    case js::jit::Args_Int32_GeneralInt32Int32Int32Int32Int32Int32General: {+      int32_t ret =+          reinterpret_cast<Prototype_Int32_GeneralInt32Int32Int32Int32Int32Int32General>(+              nativeFn)(x0, x1, x2, x3, x4, x5, x6, x7);+      setGPR32Result(ret);+      break;+    }+    case js::jit::Args_Int32_GeneralInt32Float32Float32Int32Int32Int32General: {+      int32_t ret =+          reinterpret_cast<Prototype_Int32_GeneralInt32Float32Float32Int32Int32Int32General>(+              nativeFn)(x0, x1, s0, s1, x2, x3, x4, x5);+      setGPR32Result(ret);+      break;+    }+    case js::jit::Args_Int32_GeneralInt32Float32Float32Float32Float32Int32Int32Int32Int32General: {+      int32_t ret =+          reinterpret_cast<Prototype_Int32_GeneralInt32Float32Float32Float32Float32Int32Int32Int32Int32General>(+              nativeFn)(x0, x1, s0, s1, s2, s3, x2, x3, x4, x5, x6);+      setGPR32Result(ret);+      break;+    }+    case js::jit::Args_Int32_GeneralInt32Float32Float32Int32Float32Float32Int32Float32Int32Int32Int32Int32General: {+      int32_t ret =+          reinterpret_cast<Prototype_Int32_GeneralInt32Float32Float32Int32Float32Float32Int32Float32Int32Int32Int32Int32General>(+              nativeFn)(x0, x1, s0, s1, x2, s2, s3, x3, s4, x4, x5, x6, x7, x8);       setGPR32Result(ret);       break;     }
AI Analysis
After analyzing the provided code diff, I don't see any clear security vulnerabilities being fixed. The changes appear to be adding new function prototypes and corresponding case handlers for additional argument combinations in the ARM64 simulator. Here's my analysis:

1. Vulnerability Existed: no
   No specific vulnerability [File] js/src/jit/arm64/vixl/MozSimulator-vixl.cpp [Lines] 542-894
   The changes are adding new function call prototypes and their handling cases, which appear to be feature additions rather than security fixes.

The diff shows:
1. Addition of several new function pointer typedefs for different argument combinations
2. Addition of new register reads (x8, s2-s4)
3. Addition of new case handlers for these function types

These changes appear to be extending the simulator's capability to handle more complex function call signatures, particularly those involving mixed integer and floating-point arguments. There's no obvious security vulnerability being addressed here, just expanded functionality.

If I had to speculate about potential security implications (though not evident in the diff):
- The changes could theoretically help prevent potential type confusion vulnerabilities by providing proper handling for more argument combinations
- They might help ensure proper register state preservation across more complex function calls
But these would be preventative measures rather than fixes for existing vulnerabilities.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
devtools/server/actors/inspector/event-collector.js AI: Not sure
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/devtools/server/actors/inspector/event-collector.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/devtools/server/actors/inspector/event-collector.js@@ -385,9 +385,11 @@       }       const eventInfo = {+        nsIEventListenerInfo: listener,         capturing: listener.capturing,         type: listener.type,         handler: handler,+        enabled: listener.enabled,       };       handlers.push(eventInfo);@@ -820,16 +822,20 @@    *    * @param  {DOMNode} node    *         The node for which events are to be gathered.-   * @return {Array}+   * @return {Array<Object>}    *         An array containing objects in the following format:    *         {-   *           type: type,        // e.g. "click"-   *           handler: handler,  // The function called when event is triggered.-   *           tags: "jQuery",    // Comma separated list of tags displayed-   *                              // inside event bubble.-   *           hide: {            // Flags for hiding certain properties.-   *             capturing: true,+   *           {String} type: The event type, e.g. "click"+   *           {Function} handler: The function called when event is triggered.+   *           {Boolean} enabled: Whether the listener is enabled or not (event listeners can+   *                     be disabled via the inspector)+   *           {String} tags: Comma separated list of tags displayed inside event bubble (e.g. "JQuery")+   *           {Object} hide: Flags for hiding certain properties.+   *             {Boolean} capturing    *           }+   *           {Boolean} native+   *           {String|undefined} sourceActor: The sourceActor id of the event listener+   *           {nsIEventListenerInfo|undefined} nsIEventListenerInfo    *         }    */   getEventListeners(node) {@@ -895,7 +901,10 @@    *             hide: {    *               capturing: true    *             },-   *             native: false+   *             native: false,+   *             enabled: true+   *             sourceActor: "sourceActor.1234",+   *             nsIEventListenerInfo: nsIEventListenerInfo {…},    *           }    */   // eslint-disable-next-line complexity@@ -922,7 +931,7 @@       const override = listener.override || {};       const tags = listener.tags || "";       const type = listener.type || "";-      let isScriptBoundToNonScriptElement = false;+      const enabled = !!listener.enabled;       let functionSource = handler.toString();       let line = 0;       let column = null;@@ -957,13 +966,6 @@       if (script) {         const scriptSource = script.source.text;--        // Scripts are provided via script tags. If it wasn't provided by a-        // script tag it must be a DOM0 event.-        if (script.source.element) {-          isScriptBoundToNonScriptElement =-            script.source.element.class !== "HTMLScriptElement";-        }         line = script.startLine;         column = script.startColumn;@@ -1022,9 +1024,7 @@       } else {         origin =           url +-          (isScriptBoundToNonScriptElement || line === 0-            ? ""-            : ":" + line + (column === null ? "" : ":" + column));+          (line ? ":" + line + (column === null ? "" : ":" + column) : "");       }       eventObj = {@@ -1039,12 +1039,14 @@         hide: typeof override.hide !== "undefined" ? override.hide : hide,         native,         sourceActor,+        nsIEventListenerInfo: listener.nsIEventListenerInfo,+        enabled,       };       // Hide the debugger icon for DOM0 and native listeners. DOM0 listeners are       // generated dynamically from e.g. an onclick="" attribute so the script       // doesn't actually exist.-      if (native || isScriptBoundToNonScriptElement) {+      if (!sourceActor) {         eventObj.hide.debugger = true;       }     } finally {
AI Analysis
Here's the analysis of the provided code diff for security fixes:

1. Vulnerability Existed: not sure
   [Potential Information Exposure] [devtools/server/actors/inspector/event-collector.js] [Lines 385-390, 822-836, 895-904]
   [Old Code]
   const eventInfo = {
     capturing: listener.capturing,
     type: listener.type,
     handler: handler,
   };
   [Fixed Code]
   const eventInfo = {
     nsIEventListenerInfo: listener,
     capturing: listener.capturing,
     type: listener.type,
     handler: handler,
     enabled: listener.enabled,
   };

   Additional Details: The change exposes more listener information including the full nsIEventListenerInfo object and enabled state. While not clearly a security vulnerability, exposing additional internal objects could potentially leak sensitive information if not properly sanitized.

2. Vulnerability Existed: not sure
   [Potential Debug Information Leak] [devtools/server/actors/inspector/event-collector.js] [Lines 1022-1024]
   [Old Code]
   origin =
     url +
     (isScriptBoundToNonScriptElement || line === 0
       ? ""
       : ":" + line + (column === null ? "" : ":" + column));
   [Fixed Code]
   origin =
     url +
     (line ? ":" + line + (column === null ? "" : ":" + column) : "");

   Additional Details: The change simplifies the origin URL construction logic by removing the isScriptBoundToNonScriptElement check. This might affect how debug information is displayed, but it's unclear if this had any security implications.

3. Vulnerability Existed: not sure
   [Potential Debugger Bypass] [devtools/server/actors/inspector/event-collector.js] [Lines 1046-1048]
   [Old Code]
   if (native || isScriptBoundToNonScriptElement) {
     eventObj.hide.debugger = true;
   }
   [Fixed Code]
   if (!sourceActor) {
     eventObj.hide.debugger = true;
   }

   Additional Details: The condition for hiding the debugger icon was changed from checking native/isScriptBoundToNonScriptElement to checking sourceActor presence. This might affect debugging capabilities but doesn't appear to be a direct security fix.

Note: While the changes add more detailed information about event listeners and modify how debugging information is handled, none of them clearly address known security vulnerabilities. The changes appear to be more about improving functionality and documentation than fixing security issues.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
testing/web-platform/tests/css/selectors/old-tests/css3-modsel-81.xml AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/css/selectors/old-tests/css3-modsel-81.xml+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/css/selectors/old-tests/css3-modsel-81.xml@@ -9,7 +9,6 @@   <link rel="author" title="Daniel Glazman" href="http://glazman.org/"/>   <link rel="author" title="Ian Hickson" href="mailto:[email protected]"/>   <link rel="help" href="https://www.w3.org/TR/css3-selectors/#selectors"/> <!-- bogus link to make sure it gets found -->-  <meta name="flags" content="" />  </head>  <body>  <p class="red">This paragraph should have a green background.</p>
AI Analysis
Based on the provided diff, I'll analyze it for potential security vulnerabilities:

1. Vulnerability Existed: no
   No specific vulnerability found [File] testing/web-platform/tests/css/selectors/old-tests/css3-modsel-81.xml [Lines] 9
   [Old Code] <meta name="flags" content="" />
   [Fixed Code] (removed line)

Additional details:
- The change simply removes an empty meta tag with a "flags" attribute, which doesn't appear to have any security implications
- This appears to be a test file cleanup rather than a security fix
- No known vulnerability patterns (XSS, injection, etc.) are present in this change
- The removed tag wasn't serving any apparent security purpose

Since this is just removing an unused meta tag from a test file, I don't see any security vulnerabilities being addressed here. The change seems to be purely about cleaning up test markup.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
devtools/client/webconsole/test/browser/browser_jsterm_evaluation_context_selector_targets_update.js AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/devtools/client/webconsole/test/browser/browser_jsterm_evaluation_context_selector_targets_update.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/devtools/client/webconsole/test/browser/browser_jsterm_evaluation_context_selector_targets_update.js@@ -12,6 +12,7 @@ // the context is set to the top one if the destroyed target was selected). add_task(async function() {+  await pushPref("devtools.popups.debug", true);   await pushPref("devtools.webconsole.input.context", true);   const hud = await openNewTabWithIframesAndConsole(TEST_URI, [@@ -165,4 +166,77 @@   await waitForEagerEvaluationResult(hud, `"example.com"`);   ok(true, "Instant evaluation is done against the top frame context");++  info("Open a popup");+  const originalTab = gBrowser.selectedTab;+  let onSwitchedHost = hud.toolbox.once("host-changed");+  await ContentTask.spawn(gBrowser.selectedBrowser, [IFRAME_PATH], function(+    path+  ) {+    content.open(`https://test2.example.org/${path}?id=popup`);+  });+  await onSwitchedHost;++  // Wait until the popup is rendered in the context selector+  // and that it is automatically switched to (aria-checked==true).+  await waitFor(() => {+    try {+      const items = getContextSelectorItems(hud);+      return (+        items.length === 3 &&+        items.some(+          el =>+            el+              .querySelector(".label")+              ?.textContent.includes("popup|test2.example.org") &&+            el.getAttribute("aria-checked") === "true"+        )+      );+    } catch (e) {+      // The context list may be wiped while updating and getContextSelectorItems will throw+    }+    return false;+  });++  const expectedPopupItem = {+    label: `popup|test2.example.org`,+    tooltip: `https://test2.example.org/${IFRAME_PATH}?id=popup`,+  };++  await checkContextSelectorMenu(hud, [+    {+      ...expectedTopItem,+      checked: false,+    },+    expectedSeparatorItem,+    {+      ...expectedPopupItem,+      checked: true,+    },+  ]);++  await waitForEagerEvaluationResult(hud, `"test2.example.org"`);+  ok(true, "The context was set to the popup document");++  info("Open a second popup and reload the original tab");+  onSwitchedHost = hud.toolbox.once("host-changed");+  await ContentTask.spawn(originalTab.linkedBrowser, [IFRAME_PATH], function(+    path+  ) {+    content.open(`https://test2.example.org/${path}?id=popup2`);+  });+  await onSwitchedHost;++  // Reloading the tab while having two popups opened used to+  // generate exception in the context selector component+  const onBrowserLoaded = BrowserTestUtils.browserLoaded(+    originalTab.linkedBrowser+  );+  gBrowser.reloadTab(originalTab);+  await onBrowserLoaded;++  ok(+    !hud.ui.document.querySelector(".app-error-panel"),+    "The web console did not crash"+  ); });
AI Analysis
After analyzing the provided code diff, I don't see any clear security vulnerabilities being fixed. The changes appear to be primarily focused on adding test functionality for popup handling and context switching in the developer tools console.

Here's my analysis:

1. Vulnerability Existed: no
   No security vulnerability found in this diff. The changes are test-related additions for popup handling and context switching scenarios.

The main changes in this diff are:
1. Adding a debug preference for popups (`devtools.popups.debug`)
2. Adding test cases for:
   - Opening popups and verifying context switching
   - Handling multiple popups
   - Reloading tabs with popups open
   - Verifying the console doesn't crash in these scenarios

These changes appear to be functional test improvements rather than security fixes. The test verifies proper behavior when:
- Opening popups from different domains (test2.example.org)
- Handling context switching between multiple popups
- Reloading tabs while popups are open
- Ensuring no exceptions occur in these scenarios

The changes don't show any security fixes for vulnerabilities like XSS, CSRF, or other common web security issues. The modifications are focused on testing the robustness of the developer tools' context selector functionality.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
accessible/xpcom/xpcAccessibleImage.cpp AI: Not sure
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/accessible/xpcom/xpcAccessibleImage.cpp+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/accessible/xpcom/xpcAccessibleImage.cpp@@ -29,7 +29,7 @@   if (!Intl()) return NS_ERROR_FAILURE;-  nsIntPoint point = Intl()->Position(aCoordType);+  LayoutDeviceIntPoint point = Intl()->Position(aCoordType);   *aX = point.x;   *aY = point.y;   return NS_OK;@@ -44,7 +44,7 @@   if (!Intl()) return NS_ERROR_FAILURE;-  nsIntSize size = Intl()->Size();+  LayoutDeviceIntSize size = Intl()->Size();   *aWidth = size.width;   *aHeight = size.height;   return NS_OK;
AI Analysis
Here's the analysis of the provided code diff:

1. Vulnerability Existed: not sure  
   [Potential Integer Overflow/Type Safety Issue] [accessible/xpcom/xpcAccessibleImage.cpp] [Lines 29-33]  
   Old Code:  
   ```cpp
   nsIntPoint point = Intl()->Position(aCoordType);
   *aX = point.x;
   *aY = point.y;
   ```  
   Fixed Code:  
   ```cpp
   LayoutDeviceIntPoint point = Intl()->Position(aCoordType);
   *aX = point.x;
   *aY = point.y;
   ```  
   Additional Details: The change from nsIntPoint to LayoutDeviceIntPoint suggests a potential type safety improvement, but without more context about the types' definitions and usage, we can't be certain if this fixed a specific vulnerability.

2. Vulnerability Existed: not sure  
   [Potential Integer Overflow/Type Safety Issue] [accessible/xpcom/xpcAccessibleImage.cpp] [Lines 44-48]  
   Old Code:  
   ```cpp
   nsIntSize size = Intl()->Size();
   *aWidth = size.width;
   *aHeight = size.height;
   ```  
   Fixed Code:  
   ```cpp
   LayoutDeviceIntSize size = Intl()->Size();
   *aWidth = size.width;
   *aHeight = size.height;
   ```  
   Additional Details: Similar to the first change, this modifies the type from nsIntSize to LayoutDeviceIntSize, which might be related to preventing integer overflows or improving type safety, but we can't confirm a specific vulnerability was fixed.

Note: Both changes appear to be part of a systematic type migration (from nsInt* to LayoutDeviceInt*) which is likely related to improving type safety and consistency across the codebase, but without more context about the specific vulnerabilities these types might have caused, we can't definitively identify security issues.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.clip.source-in.worker.js AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.clip.source-in.worker.js+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.clip.source-in.worker.js@@ -13,8 +13,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); ctx.fillStyle = '#0f0';@@ -24,8 +24,8 @@ ctx.clip(); ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 50, 50);-_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");-_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");+_assertPixel(canvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");+_assertPixel(canvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255"); t.done(); });
AI Analysis
After analyzing the provided code diff, I don't see any security vulnerabilities being fixed. The changes appear to be purely variable renaming for better code clarity/consistency. Here's the analysis:

Vulnerability Existed: no
[No Vulnerability Found] [testing/web-platform/tests/html/canvas/offscreen/compositing/2d.composite.clip.source-in.worker.js] [Lines 13-24]
[Old Code]
var offscreenCanvas = new OffscreenCanvas(100, 50);
var ctx = offscreenCanvas.getContext('2d');
...
_assertPixel(offscreenCanvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
_assertPixel(offscreenCanvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");
[Fixed Code]
var canvas = new OffscreenCanvas(100, 50);
var ctx = canvas.getContext('2d');
...
_assertPixel(canvas, 25,25, 0,255,0,255, "25,25", "0,255,0,255");
_assertPixel(canvas, 75,25, 0,255,0,255, "75,25", "0,255,0,255");

The changes simply rename the variable `offscreenCanvas` to `canvas` throughout the file, which doesn't appear to address any security issues but rather improves code consistency. No security-related functionality was modified.
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
testing/web-platform/tests/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.create.html AI: No vulnerabilities
--- /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_97_END/firefox-FIREFOX_RELEASE_97_END/testing/web-platform/tests/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.create.html+++ /root/PatchLeaks-main/products/firefox_downloads/FIREFOX_RELEASE_98_END/firefox-FIREFOX_RELEASE_98_END/testing/web-platform/tests/html/canvas/offscreen/the-offscreen-canvas/2d.getcontext.extraargs.create.html@@ -17,8 +17,8 @@ }); t.step(function() {-var offscreenCanvas = new OffscreenCanvas(100, 50);-var ctx = offscreenCanvas.getContext('2d');+var canvas = new OffscreenCanvas(100, 50);+var ctx = canvas.getContext('2d'); _assertDifferent((new OffscreenCanvas(100, 50)).getContext('2d', false, {}, [], 1, "2"), null, "(new OffscreenCanvas(100, 50)).getContext('2d', false, {}, [], 1, \"2\")", "null"); _assertDifferent((new OffscreenCanvas(100, 50)).getContext('2d', 123), null, "(new OffscreenCanvas(100, 50)).getContext('2d', 123)", "null");
AI Analysis
Analyzing the provided code diff:

1. Vulnerability Existed: no
   No specific vulnerability found [File] [Lines 17-18]
   Old Code:
   var offscreenCanvas = new OffscreenCanvas(100, 50);
   var ctx = offscreenCanvas.getContext('2d');

   Fixed Code:
   var canvas = new OffscreenCanvas(100, 50);
   var ctx = canvas.getContext('2d');

Additional Notes:
- The changes appear to be purely variable naming changes (from 'offscreenCanvas' to 'canvas')
- The test assertions remain the same, just testing that getContext works with extra arguments
- No security-relevant changes were made in this diff
- The modification doesn't appear to address any known vulnerability or security issue
CVE Analysis Results:
CVE-2022-26384: No
View CVE Description
If an attacker could control the contents of an iframe sandboxed with <code>allow-popups</code> but not <code>allow-scripts</code>, they were able to craft a link that, when clicked, would lead to JavaScript execution in violation of the sandbox. This vulnerability affects Firefox < 98, Firefox ESR < 91.7, and Thunderbird < 91.7.
Showing 4901-4920 of 6017 files
Per page: