From nobody Wed Feb 15 15:44:46 2023 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4PH2Sv0j2jz3qSvG; Wed, 15 Feb 2023 15:44:47 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4PH2Sv0V9mz3gxj; Wed, 15 Feb 2023 15:44:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1676475887; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=DqrV+FtcAs3Ed7CcQ33d63jxYL66ttj3bmgb1c92ku0=; b=sXOyq+pX5Z8AKYFRuxg/zggXILCHOh24p2+XKdGAuGksBok1+WYA+/UHOtvZJwkwcL7ly4 jbJuolbPi0B/wmGHXvkyZCg/cveXh79FtxSX5YMWwDB+qnJq8PY7KAmHyNRezNTFYVuc73 prlSD0g2JFqTXu09eFZrcTfE4x01MuW91klb459jTY6pa1zfowS31V6fV8vpHFqB9gnxZm ckn6MGQ+57zq+sYYh/thYIg7bsFxR8hjHRHzokn2peJ2/JZQQxLPYI6oidNEKCQH2XbWoK rSJ7yQgWlHJC5y8xc7pzvqvq40tcou+KMUOjNkrxXupqmCK6JbMxuoX/jqk/LQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1676475887; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=DqrV+FtcAs3Ed7CcQ33d63jxYL66ttj3bmgb1c92ku0=; b=Yd3tTYP3XAB665HI1ph8LV4ePgskcxtn2tZ48u2GdAZp3oZ2MBMOTjIqfR+nfebfFVta/i EZyp/p5ZJ5wyL115liAxmeAe+X6bJk03C4gHDrkk/C5oUacSdPuuB0kFICPdWK2SFcRmig CH0kETz8v9IIWqPmNlJ65EZWhvn+w+e01kJa3c6kCtZ4sJ/J4RB+VNWRMDup9nWwKxpTM2 YW3tlPdcYexa5Zf9NjepsYLCkuSo3gt6Ja0kCKdW5yC63TDH1LQmarLxUmr4qHFwdTNh68 Jfq8zYAKGyM4h3nXUhwDSz1G7RO+Wils8n00GsS1HDpA6fohWEt2veSDAEBcig== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1676475887; a=rsa-sha256; cv=none; b=kekLOpg/chK1gL5mlC8KZVywjvqR2jZ13Q/5P/NJ6RxLcAOXQQduuh06WtLQsK6bMXlkX5 8qfbbQtITFy8MeiBQLop+NXeF8w1ogeTs3zBYvceQhDGWF/ZvlxpD0eZeXS94O7tFRSmsJ xjsQL0uAiIUw2puAbg84/XtGku7yTv9nnTRKy0ahrg5eIuO5tQ5SLtqIqGsGQ7af4xqgzt lyHcltEoXMpJfo/7lkHUpM18LxFOay8cIKjpdDJuuVDuDlgKe8N2MbUsSm+2Hkzq5zh7OE dBZU0xWtW28hsEN5HHB0ZTH4pElNEF7MShydt3CxHNQZE14q3VXHqsBHKI6s2w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4PH2St6g1RzVVv; Wed, 15 Feb 2023 15:44:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 31FFik0f016372; Wed, 15 Feb 2023 15:44:46 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 31FFiknA016371; Wed, 15 Feb 2023 15:44:46 GMT (envelope-from git) Date: Wed, 15 Feb 2023 15:44:46 GMT Message-Id: <202302151544.31FFiknA016371@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Guido Falsi Subject: git: e65d3de319a7 - main - deskutils/calibre: Update to 6.12.0 List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-main@freebsd.org X-BeenThere: dev-commits-ports-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: madpilot X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e65d3de319a7f795e28cfc4f9dcef6e1a5ec396b Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by madpilot: URL: https://cgit.FreeBSD.org/ports/commit/?id=e65d3de319a7f795e28cfc4f9dcef6e1a5ec396b commit e65d3de319a7f795e28cfc4f9dcef6e1a5ec396b Author: Guido Falsi AuthorDate: 2023-02-15 15:43:21 +0000 Commit: Guido Falsi CommitDate: 2023-02-15 15:43:21 +0000 deskutils/calibre: Update to 6.12.0 With this release upstream has decided not to include some prebuilt and bundled parts. So the port now needs to download some extra files, to be able to compile. Also while building calibre now needs to launch parts of itself which creates a temporary directory in LOCALBASE, if it is writable, so clean that up after the build. - Use DIST_SUBDIR, since the port is downloading multiple files now. - Add new dependencies for things not embedded anymore - Remove unneeded EXTRACT_BEFORE_ARGS - Remove references to python2 - Bundle predigested user-agent-data.json file, adding a utility target to easily regenerate it - Move from dead upstream textproc/cchardet to drop-in-ready textproc/py-charset-normalizer [1] Submitted by: fluffy [1] --- deskutils/calibre/Makefile | 54 +- deskutils/calibre/distinfo | 12 +- deskutils/calibre/files/patch-setup_build.py | 6 +- deskutils/calibre/files/patch-setup_install.py | 33 + deskutils/calibre/files/patch-setup_resources.py | 35 + .../files/patch-src_calibre_ebooks_chardet.py | 11 + deskutils/calibre/files/user-agent-data.json | 770 +++++++++++++++++++++ deskutils/calibre/pkg-plist | 3 + 8 files changed, 905 insertions(+), 19 deletions(-) diff --git a/deskutils/calibre/Makefile b/deskutils/calibre/Makefile index c6bc86aa1140..b7fe3c684eb3 100644 --- a/deskutils/calibre/Makefile +++ b/deskutils/calibre/Makefile @@ -1,8 +1,12 @@ PORTNAME= calibre -PORTVERSION= 6.11.0 -PORTREVISION= 1 +PORTVERSION= 6.12.0 CATEGORIES= deskutils python -MASTER_SITES= http://download.calibre-ebook.com/${PORTVERSION}/ +MASTER_SITES= http://download.calibre-ebook.com/${PORTVERSION}/ \ + https://curl.haxx.se/ca/:cacert +DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \ + cacert.pem:cacert +DIST_SUBDIR= ${PORTNAME} +EXTRACT_ONLY= ${DISTFILES:C/:[^:]+$//:Ncacert.pem} MAINTAINER= madpilot@FreeBSD.org COMMENT= Ebook management application @@ -25,7 +29,9 @@ LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \ libuchardet.so:textproc/uchardet BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>=0:databases/py-sqlite3@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}dateutil>=0:devel/py-dateutil@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}beautifulsoup>=0:www/py-beautifulsoup@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}lxml>=0:devel/py-lxml@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}mechanize>=0:www/py-mechanize@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}css-parser>=1.0.4:www/py-css-parser@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}apsw>=0:databases/py-apsw@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}msgpack>=0.3:devel/py-msgpack@${PY_FLAVOR} \ @@ -33,7 +39,10 @@ BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sqlite3>=0:databases/py-sqlite3@${PY_FLAVO ${PYTHON_PKGNAMEPREFIX}html5-parser>=0.4.3:www/py-html5-parser@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pillow>=7.0.0:graphics/py-pillow@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}zeroconf>0:net/py-zeroconf@${PY_FLAVOR} \ - ${LOCALBASE}/bin/cmake:devel/cmake-core + ${PYTHON_PKGNAMEPREFIX}pyicu>0:devel/py-pyicu@${PY_FLAVOR} \ + ${LOCALBASE}/bin/cmake:devel/cmake-core \ + liberation-fonts-ttf>=2.1.3:x11-fonts/liberation-fonts-ttf \ + MathJax3>0:www/mathjax3 RUN_DEPENDS= xdg-open:devel/xdg-utils \ ${PYTHON_PKGNAMEPREFIX}css-parser>=1.0.4:www/py-css-parser@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}dnspython>=0:dns/py-dnspython@${PY_FLAVOR} \ @@ -49,14 +58,16 @@ RUN_DEPENDS= xdg-open:devel/xdg-utils \ ${PYTHON_PKGNAMEPREFIX}msgpack>=0.3:devel/py-msgpack@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}regex>=0:textproc/py-regex@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}markdown>=0:textproc/py-markdown@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}cchardet>=0:textproc/py-cchardet@${PY_FLAVOR} \ + ${PYTHON_PKGNAMEPREFIX}charset-normalizer>=0:textproc/py-charset-normalizer@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}html5-parser>=0.4.3:www/py-html5-parser@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}feedparser>=6.0.8:textproc/py-feedparser@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}jeepney>=0.6:devel/py-jeepney@${PY_FLAVOR} \ ${PYTHON_PKGNAMEPREFIX}pillow>=7.0.0:graphics/py-pillow@${PY_FLAVOR} \ pdftohtml:graphics/poppler-utils \ ${PYTHON_PKGNAMEPREFIX}zeroconf>0:net/py-zeroconf@${PY_FLAVOR} \ - ${PYTHON_PKGNAMEPREFIX}pycryptodome>0:security/py-pycryptodome@${PY_FLAVOR} + ${PYTHON_PKGNAMEPREFIX}pycryptodome>0:security/py-pycryptodome@${PY_FLAVOR} \ + liberation-fonts-ttf>=2.1.3:x11-fonts/liberation-fonts-ttf\ + MathJax3>0:www/mathjax3 USES= desktop-file-utils gettext-runtime gl gnome localbase:ldflags \ pkgconfig pyqt:6 python:3.8+ qt:6 shared-mime-info shebangfix \ @@ -69,11 +80,12 @@ USE_GL= egl gl USE_GNOME= glib20 USE_XORG= xrender xext x11 -EXTRACT_BEFORE_ARGS= -x -s '/^calibre/~-src/' -f +USE_GITHUB= nodefault +GH_TUPLE= kovidgoyal:calibre-translations:cdd2a2e:translations \ + LibreOffice:dictionaries:1b6575d:hypenation + SHEBANG_GLOB= *.sh *.py *.recipe -python_OLD_CMD= "/usr/bin/env python2" "/usr/bin/env python2" "/usr/bin/env python" /bin/python2 \ - /usr/bin/python2 ${LOCALBASE}/bin/python3 -WRKSRC= ${WRKDIR}/${PORTNAME}-src-${PORTVERSION} +python_OLD_CMD= "/usr/bin/env python" ${LOCALBASE}/bin/python3 MAKE_ENV+= FC_INC_DIR="${LOCALBASE}/include/fontconfig" \ FC_LIB_DIR="${LOCALBASE}/lib" \ OVERRIDE_CFLAGS="${CFLAGS}" \ @@ -88,11 +100,15 @@ MAKE_ENV+= FC_INC_DIR="${LOCALBASE}/include/fontconfig" \ QMAKE=${QMAKE} \ SIP_BIN=${SIP} \ SIP_DIR=${PYQT_SIPDIR} \ - CALIBRE_PY3_PORT=1 + PYTHONDONTWRITEBYTECODE=true + +post-extract: + @${MV} ${WRKSRC_translations} ${WRKSRC}/src/translations + @${CP} ${DISTDIR}/${DIST_SUBDIR}/cacert.pem ${WRKSRC}/resources/mozilla-ca-certs.pem + @${CP} ${FILESDIR}/user-agent-data.json ${WRKSRC}/resources post-patch: @${REINPLACE_CMD} -e "s|#!/usr/bin/env python{py_major_version}|#!${PYTHON_CMD}|" \ - -e "s|#!/usr/bin/env python2|#!${PYTHON_CMD}|" \ -e "s|#!/usr/bin/env python|#!${PYTHON_CMD}|" \ ${WRKSRC}/setup/install.py \ ${WRKSRC}/src/calibre/gui2/dialogs/custom_recipes.py \ @@ -104,7 +120,14 @@ do-configure: do-build: @${MKDIR} ${WRKDIR}/calibre-config ${WRKDIR}/xdg-config @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} \ - ${PYSETUP} build) + ${PYSETUP} bootstrap \ + --system-liberation_fonts \ + --path-to-liberation_fonts=${LOCALBASE}/share/fonts/Liberation \ + --system-mathjax \ + --path-to-mathjax=${LOCALBASE}/www/MathJax3 \ + --path-to-hyphenation=${WRKSRC_hypenation} \ + ) + @${RMDIR} ${LOCALBASE}/libexec/qt6/locales 2>/dev/null || ${TRUE} do-install: @${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PYTHON_VERSION}/site-packages \ @@ -122,4 +145,9 @@ do-install: @${RMDIR} ${STAGEDIR}${PREFIX}/share/desktop-directories @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/calibre/calibre/plugins/* +update-recent-uas: + @(cd ${BUILD_WRKSRC}; ${SETENV} ${MAKE_ENV} ${PYTHON_CMD} \ + ${PYSETUP} recent_uas) + ${CP} ${BUILD_WRKSRC}/resources/user-agent-data.json ${FILESDIR} + .include diff --git a/deskutils/calibre/distinfo b/deskutils/calibre/distinfo index 78a81a53ffa5..1fd87701b5b5 100644 --- a/deskutils/calibre/distinfo +++ b/deskutils/calibre/distinfo @@ -1,3 +1,9 @@ -TIMESTAMP = 1673519124 -SHA256 (calibre-6.11.0.tar.xz) = ca5399e658c0e6e05bd9b5ffa8586c98f416e9d255107f63c50691daef02e167 -SIZE (calibre-6.11.0.tar.xz) = 42603028 +TIMESTAMP = 1676140665 +SHA256 (calibre/calibre-6.12.0.tar.xz) = 34718a92ad7aa53549ef80dfaa042e2ff162c418aa0420978a6efd626757757c +SIZE (calibre/calibre-6.12.0.tar.xz) = 22753352 +SHA256 (calibre/cacert.pem) = fb1ecd641d0a02c01bc9036d513cb658bbda62a75e246bedbc01764560a639f0 +SIZE (calibre/cacert.pem) = 216583 +SHA256 (calibre/kovidgoyal-calibre-translations-cdd2a2e_GH0.tar.gz) = 8a436edccd5b01078083637a00e86045bc446b44065b66e67490f5bb544a42b0 +SIZE (calibre/kovidgoyal-calibre-translations-cdd2a2e_GH0.tar.gz) = 71153222 +SHA256 (calibre/LibreOffice-dictionaries-1b6575d_GH0.tar.gz) = 7e2587b75d06cad20ce887910f09ae0ef323369069206971c6cf4f6f3fcadae6 +SIZE (calibre/LibreOffice-dictionaries-1b6575d_GH0.tar.gz) = 94695879 diff --git a/deskutils/calibre/files/patch-setup_build.py b/deskutils/calibre/files/patch-setup_build.py index bda38070c980..e5115425aed6 100644 --- a/deskutils/calibre/files/patch-setup_build.py +++ b/deskutils/calibre/files/patch-setup_build.py @@ -1,8 +1,8 @@ ---- setup/build.py.orig 2020-12-12 08:56:45 UTC +--- setup/build.py.orig 2023-02-03 02:11:49 UTC +++ setup/build.py -@@ -495,6 +495,7 @@ exceptions = {needs_exceptions} +@@ -682,6 +682,7 @@ sip-file = "{os.path.basename(sipf)}" include-dirs = {ext.inc_dirs} - qmake-QT = ["widgets"] + qmake-QT = {ext.qt_modules} sip-file = "{os.path.basename(sipf)}" +tags = ["WS_X11"] ''') diff --git a/deskutils/calibre/files/patch-setup_install.py b/deskutils/calibre/files/patch-setup_install.py new file mode 100644 index 000000000000..a7083c0da5fb --- /dev/null +++ b/deskutils/calibre/files/patch-setup_install.py @@ -0,0 +1,33 @@ +--- setup/install.py.orig 2023-02-03 02:11:49 UTC ++++ setup/install.py +@@ -357,29 +357,11 @@ class Bootstrap(Command): + + description = 'Bootstrap a fresh checkout of calibre from git to a state where it can be installed. Requires various development tools/libraries/headers' + TRANSLATIONS_REPO = 'kovidgoyal/calibre-translations' +- sub_commands = 'build iso639 iso3166 translations gui resources cacerts recent_uas'.split() ++ sub_commands = 'build iso639 iso3166 translations gui resources cacerts'.split() + + def add_options(self, parser): + parser.add_option('--ephemeral', default=False, action='store_true', + help='Do not download all history for the translations. Speeds up first time download but subsequent downloads will be slower.') +- +- def pre_sub_commands(self, opts): +- tdir = self.j(self.d(self.SRC), 'translations') +- clone_cmd = [ +- 'git', 'clone', f'https://github.com/{self.TRANSLATIONS_REPO}.git', 'translations'] +- if opts.ephemeral: +- if os.path.exists(tdir): +- shutil.rmtree(tdir) +- +- st = time.time() +- clone_cmd.insert(2, '--depth=1') +- subprocess.check_call(clone_cmd, cwd=self.d(self.SRC)) +- print('Downloaded translations in %d seconds' % int(time.time() - st)) +- else: +- if os.path.exists(tdir): +- subprocess.check_call(['git', 'pull'], cwd=tdir) +- else: +- subprocess.check_call(clone_cmd, cwd=self.d(self.SRC)) + + def run(self, opts): + self.info('\n\nAll done! You should now be able to run "%s setup.py install" to install calibre' % sys.executable) diff --git a/deskutils/calibre/files/patch-setup_resources.py b/deskutils/calibre/files/patch-setup_resources.py new file mode 100644 index 000000000000..de06cd017327 --- /dev/null +++ b/deskutils/calibre/files/patch-setup_resources.py @@ -0,0 +1,35 @@ +--- setup/resources.py.orig 2023-02-03 02:11:49 UTC ++++ setup/resources.py +@@ -142,19 +142,19 @@ class CACerts(Command): # {{{ + except OSError as err: + if err.errno != errno.ENOENT: + raise +- raw = b'' +- nraw = download_securely('https://curl.haxx.se/ca/cacert.pem') +- if not nraw: +- raise RuntimeError('Failed to download CA cert bundle') +- if nraw != raw: +- self.info('Updating Mozilla CA certificates') +- with open(self.CA_PATH, 'wb') as f: +- f.write(nraw) +- self.verify_ca_certs() +- +- def verify_ca_certs(self): +- from calibre.utils.https import get_https_resource_securely +- get_https_resource_securely('https://calibre-ebook.com', cacerts=self.b(self.CA_PATH)) ++# raw = b'' ++# nraw = download_securely('https://curl.haxx.se/ca/cacert.pem') ++# if not nraw: ++# raise RuntimeError('Failed to download CA cert bundle') ++# if nraw != raw: ++# self.info('Updating Mozilla CA certificates') ++# with open(self.CA_PATH, 'wb') as f: ++# f.write(nraw) ++# self.verify_ca_certs() ++# ++# def verify_ca_certs(self): ++# from calibre.utils.https import get_https_resource_securely ++# get_https_resource_securely('https://calibre-ebook.com', cacerts=self.b(self.CA_PATH)) + # }}} + + diff --git a/deskutils/calibre/files/patch-src_calibre_ebooks_chardet.py b/deskutils/calibre/files/patch-src_calibre_ebooks_chardet.py new file mode 100644 index 000000000000..d71ea85d0ae6 --- /dev/null +++ b/deskutils/calibre/files/patch-src_calibre_ebooks_chardet.py @@ -0,0 +1,11 @@ +--- src/calibre/ebooks/chardet.py.orig 2023-01-17 15:04:24 UTC ++++ src/calibre/ebooks/chardet.py +@@ -109,7 +109,7 @@ def detect(bytestring): + from calibre_extensions.uchardet import detect as implementation + except ImportError: + # People running from source without updated binaries +- from cchardet import detect as cdi ++ from charset_normalizer import detect as cdi + + def implementation(x): + return cdi(x).get('encoding') or '' diff --git a/deskutils/calibre/files/user-agent-data.json b/deskutils/calibre/files/user-agent-data.json new file mode 100644 index 000000000000..5e9c8978acd2 --- /dev/null +++ b/deskutils/calibre/files/user-agent-data.json @@ -0,0 +1,770 @@ +{ + "chrome_versions": [ + { + "chrome_version": "110.0.5481", + "date": "2023-02-07", + "webkit_version": "110" + }, + { + "chrome_version": "109.0.5414", + "date": "2023-01-10", + "webkit_version": "109" + }, + { + "chrome_version": "108.0.5359", + "date": "2022-11-29", + "webkit_version": "108" + }, + { + "chrome_version": "107.0.5304", + "date": "2022-10-24", + "webkit_version": "107" + }, + { + "chrome_version": "106.0.5249", + "date": "2022-09-27", + "webkit_version": "106" + }, + { + "chrome_version": "105.0.5195", + "date": "2022-08-30", + "webkit_version": "105" + }, + { + "chrome_version": "104.0.5112", + "date": "2022-08-02", + "webkit_version": "104" + }, + { + "chrome_version": "103.0.5060", + "date": "2022-06-21", + "webkit_version": "103" + }, + { + "chrome_version": "102.0.5005", + "date": "2022-05-24", + "webkit_version": "102" + }, + { + "chrome_version": "101.0.4951", + "date": "2022-04-26", + "webkit_version": "101" + }, + { + "chrome_version": "100.0.4896", + "date": "2022-03-29", + "webkit_version": "100" + }, + { + "chrome_version": "99.0.4844", + "date": "2022-03-01", + "webkit_version": "99" + }, + { + "chrome_version": "98.0.4758", + "date": "2022-02-01", + "webkit_version": "98" + }, + { + "chrome_version": "97.0.4692", + "date": "2022-01-04", + "webkit_version": "97" + }, + { + "chrome_version": "96.0.4664", + "date": "2021-11-09", + "webkit_version": "96" + }, + { + "chrome_version": "95.0.4638", + "date": "2021-10-19", + "webkit_version": "95" + }, + { + "chrome_version": "94.0.4606", + "date": "2021-09-21", + "webkit_version": "94" + }, + { + "chrome_version": "93.0.4577", + "date": "2021-08-31", + "webkit_version": "93" + }, + { + "chrome_version": "92.0.4515", + "date": "2021-07-20", + "webkit_version": "92" + }, + { + "chrome_version": "91.0.4472", + "date": "2021-05-25", + "webkit_version": "91" + }, + { + "chrome_version": "90.0.4430", + "date": "2021-04-13", + "webkit_version": "90" + }, + { + "chrome_version": "89.0.4389", + "date": "2021-03-02", + "webkit_version": "89" + }, + { + "chrome_version": "88.0.4324", + "date": "2021-01-19", + "webkit_version": "88" + }, + { + "chrome_version": "87.0.4280", + "date": "2020-11-17", + "webkit_version": "87" + }, + { + "chrome_version": "86.0.4240", + "date": "2020-09-30", + "webkit_version": "86" + }, + { + "chrome_version": "85.0.4183", + "date": "2020-08-25", + "webkit_version": "85" + }, + { + "chrome_version": "84.0.4147", + "date": "2020-07-14", + "webkit_version": "84" + }, + { + "chrome_version": "83.0.4103", + "date": "2020-05-19", + "webkit_version": "83" + }, + { + "chrome_version": "81.0.4044", + "date": "2020-04-07", + "webkit_version": "81" + }, + { + "chrome_version": "80.0.3987", + "date": "2020-02-04", + "webkit_version": "80" + }, + { + "chrome_version": "79.0.3945", + "date": "2019-12-10", + "webkit_version": "79" + }, + { + "chrome_version": "78.0.3904", + "date": "2019-10-22", + "webkit_version": "78" + }, + { + "chrome_version": "77.0.3865", + "date": "2019-09-10", + "webkit_version": "77" + }, + { + "chrome_version": "76.0.3809", + "date": "2019-07-30", + "webkit_version": "76" + }, + { + "chrome_version": "75.0.3770", + "date": "2019-06-04", + "webkit_version": "75" + }, + { + "chrome_version": "74.0.3729", + "date": "2019-04-23", + "webkit_version": "74" + }, + { + "chrome_version": "73.0.3683", + "date": "2019-03-12", + "webkit_version": "73" + }, + { + "chrome_version": "72.0.3626", + "date": "2019-01-29", + "webkit_version": "72" + }, + { + "chrome_version": "71.0.3578", + "date": "2018-12-04", + "webkit_version": "71" + }, + { + "chrome_version": "70.0.3538", + "date": "2018-10-16", + "webkit_version": "70" + }, + { + "chrome_version": "69.0.3497", + "date": "2018-09-04", + "webkit_version": "69" + }, + { + "chrome_version": "68.0.3440", + "date": "2018-07-24", + "webkit_version": "68" + }, + { + "chrome_version": "67.0.3396", + "date": "2018-05-29", + "webkit_version": "67" + }, + { + "chrome_version": "66.0.3359", + "date": "2018-04-17", + "webkit_version": "66" + }, + { + "chrome_version": "65.0.3325", + "date": "2018-03-06", + "webkit_version": "65" + }, + { + "chrome_version": "64.0.3282", + "date": "2018-01-23", + "webkit_version": "64" + }, + { + "chrome_version": "63.0.3239", + "date": "2017-12-05", + "webkit_version": "63" + }, + { + "chrome_version": "62.0.3202", + "date": "2017-10-17", + "webkit_version": "62" + }, + { + "chrome_version": "61.0.3163", + "date": "2017-09-05", + "webkit_version": "61" + }, + { + "chrome_version": "60.0.3112", + "date": "2017-07-25", + "webkit_version": "60" + }, + { + "chrome_version": "59.0.3071", + "date": "2017-06-05", + "webkit_version": "59" + }, + { + "chrome_version": "58.0.3029", + "date": "2017-04-19", + "webkit_version": "58" + }, + { + "chrome_version": "57.0.2987", + "date": "2017-03-09", + "webkit_version": "57" + }, + { + "chrome_version": "56.0.2924", + "date": "2017-01-25", + "webkit_version": "56" + }, + { + "chrome_version": "55.0.2883", + "date": "2016-12-01", + "webkit_version": "55" + }, + { + "chrome_version": "54.0.2840", + "date": "2016-10-12", + "webkit_version": "54" + }, + { + "chrome_version": "53.0.2785", + "date": "2016-08-31", + "webkit_version": "53" + }, + { + "chrome_version": "52.0.2743", + "date": "2016-07-20", + "webkit_version": "52" + }, + { + "chrome_version": "51.0.2704", + "date": "2016-05-25", + "webkit_version": "51" + }, + { + "chrome_version": "50.0.2661", + "date": "2016-04-13", + "webkit_version": "50" + }, + { + "chrome_version": "49.0.2623", + "date": "2016-03-02", + "webkit_version": "49" + }, + { + "chrome_version": "48.0.2564", + "date": "2016-01-20", + "webkit_version": "48" + }, + { + "chrome_version": "47.0.2526", + "date": "2015-12-01", + "webkit_version": "47" + }, + { + "chrome_version": "46.0.2490", + "date": "2015-10-13", + "webkit_version": "46" + }, + { + "chrome_version": "45.0.2454", + "date": "2015-09-01", + "webkit_version": "45" + }, + { + "chrome_version": "44.0.2403", + "date": "2015-07-21", + "webkit_version": "44" + }, + { + "chrome_version": "43.0.2357", + "date": "2015-05-19", + "webkit_version": "43" + }, + { + "chrome_version": "42.0.2311", + "date": "2015-04-14", + "webkit_version": "42" + }, + { + "chrome_version": "41.0.2272", + "date": "2015-03-03", + "webkit_version": "41" + }, + { + "chrome_version": "40.0.2214", + "date": "2015-01-20", + "webkit_version": "40" + }, + { + "chrome_version": "39.0.2171", + "date": "2014-11-12", + "webkit_version": "39" + }, + { + "chrome_version": "38.0.2125", + "date": "2014-10-07", + "webkit_version": "38" + }, + { + "chrome_version": "37.0.2062", + "date": "2014-08-26", + "webkit_version": "37" + }, + { + "chrome_version": "36.0.1985", + "date": "2014-07-15", + "webkit_version": "36" + }, + { + "chrome_version": "35.0.1916", + "date": "2014-05-20", + "webkit_version": "35" + }, + { + "chrome_version": "34.0.1847", + "date": "2014-04-02", + "webkit_version": "34" + }, + { + "chrome_version": "33.0.1750", + "date": "2014-02-18", + "webkit_version": "33" + }, + { + "chrome_version": "32.0.1700", + "date": "2014-01-14", + "webkit_version": "32" + }, + { + "chrome_version": "31.0.1650", + "date": "2013-11-12", + "webkit_version": "31" + }, + { + "chrome_version": "30.0.1599", + "date": "2013-09-18", + "webkit_version": "30" + }, + { + "chrome_version": "29.0.1547", + "date": "2013-08-20", + "webkit_version": "29" + }, + { + "chrome_version": "27.0.1453", + "date": "2013-05-21", + "webkit_version": "537.36" + }, + { + "chrome_version": "26.0.1410", + "date": "2013-03-26", + "webkit_version": "537.31" + }, + { + "chrome_version": "25.0.1364", + "date": "2013-02-21", + "webkit_version": "537.22" + }, + { + "chrome_version": "24.0.1312", + "date": "2013-01-10", + "webkit_version": "537.17" + }, + { + "chrome_version": "23.0.1271", + "date": "2012-11-06", + "webkit_version": "537.11" + }, + { + "chrome_version": "22.0.1229", + "date": "2012-09-25", + "webkit_version": "537.4" + }, + { + "chrome_version": "21.0.1180", + "date": "2012-07-31", + "webkit_version": "537.1" + }, + { + "chrome_version": "20.0.1132", + "date": "2012-06-26", + "webkit_version": "536.10" + }, + { + "chrome_version": "19.0.1084", + "date": "2012-05-15", + "webkit_version": "536.5" + }, + { + "chrome_version": "18.0.1025", + "date": "2012-03-28", + "webkit_version": "535.19" + }, + { + "chrome_version": "17.0.963", + "date": "2012-02-08", + "webkit_version": "535.11" + }, + { + "chrome_version": "16.0.912", + "date": "2011-12-13", + "webkit_version": "535.7" + }, + { + "chrome_version": "15.0.874", + "date": "2011-10-25", + "webkit_version": "535.2" + }, + { + "chrome_version": "13.0.782", + "date": "2011-08-02", + "webkit_version": "535.1" + }, + { + "chrome_version": "12.0.742", + "date": "2011-06-07", + "webkit_version": "534.30" + }, + { + "chrome_version": "11.0.696", + "date": "2011-04-27", + "webkit_version": "534.24" + }, + { + "chrome_version": "10.0.648", + "date": "2011-03-08", + "webkit_version": "534.16" + }, + { + "chrome_version": "9.0.597", + "date": "2011-02-03", + "webkit_version": "534.13" + }, + { + "chrome_version": "8.0.552", + "date": "2010-12-02", + "webkit_version": "534.10" + }, + { + "chrome_version": "7.0.517", + "date": "2010-10-21", + "webkit_version": "534.7" + }, + { + "chrome_version": "6.0.472", + "date": "2010-09-02", + "webkit_version": "534.3" + }, + { + "chrome_version": "5.0.375", + "date": "2010-05-21", + "webkit_version": "533" + }, + { + "chrome_version": "4.0.249", + "date": "2010-01-25", + "webkit_version": "532.5" + }, + { + "chrome_version": "3.0.195", + "date": "2009-10-12", + "webkit_version": "532" + }, + { + "chrome_version": "2.0.172", + "date": "2009-05-24", + "webkit_version": "530" + }, + { + "chrome_version": "1.0.154", + "date": "2008-12-11", + "webkit_version": "528" + }, + { + "chrome_version": "0.4.154", + "date": "2008-11-24", + "webkit_version": "525" + } + ], + "common_user_agents": [ + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 Edg/87.0.664.66", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0", + "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.30", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.146 Safari/537.36", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.50", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15", + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", + "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.1 Safari/605.1.15", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", + "Mozilla/5.0 (Linux; Android) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36", + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.63" + ], + "desktop_platforms": [ + "Windows NT 10.0; WOW64", + "Linux; Android", + "Windows NT 10.0", + "Windows NT 6.1; WOW64", + "Windows NT 10.0; Win64; x64" + ], + "firefox_versions": [ + "109.0", + "108.0", + "107.0", + "106.0", + "105.0", + "104.0", + "103.0", + "102.0", + "101.0", + "100.0", + "99.0", + "98.0", + "97.0", + "96.0", + "95.0", + "94.0", + "93.0", + "92.0", + "91.0", + "90.0", + "89.0", + "88.0", + "87.0", + "86.0", + "85.0", + "84.0", + "83.0", + "82.0", + "81.0", + "80.0", + "79.0", + "78.0", + "77.0", + "76.0", + "75.0", + "74.0", + "73.0", + "72.0", + "71.0", + "70.0", + "69.0", + "68.0", + "67.0", + "66.0", + "65.0", + "64.0", + "63.0", + "62.0", + "61.0", + "60.0", + "59.0", + "58.0", + "57.0", + "56.0", + "55.0", + "54.0", + "53.0", + "52.0", + "51.0", + "50.0", + "49.0", + "48.0", + "47.0", + "46.0", + "45.0", + "44.0", + "43.0", + "42.0", + "41.0", + "40.0", + "39.0", + "38.0", + "37.0", + "36.0", + "35.0", + "34.0", + "33.1", + "33.0", + "32.0", + "31.0", + "30.0", + "29.0", + "28.0", + "27.0", + "26.0", *** 104 LINES SKIPPED ***