aboutsummaryrefslogtreecommitdiff
path: root/ci
AgeCommit message (Collapse)Author
2023-12-07Merge bitcoin/bitcoin#28622: build: use macOS 14 SDK (Xcode 15.0)fanquake
8ea45e626e5a0482ee11d4376f961d8126ce7c7b build: use macOS 14 SDK (Xcode 15.0) (fanquake) 51c97ffb6989a4cf56ad966d360a9fa0426e174c build: patch boost process for macOS 14 SDK (fanquake) 423949a13b39a193dff8b2758d23d6691d11dbc3 depends: add -platform_version to macOS build flags (fanquake) Pull request description: This fixes: https://github.com/bitcoin/bitcoin/pull/28349#issuecomment-1748515277 (cross-compiling with C++20 for macOS). See https://developer.apple.com/xcode/cpp/#c++20 for C++20 support in Apples libc++, some features landed with Xcode 14.3, although many more landed with Xcode 15.0. ACKs for top commit: hebasto: ACK 8ea45e626e5a0482ee11d4376f961d8126ce7c7b. TheCharlatan: ACK 8ea45e626e5a0482ee11d4376f961d8126ce7c7b Tree-SHA512: 274ce2c9b9f8e4d755c07b8d0d4897a7f92708ac64e6afb7a3f75bdb485e863fc7f40badf3a88b129ce36f6cca72f768dc2ed7fba2bdf0bb6da2bf0c8fedee10
2023-12-06Merge bitcoin/bitcoin#28992: ci: Use Ubuntu 24.04 Noble for asan,tsan,tidy,fuzzfanquake
fad2392c5861a88a87cb8a03d2fc9773e178feb8 ci: Use Ubuntu 24.04 Noble for asan (MarcoFalke) fa83b65ef8934b44fbac02da8dbc27fc0bc230e6 ci: Use Ubuntu 24.04 Noble for tsan,tidy,fuzz (MarcoFalke) Pull request description: 23.10 will be EOL mid next year, so a bump is needed before then for the `master` branch (and possibly the `26.x` branch). Doing the bump now is fine, because the clang version is pinned to 17 inside the CI tasks. So a default clang version change in the system image should not affect the tasks. Once clang-18 is available and the default in April next year (https://discourse.ubuntu.com/t/noble-numbat-release-schedule/35649#planned-and-potentially-disruptive-archive-wide-activities-2), the pinned version could be bumped (for CI tasks that require a pin, like tidy), or the pin can be removed (for CI tasks that usually do not require a pin, like fuzz or the sanitizers). ACKs for top commit: fanquake: ACK fad2392c5861a88a87cb8a03d2fc9773e178feb8 Tree-SHA512: c40aede4e2281a5d539d5f65d2c08a57bf92e4a00b4f45a4260b57b7443a63d1a0603115da4a3bbd100ac5f6ade3f2eda0916e4b565573741162a76294ec0ac5
2023-12-05build: use macOS 14 SDK (Xcode 15.0)fanquake
2023-12-04ci: Use Ubuntu 24.04 Noble for asanMarcoFalke
2023-12-04ci: Use Ubuntu 24.04 Noble for tsan,tidy,fuzzMarcoFalke
2023-11-30ci: remove libz-dev from macOS build depsfanquake
Remove no-longer used libz-dev (from DMG compression). Followup to #28432. Missed this in #28932.
2023-11-29ci: Reduce use of bash -cMarcoFalke
It is confusing to treat commands as a single string. This change is also required to support paths and strings with spaces in them in the future. This requires replacing TEST_RUNNER_ENV with a global export, because it no longer works. See: ```bash $ export ENV="A=1" && $ENV ls bash: A=1: command not found... ``` Or in the CI task: + DIR_UNIT_TEST_DATA=/ci_container_base/ci/scratch/qa-assets/unit_test_data/ + LD_LIBRARY_PATH=/ci_container_base/depends/i686-pc-linux-gnu/lib + BITCOIND=bitcoin-node make -j10 check VERBOSE=1 /ci_container_base/ci/test/03_test_script.sh: line 166: BITCOIND=bitcoin-node: command not found https://github.com/bitcoin/bitcoin/pull/28954/checks?check_run_id=19096858944 https://cirrus-ci.com/task/6718317604372480
2023-11-28ci: Rename test script to 03_test_script.shMarcoFalke
2023-11-23ci: remove python3-setuptools from mac build depsfanquake
2023-11-22Merge bitcoin/bitcoin#28862: lint: Report all lint errors instead of early exitfanquake
fa01f884d3ac128f09bfa57ac2648a19a19d854e ci: Add missing COPY for ./test/lint/test_runner (MarcoFalke) faff3e3b4604519375e122c103b156ec13eef80f lint: Report all lint errors instead of early exit (MarcoFalke) Pull request description: `all-lint.py` currently collects all failures. However, the `06_script.sh` does not, since July this year (https://github.com/bitcoin/bitcoin/pull/28103#discussion_r1268115806). Fix this by printing all failures before exiting. Can be tested by modifying (for example) two subtrees in the same commit and then running the linters. ACKs for top commit: kevkevinpal: ACK [fa01f88](https://github.com/bitcoin/bitcoin/pull/28862/commits/fa01f884d3ac128f09bfa57ac2648a19a19d854e) TheCharlatan: lgtm ACK fa01f884d3ac128f09bfa57ac2648a19a19d854e Tree-SHA512: c0f3110f2907d87e29c755e3b77a67dfae1f8a25833fe6ef8f2f2c58cfecf1aa46f1a20881576b62252b04930140a9e416c78b4edba0780d3c4fa7aaebabba81
2023-11-17depends: bump libmultiprocess to fix capnproto deprecation warningsRyan Ofsky
This incorporates PR https://github.com/chaincodelabs/libmultiprocess/pull/88 "Fix current deprecation warnings as of capnproto-1.0.1" and reverts the NO_WERROR CI workaround added in https://github.com/bitcoin/bitcoin/pull/28735
2023-11-16Merge bitcoin/bitcoin#28605: Fix typosfanquake
43de4d3630274e1287179c86896ed4c2d8b9eff4 doc: fix typos (Sjors Provoost) Pull request description: This PR fixes typos found by lint-spelling.py using codespell 2.2.6. Our CI linter job uses codespell 2.2.5 and found fewer typos that I did locally. In any case it's happy now. ACKs for top commit: pablomartin4btc: re ACK 43de4d3630274e1287179c86896ed4c2d8b9eff4 Tree-SHA512: c032fe86cb49c924a468385653b31f309a9db68c478d70335bba3e65a1ff3826abe80284fe00a090ab5a509e1edbf17e476f6922fb15d055e50f1103dad2ccb0
2023-11-13ci: Add missing COPY for ./test/lint/test_runnerMarcoFalke
2023-11-13lint: Report all lint errors instead of early exitMarcoFalke
2023-11-13Merge bitcoin/bitcoin#28076: util: Replace std::filesystem with util/fs.hfanquake
bbbbdb0cd57d75a06357d2811363d30a498f4499 ci: Add filesystem lint check (MarcoFalke) fada2f91108a56cc5c447bd6b6fac411e4d5cdca refactor: Replace <filesystem> with <util/fs.h> (MarcoFalke) Pull request description: Using `std::filesystem` is problematic: * There is a `fs` namespace wrapper for it. So having two ways to achieve the same is confusing. * Not using the `fs` wrapper is dangerous and buggy, because it disables known bugs by deleting problematic functions. Fix all issues by removing use of it and adding a linter to avoid using it again in the future. ACKs for top commit: TheCharlatan: ACK bbbbdb0cd57d75a06357d2811363d30a498f4499 fanquake: ACK bbbbdb0cd57d75a06357d2811363d30a498f4499 🦀 Tree-SHA512: 0e2d49742b08eb2635e6fce41485277cb9c40fe20b81017c391d3472a43787db1278a236825714ca1e41c9d2f59913865cfb0c649e3c8ab1fb598c849f80c660
2023-11-13Merge bitcoin/bitcoin#27935: fuzz: call lookup functions before calling `Ban`fanquake
fca0a8938e34cb4f6c400e1d1d0be02f027d80c5 ci: remove "--exclude banman" for fuzzing in mac (brunoerg) f9b286353f79cdb5e55e2ff4ca47d73e14f9da48 fuzz: call lookup functions before calling `Ban` (brunoerg) Pull request description: Fixes #27924 To not have any discrepancy, it's required to call lookup functions before calling `Ban`. If we don't do it, the assertion `assert(banmap == banmap_read);` may fail because `BanMapFromJson` will call `LookupSubNet` and cause the discrepancy between the banned and the loaded one. It happens especially in MacOS (#27924). Also, calling lookup functions before banning is what RPC `setban` does. ACKs for top commit: maflcko: lgtm ACK fca0a8938e34cb4f6c400e1d1d0be02f027d80c5 dergoegge: ACK fca0a8938e34cb4f6c400e1d1d0be02f027d80c5 Tree-SHA512: a3d635088a556df4507e65542157f10b41d4f87dce42927b58c3b812f262f4544b6b57f3384eef1097ffdd7c32b8dd1556aae201254960cbfbf48d45551200f7
2023-11-09ci: remove "--exclude banman" for fuzzing in macbrunoerg
2023-11-09Merge bitcoin/bitcoin#28826: ci: Switch IWYU to `clang_17` branchfanquake
9f208c017174132dbefbc917aa9824c279382597 ci: Switch IWYU to `clang_17` branch (Hennadii Stepanov) Pull request description: The IWYU version [0.21](https://github.com/include-what-you-use/include-what-you-use/releases/tag/0.21) has been tagged, and the `clang_17` branch is available now. ACKs for top commit: maflcko: lgtm ACK 9f208c017174132dbefbc917aa9824c279382597 Tree-SHA512: 8b8f8743d1c2719b6383b5a6a48356ac02a301d1ce9cee77f93cc04c12de22e9ac6b59e23550a589540e68292cfac0d85bacedc9ca26f6b589011d36ee1d38cf
2023-11-09ci: Switch IWYU to `clang_17` branchHennadii Stepanov
2023-11-07fuzz: explicitly specify llvm-symbolizer path in runnerfanquake
It's not completely clear to me why this needs to be explicitly specified in some environments, and not in others, while at the same time that `llvm-symbolizer` is already in PATH, but this has fixed the 2 issues outlined in #28147. Use `LLVM_SYMBOLIZER_PATH` as the env var, as that is somewhat also used inside LLVM, but not consistently, i.e it's checked for in the asan_symbolize script, but not in in the ubsan_symbolize script, or from in compiler-rt.
2023-11-07doc: fix typosSjors Provoost
As found by lint-spelling.py using codespell 2.2.6.
2023-11-03depends: Bump to capnproto-c++-1.0.1MarcoFalke
2023-10-30Bump g++ minimum supported version to 10MarcoFalke
Also, enable -Werror=maybe-uninitialized in ci/test/00_setup_env_native_qt5.sh
2023-10-24build: Bump minimum supported Clang to clang-13MarcoFalke
2023-10-24Merge bitcoin/bitcoin#28211: Bump python minimum supported version to 3.9fanquake
fa25e8b0a1610553014c786428f146ef9c694678 doc: Recommend lint image build on every call (MarcoFalke) faf70c1f330a92612cf381d32c791e9ba445d3f2 Bump python minimum version to 3.9 (MarcoFalke) fa8996b930886da712c09ffe4b58016b36c2ae5b ci: Bump i686_multiprocess.sh to latest Ubuntu LTS (MarcoFalke) Pull request description: All supported operating systems ship with python 3.9 (or later), so bumping the minimum should not cause any issues. A bump will allow new code to use new python 3.9 features. For reference: * https://packages.debian.org/bullseye/python3 * https://packages.ubuntu.com/focal/python3.9 * FreeBSD 12/13 also ships with 3.9 * CentOS-like 8/9 also ships with 3.9 (and 3.11) * OpenSuse Leap also ships with 3.9 (and 3.11) https://software.opensuse.org/package/python311-base This is for Bitcoin Core 27.0 in 2024 (next year), not the soon upcoming 26.0 next month. ACKs for top commit: Sjors: ACK fa25e8b0a1610553014c786428f146ef9c694678 jamesob: ACK fa25e8b0a1610553014c786428f146ef9c694678 ([`jamesob/ackr/28211.1.MarcoFalke.bump_python_minimum_supp`](https://github.com/jamesob/bitcoin/tree/ackr/28211.1.MarcoFalke.bump_python_minimum_supp)) Tree-SHA512: 86c9f6ac4b5ba94a62ee6a6062dd48a8295d8611a39cdb5829f4f0dbc77aaa1a51edccc7a99275bf699143ad3a6fe826de426d413e5a465e3b0e82b86d10c32e
2023-10-23ci: Add missing --external to podman image pruneMarcoFalke
2023-10-20Merge bitcoin/bitcoin#28643: ci: Add missing CI_RETRY_EXE before git clonefanquake
6889a807661cb570e1464ffdedb9ddb1ec970078 ci: Add missing CI_RETRY_EXE before git clone (MarcoFalke) b705bade44973e61655d5f847f49d97fb5bb8393 ci: Export `IN_GETOPT_BIN` on macOS (Hennadii Stepanov) 1c2132ddd97dbf8fc908b0d1113bbb70e1a6a64e Revert "ci: Upgrading pip version in macos environment" (Hennadii Stepanov) Pull request description: This PR is a resurrection of https://github.com/bitcoin/bitcoin/pull/28623: > This should fix [bitcoin/bitcoin/actions/runs/6457002476/job/17527598426#step:7:240](https://github.com/bitcoin/bitcoin/actions/runs/6457002476/job/17527598426#step:7:240): > > ``` > + git clone --depth=1 https://github.com/bitcoin-core/qa-assets /Users/runner/work/bitcoin/bitcoin/ci/scratch/qa-assets > Cloning into '/Users/runner/work/bitcoin/bitcoin/ci/scratch/qa-assets'... > error: RPC failed; curl 18 HTTP/2 stream 5 was reset > error: 54975 bytes of body are still expected > fetch-pack: unexpected disconnect while reading sideband packet > fatal: early EOF > fatal: fetch-pack: invalid index-pack output > Error: Process completed with exit code 128. > ``` ACKs for top commit: maflcko: lgtm ACK 6889a807661cb570e1464ffdedb9ddb1ec970078 Tree-SHA512: cd50102061a5c57fcf53ecbf552e7eae09995395e91651d00037e3f101c4906c0a994b2f6b1ccf984f2fc902ca59f0db66206ace56a2b6e2810dfa4167f3e115
2023-10-13ci: always prune all dangling bitcoin-ci-test imagesstickies-v
Since all bitcoin-ci-test images are now labeled, we can always prune all dangling images, regardless of whether we are in RESTART_CI_DOCKER_BEFORE_RUN. To be safe, still prune all images if RESTART_CI_DOCKER_BEFORE_RUN in case the filtering doesn't work, or if images were created on an earlier version that did not assign labels.
2023-10-13ci: Add missing CI_RETRY_EXE before git cloneMarcoFalke
2023-10-13ci: Export `IN_GETOPT_BIN` on macOSHennadii Stepanov
This variable is required for the `retry` script.
2023-10-13Revert "ci: Upgrading pip version in macos environment"Hennadii Stepanov
This reverts commit 057750c09d0a8331c33966d2cc2285ef82f08af8. It is not needed anymore in the GHA CI. This change will make the code much simpler in the following commit.
2023-10-13ci: add label to docker imagesstickies-v
This allows us or the user to perform batch operations on all images produced by the ci, e.g. to prune all dangling images, without affecting non-ci images.
2023-10-13Merge bitcoin/bitcoin#28547: ci: Work around podman stop intermittent failurefanquake
fa2c894cbb41a64371717139fb3c3ddfb9bb8b19 ci: move-only CI_CONTAINER_ID to 02_run_container.sh (MarcoFalke) fa695b4df069425414fd26b2ddc08d72a6b506f6 ci: Work around podman stop bug (MarcoFalke) fa09a031c1eb8abcb9a04cacdf5629f95ffc77f8 ci: Add set -ex to 02_run_container.sh (MarcoFalke) fac9abbf475a1de6f9f39ddede9a6a59bbd1cff4 ci: Rename 04_install to 02_run_container (MarcoFalke) Pull request description: Sometimes, it seems that `podman stop` does not work. Presumably, it falls back to `podman kill`, which is async. Try to work around this intermittent issue by using the `rm --force` over `stop`. Example failing log https://cirrus-ci.com/task/4549784611061760?logs=ci#L238: ``` Restart docker before run to stop and clear all containers started with --rm ++ podman container stop --all e4eca0766f87864d89fc230aa884a238c214cfbcd44cf76a4dbdb2a30c982009 ++ echo 'Prune all dangling images' Prune all dangling images ++ docker image prune --force Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. +++ docker run --cap-add LINUX_IMMUTABLE --rm --interactive --detach --tty --mount type=bind,src=/tmp/cirrus-build-1970593815,dst=/tmp/cirrus-build-1970593815,readonly --mount type=volume,src=ci_macos_cross_ccache,dst=/tmp/ccache_dir --mount type=volume,src=ci_macos_cross_depends,dst=/ci_container_base/depends --mount type=volume,src=ci_macos_cross_previous_releases,dst=/ci_container_base/prev_releases --env-file /tmp/env --name ci_macos_cross ci_macos_cross Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg. time="2023-09-27T20:55:39Z" level=warning msg="The input device is not a TTY. The --tty and --interactive flags might not work properly" Error: creating container storage: the container name "ci_macos_cross" is already in use by e4eca0766f87864d89fc230aa884a238c214cfbcd44cf76a4dbdb2a30c982009. You have to remove that container to be able to reuse that name: that name is already in use ACKs for top commit: hebasto: ACK fa2c894cbb41a64371717139fb3c3ddfb9bb8b19, I have reviewed the code and tested it locally. Tree-SHA512: 31fca340c6bedaadf4dd51fa745d9b3969042cebc0c7c904ef18af3f2f986039ec4354ccdff1422fbf77cf223e4423857368dce53cfa67ef15c76b78d007eace
2023-10-12ci: Bump asanMarcoFalke
2023-10-12Merge bitcoin/bitcoin#28633: ci: Install Qt's default Android API platformfanquake
78d3062b68988f5094c61a845be756788933c752 ci: Install Android API 31 platform as Qt expects (Hennadii Stepanov) Pull request description: When building the `qt` package, it expects that the default (in Qt's view) Android API platform is installed. During the recent Qt version [update](https://github.com/bitcoin/bitcoin/pull/28561), it has been changed: ```diff --- a/mkspecs/features/android/sdk.prf +++ b/mkspecs/features/android/sdk.prf @@ -1,6 +1,6 @@ API_VERSION_TO_USE = $$(ANDROID_API_VERSION) isEmpty(API_VERSION_TO_USE): API_VERSION_TO_USE = $$API_VERSION -isEmpty(API_VERSION_TO_USE): API_VERSION_TO_USE = android-28 +isEmpty(API_VERSION_TO_USE): API_VERSION_TO_USE = android-31 ANDROID_JAR_FILE = $$ANDROID_SDK_ROOT/platforms/$$API_VERSION_TO_USE/android.jar !exists($$ANDROID_JAR_FILE) { ``` This PR fixes the CI for the Android task and addresses https://github.com/bitcoin/bitcoin/pull/28561#issuecomment-1749180177. Qt [docs](https://doc.qt.io/qt-5/android.html) still claim that Android API Level 21 and up are supported, however, I did not test every possible configuration. NOTE: https://github.com/bitcoin/bitcoin/pull/28611 is still valid. ACKs for top commit: maflcko: lgtm ACK 78d3062b68988f5094c61a845be756788933c752 jarolrod: tACK 78d3062b68988f5094c61a845be756788933c752 Tree-SHA512: 781fba6d80aae7e6500854de14af0d30169c258e395b9e482a5430a7b4a2211a6181f8c9ee58543c896b431abf09e3e7c5573b9672ed128658f11f98a2006e7e
2023-10-10ci: Install Android API 31 platform as Qt expectsHennadii Stepanov
2023-10-10ci: use LLVM/Clang 17 in tidy jobfanquake
2023-10-10ci: use LLVM 17.0.2 in MSAN jobsfanquake
2023-10-09ci: move-only CI_CONTAINER_ID to 02_run_container.shMarcoFalke
This limits the scope of the CI_CONTAINER_ID symbol. Can be reviewed with --color-moved=dimmed-zebra
2023-10-09ci: Work around podman stop bugMarcoFalke
Force remove any containers, pontentially leaving dangling processes, which should be fine.
2023-10-09ci: Add set -ex to 02_run_container.shMarcoFalke
The same is done by the 06 script.
2023-10-09ci: Rename 04_install to 02_run_containerMarcoFalke
This reflects what the script does (docker run ...).
2023-10-05ci: Avoid cache depends/buildMarcoFalke
2023-10-03ci: Print Linux kernel infoMarcoFalke
2023-09-20Merge bitcoin/bitcoin#28504: ci: Use nproc over MAKEJOBS in 01_base_installfanquake
fa3b5e5e57cd4649d577e06a3aca798b55a75fd5 ci: Use nproc over MAKEJOBS in 01_base_install (MarcoFalke) Pull request description: Currently `$MAKEJOBS` is the default value in `01_base_install.sh` when building the container image. This problem can't be fixed (see below), so just use `nproc` for now. Other solutions would be bad: * Passing in the `MAKEJOBS` as a dockerfile env would create a new image if the number of tasks are changed, seems verbose and confusing. * Leaving `master` as-is would leave CPUs unused if there are more than `4`. ACKs for top commit: fanquake: ACK - I think this is fine as-is, it's an improvement over the current state fa3b5e5e57cd4649d577e06a3aca798b55a75fd5 Tree-SHA512: 15014eb7b548945737b0fed5cd46f0cd4b72b1d54d044f60fce628f914053a2de6518878428a54822d236d08d6f257d8c464d3fb589400f4be56022d2ec8676d
2023-09-20Merge bitcoin/bitcoin#28432: build: Produce a `.zip` for macOS distributionfanquake
b5790c35f7e1d48c79b83bded36f3f72c18c9fc1 build: remove dmg dependencies (fanquake) 33ae0bd1e4756ca0f180ac4b3c32c9eb83b88cfd macdeploy: remove DMG generation from deploy script (fanquake) a128111c29ba0c31763ccbcd316268bfa9c029cd build: produce a .zip for macOS distribution (Hennadii Stepanov) c38561d6b1de954b712a92cb8a198ed42d73caea build: add -zip option to macdeployqtplus (fanquake) Pull request description: It is https://github.com/bitcoin/bitcoin/pull/27099 revived with addressed [comments](https://github.com/bitcoin/bitcoin/pull/27099#issuecomment-1708705686). From https://github.com/bitcoin/bitcoin/pull/27099#issue-1584429885: > Reviving the discussion around using a `.zip` for the distributed macOS binaries, as opposed to a `.dmg`. > > Given we only had a single report of the "no finder window" issue (#26176), I wonder if that means macOS users were able to figure it out, they gave up/didn't report, or, we just have very few macOS users. > > Related to #18128. That's how it looks on macOS: ![image](https://github.com/bitcoin/bitcoin/assets/32963518/baa637bb-256b-4b24-8645-8c2754c2ae64) ACKs for top commit: Sjors: tACK b5790c35f7e1d48c79b83bded36f3f72c18c9fc1 jarolrod: ACK b5790c35f7e1d48c79b83bded36f3f72c18c9fc1 TheCharlatan: utACK b5790c35f7e1d48c79b83bded36f3f72c18c9fc1 Tree-SHA512: 6e9cb3ab0f60f8a92bfec50577e8d096c5b23ec09ebbb334826415609140ddc96d470aea37379495c1c6bb1beec0d306b09460f62e1543bb0f4396c10a1dfbe2
2023-09-19ci: Use nproc over MAKEJOBS in 01_base_installMarcoFalke
2023-09-15build: remove dmg dependenciesfanquake
2023-09-15build: produce a .zip for macOS distributionHennadii Stepanov
Instead of a .dmg. Co-authored-by: fanquake <fanquake@gmail.com>
2023-09-15Merge bitcoin/bitcoin#28476: ci: LLVM 17 for MSAN jobsfanquake
a241d6069cf0542acdd8ec6be63724da19f10720 ci: use LLVM 17.0.0 in MSAN jobs (fanquake) Pull request description: See https://libcxx.llvm.org/Hardening.html as well as https://discourse.llvm.org/t/rfc-removing-the-legacy-debug-mode-from-libc/71026. ACKs for top commit: MarcoFalke: review ACK a241d6069cf0542acdd8ec6be63724da19f10720 Tree-SHA512: c374dabf307fe762be0da96f63695a150f6018c1468fe9414fad23f74f5818bbf7a5a699e109084e31467482a900cfebf1d5835821e4da94aa310b2c9570749c