diff --git a/.gitattributes b/.gitattributes index 5c03f5334..4f83880dd 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,6 +8,7 @@ /.github/workflows/alert-open-prs.yml linguist-generated /.github/workflows/auto-close-community-issues.yml linguist-generated /.github/workflows/build.yml linguist-generated +/.github/workflows/force-release.yml linguist-generated /.github/workflows/lock.yml linguist-generated /.github/workflows/next-cdktf-version-pr.yml linguist-generated /.github/workflows/provider-upgrade.yml linguist-generated diff --git a/.github/workflows/force-release.yml b/.github/workflows/force-release.yml new file mode 100644 index 000000000..2aa0ca8fd --- /dev/null +++ b/.github/workflows/force-release.yml @@ -0,0 +1,105 @@ +# ~~ Generated by projen. To modify, edit .projenrc.js and run "npx projen". + +name: force-release +on: + workflow_dispatch: + inputs: + sha: + name: sha + type: string + required: true + description: The sha of the commit to release + publish_to_go: + name: publish_to_go + type: boolean + required: true + description: Whether to publish to Go Repository +jobs: + force-release: + runs-on: + - custom + - linux + - custom-linux-medium + permissions: + contents: write + env: + CI: "true" + steps: + - name: Checkout + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab + with: + ref: ${{ inputs.sha }} + fetch-depth: 0 + - name: Set git config safe.directory + run: git config --global --add safe.directory $(pwd) + - name: Set git identity + run: |- + git config user.name "github-actions" + git config user.email "github-actions@github.com" + - name: Setup Node.js + uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c + with: + node-version: 16.14.0 + - name: Install dependencies + run: yarn install --check-files --frozen-lockfile + - name: force-release + run: npx projen force-release + - name: Backup artifact permissions + run: cd dist && getfacl -R . > permissions-backup.acl + continue-on-error: true + - name: Upload artifact + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + with: + name: build-artifact + path: dist + force_release_golang: + name: Publish to Github Go Repository + needs: force-release + runs-on: + - custom + - linux + - custom-linux-medium + permissions: + contents: read + env: + CI: "true" + steps: + - name: Setup Node.js + uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c + with: + node-version: 16.14.0 + - name: Setup Go + uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 + with: + go-version: ^1.16.0 + - name: Download build artifacts + uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a + with: + name: build-artifact + path: dist + - name: Restore build artifact permissions + run: cd dist && setfacl --restore=permissions-backup.acl + continue-on-error: true + - name: Prepare Repository + run: mv dist .repo + - name: Install Dependencies + run: cd .repo && yarn install --check-files --frozen-lockfile + - name: Create Artifact + run: cd .repo && npx projen package:go + - name: Setup Copywrite tool + uses: hashicorp/setup-copywrite@867a1a2a064a0626db322392806428f7dc59cb3e + - name: Copy copywrite hcl file + run: cp .repo/.copywrite.hcl .repo/dist/go/.copywrite.hcl + - name: Add headers using Copywrite tool + run: cd .repo/dist/go && copywrite headers + - name: Remove copywrite hcl file + run: rm -f .repo/dist/go/.copywrite.hcl + - name: Collect go Artifact + run: mv .repo/dist dist + - name: Release + if: ${{ inputs.publish_to_go }} + env: + GIT_USER_NAME: CDK for Terraform Team + GIT_USER_EMAIL: github-team-tf-cdk@hashicorp.com + GITHUB_TOKEN: ${{ secrets.GO_GITHUB_TOKEN }} + run: npx -p publib@latest publib-golang diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 03eacded4..afb4d4f89 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -342,7 +342,7 @@ jobs: - name: Setup Copywrite tool uses: hashicorp/setup-copywrite@867a1a2a064a0626db322392806428f7dc59cb3e - name: Copy copywrite hcl file - run: cp .copywrite.hcl .repo/dist/go/.copywrite.hcl + run: cp .repo/.copywrite.hcl .repo/dist/go/.copywrite.hcl - name: Add headers using Copywrite tool run: cd .repo/dist/go && copywrite headers - name: Remove copywrite hcl file diff --git a/.gitignore b/.gitignore index 20cc37fe0..c35101729 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ package-lock.json !/.github/workflows/lock.yml !/.github/workflows/next-cdktf-version-pr.yml !/.github/workflows/alert-open-prs.yml +!/.github/workflows/force-release.yml !/.github/CODEOWNERS !/scripts/should-release.js API.md diff --git a/.projen/files.json b/.projen/files.json index e0f868e4f..1715886f8 100644 --- a/.projen/files.json +++ b/.projen/files.json @@ -8,6 +8,7 @@ ".github/workflows/alert-open-prs.yml", ".github/workflows/auto-close-community-issues.yml", ".github/workflows/build.yml", + ".github/workflows/force-release.yml", ".github/workflows/lock.yml", ".github/workflows/next-cdktf-version-pr.yml", ".github/workflows/provider-upgrade.yml", diff --git a/.projen/tasks.json b/.projen/tasks.json index 9afecef60..229b33758 100644 --- a/.projen/tasks.json +++ b/.projen/tasks.json @@ -143,6 +143,31 @@ } ] }, + "force-release": { + "name": "force-release", + "description": "Force a release", + "env": { + "RELEASE": "true", + "MIN_MAJOR": "1" + }, + "steps": [ + { + "exec": "rm -fr dist" + }, + { + "spawn": "bump" + }, + { + "spawn": "build" + }, + { + "spawn": "unbump" + }, + { + "exec": "git diff --ignore-space-at-eol --exit-code" + } + ] + }, "install": { "name": "install", "description": "Install project dependencies and update lockfile (non-frozen)", diff --git a/package.json b/package.json index 77aa5f946..4799d553c 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "docgen": "npx projen docgen", "eject": "npx projen eject", "fetch": "npx projen fetch", + "force-release": "npx projen force-release", "package": "npx projen package", "package-all": "npx projen package-all", "package:dotnet": "npx projen package:dotnet", @@ -52,13 +53,13 @@ "constructs": "^10.0.0", "dot-prop": "^5.2.0", "jsii": "^5.0.1", - "jsii-diff": "^1.87.0", + "jsii-diff": "^1.88.0", "jsii-docgen": "~9.0.0", - "jsii-pacmak": "^1.87.0", + "jsii-pacmak": "^1.88.0", "jsii-rosetta": "~5.1.2", "node-fetch": "cjs", "npm-check-updates": "^16", - "projen": "^0.72.23", + "projen": "^0.72.24", "standard-version": "^9", "typescript": "^3.9.10" }, diff --git a/yarn.lock b/yarn.lock index fd90574df..3042b2a8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -197,9 +197,9 @@ jsii-srcmak "^0.1.951" "@cdktf/provider-project@^0.2.95": - version "0.2.122" - resolved "https://registry.yarnpkg.com/@cdktf/provider-project/-/provider-project-0.2.122.tgz#963a3ee6f35cd3f2ffed619afd6a358669792363" - integrity sha512-qFxAeFhd1Y3COo4lDjV5ized0ZUif908uPhForEwAprqX0MJYSWZoJzxkxDPFSXhott9vksMSEkGjRi3abrY0g== + version "0.2.126" + resolved "https://registry.yarnpkg.com/@cdktf/provider-project/-/provider-project-0.2.126.tgz#e9498bb8d1f94abe8b3b70fcc23710e12b5d9314" + integrity sha512-hvCRwrCJq+IwyomIliNYsRHP/nEYIYr8nLgAzm8Eam47HBOS6kwZHu2Wl6hBYh3zqy9A77v6/eYRAvsKxhG4tA== dependencies: change-case "^4.1.2" fs-extra "^10.1.0" @@ -425,10 +425,18 @@ chalk "^4.1.2" semver "^7.5.4" -"@jsii/spec@1.87.0", "@jsii/spec@^1.85.0", "@jsii/spec@^1.86.1", "@jsii/spec@^1.87.0": - version "1.87.0" - resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.87.0.tgz#99b9dd12ed92120e79e645538620db0526a7ad7b" - integrity sha512-fhTT3IYmjyRKvUUWffBIuGDVVfyKC+QfE1cMyExSHl7l6wk6unrxS8qsU23kaJ5bNQAnlc2+CE1HteY2SLbepg== +"@jsii/check-node@1.88.0": + version "1.88.0" + resolved "https://registry.yarnpkg.com/@jsii/check-node/-/check-node-1.88.0.tgz#fa20e012230c692ad36976cde29301be1ed28c67" + integrity sha512-AveFyqkJIb8qZvGk5nZal/8mEJB6lWhwqvAQLodHmqE3WzpmZD5+h+aspBVt0El5cEFRJ1k1mrQqhAnJCVpvxg== + dependencies: + chalk "^4.1.2" + semver "^7.5.4" + +"@jsii/spec@1.88.0", "@jsii/spec@^1.87.0", "@jsii/spec@^1.88.0": + version "1.88.0" + resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.88.0.tgz#46216d3ca93872b4d878bb81f0cc7b28dc621c28" + integrity sha512-Q6xirxPM06TRW0GcsHa+tzPZLwe9I+mFYx5BaNMimcv21u6bQnxfynZMgNhHqvLYCmP37HWg0SboUYTa5JROzw== dependencies: ajv "^8.12.0" @@ -439,6 +447,13 @@ dependencies: ajv "^8.12.0" +"@jsii/spec@^1.85.0", "@jsii/spec@^1.86.1": + version "1.87.0" + resolved "https://registry.yarnpkg.com/@jsii/spec/-/spec-1.87.0.tgz#99b9dd12ed92120e79e645538620db0526a7ad7b" + integrity sha512-fhTT3IYmjyRKvUUWffBIuGDVVfyKC+QfE1cMyExSHl7l6wk6unrxS8qsU23kaJ5bNQAnlc2+CE1HteY2SLbepg== + dependencies: + ajv "^8.12.0" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1389,10 +1404,10 @@ code-excerpt@^3.0.0: dependencies: convert-to-spaces "^1.0.1" -codemaker@^1.86.1, codemaker@^1.87.0: - version "1.87.0" - resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.87.0.tgz#87af3e2e338a14fcaf192f9e60dce1d6ff61414d" - integrity sha512-PxEtigxOiIWWQV95OQK18xYMSPpqQDj/z1jSlouNp+4y2muygO+fTc19kf9Z950ryprHCoasnO62dmyhMZvluQ== +codemaker@^1.86.1, codemaker@^1.87.0, codemaker@^1.88.0: + version "1.88.0" + resolved "https://registry.yarnpkg.com/codemaker/-/codemaker-1.88.0.tgz#ef8f1a6b428ba36339147bfe7f3f4a65b1c7a562" + integrity sha512-/7+1mPQCEFmBm9zhf5blMiqirCcXNwulb8dozu2LVsDLgnafPt1h2eg/OwvyrqSMWUnsIFetAssKVP2gE66MPQ== dependencies: camelcase "^6.3.0" decamelize "^5.0.1" @@ -3068,15 +3083,15 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsii-diff@^1.87.0: - version "1.87.0" - resolved "https://registry.yarnpkg.com/jsii-diff/-/jsii-diff-1.87.0.tgz#bf0f9949e4b3fd4370d3a0f575c07447c490e8ef" - integrity sha512-6wqd3PVyqeXuFhFMeh20qNZ2sw4hNe1OyzlT0ZbPF1ALhycxHZ5e1voPqjvwIACnO6rRREffGWHdBVlNKschzw== +jsii-diff@^1.88.0: + version "1.88.0" + resolved "https://registry.yarnpkg.com/jsii-diff/-/jsii-diff-1.88.0.tgz#965668341405134c37e7e6fba232614123cae2b5" + integrity sha512-5Wjig/1GvZckAS1G8f+kztNDZVP4TFqUu/NsSiIb4hHHM+MvUy7O9ihVuWDVE+QodSTxPXy3RMKp+ILsiRcuqg== dependencies: - "@jsii/check-node" "1.87.0" - "@jsii/spec" "^1.87.0" + "@jsii/check-node" "1.88.0" + "@jsii/spec" "^1.88.0" fs-extra "^10.1.0" - jsii-reflect "^1.87.0" + jsii-reflect "^1.88.0" log4js "^6.9.1" yargs "^16.2.0" @@ -3094,20 +3109,20 @@ jsii-docgen@~9.0.0: semver "^7.5.3" yargs "^16.2.0" -jsii-pacmak@^1.87.0: - version "1.87.0" - resolved "https://registry.yarnpkg.com/jsii-pacmak/-/jsii-pacmak-1.87.0.tgz#dfc0cbc2b926af32761275493d5fb6b49a8f906b" - integrity sha512-7J+TArdoIJYePI326hEcsRiA5j3xsNhoxiDcpynkzHIt0Mk00agIcjYjbJV/4oWokGMBH7SgWK/gX7NSU/ywJA== +jsii-pacmak@^1.87.0, jsii-pacmak@^1.88.0: + version "1.88.0" + resolved "https://registry.yarnpkg.com/jsii-pacmak/-/jsii-pacmak-1.88.0.tgz#ca6f604769db4e902177653cda103e60b4837f91" + integrity sha512-nanfSaYpe2lgOzvosup4iObQ76tCs47+rERUUGFyrCq7sruQ7VMYgRdAuGWh8PqF9fGNwq6Do1eR+EMC+d4WUg== dependencies: - "@jsii/check-node" "1.87.0" - "@jsii/spec" "^1.87.0" + "@jsii/check-node" "1.88.0" + "@jsii/spec" "^1.88.0" clone "^2.1.2" - codemaker "^1.87.0" + codemaker "^1.88.0" commonmark "^0.30.0" escape-string-regexp "^4.0.0" fs-extra "^10.1.0" - jsii-reflect "^1.87.0" - jsii-rosetta "^1.87.0" + jsii-reflect "^1.88.0" + jsii-rosetta "^1.88.0" semver "^7.5.4" spdx-license-list "^6.6.0" xmlbuilder "^15.1.1" @@ -3125,34 +3140,34 @@ jsii-reflect@^1.84.0: oo-ascii-tree "^1.86.1" yargs "^16.2.0" -jsii-reflect@^1.87.0: - version "1.87.0" - resolved "https://registry.yarnpkg.com/jsii-reflect/-/jsii-reflect-1.87.0.tgz#4302bdf1662ca09baa72fcf9216b987d1392e855" - integrity sha512-Gk+Kat0O/+OFw1Q85HEq1Beoc6o4lqWNp7v7wZKwLLs4JFrBGOu1cIurAwfk6sFaWD2R7q85jZKs3tEbPzZlrA== +jsii-reflect@^1.88.0: + version "1.88.0" + resolved "https://registry.yarnpkg.com/jsii-reflect/-/jsii-reflect-1.88.0.tgz#d7f020db2621e8b672c082eea752c47153da5a63" + integrity sha512-YYZTEQpayvwMDtRMCjgNraTFUqsj4/KEOE8ChvDCkpxv6aH89vpZSsAJM5ymhNLDHj4XZ2OW3XE0sNOz31NbvA== dependencies: - "@jsii/check-node" "1.87.0" - "@jsii/spec" "^1.87.0" + "@jsii/check-node" "1.88.0" + "@jsii/spec" "^1.88.0" chalk "^4" fs-extra "^10.1.0" - oo-ascii-tree "^1.87.0" + oo-ascii-tree "^1.88.0" yargs "^16.2.0" -jsii-rosetta@^1.87.0: - version "1.87.0" - resolved "https://registry.yarnpkg.com/jsii-rosetta/-/jsii-rosetta-1.87.0.tgz#56662445fed810c8b54324cb7387dfdf614aca49" - integrity sha512-ry+HWSXwoMc0Y/zyYDKu8krBsdY6sHfYS+h/LqLbMiPmZZBx+m8j2/OgyAW0JVCoanmhoof+3je1xSTXPqeJfA== +jsii-rosetta@^1.88.0: + version "1.88.0" + resolved "https://registry.yarnpkg.com/jsii-rosetta/-/jsii-rosetta-1.88.0.tgz#1189fb2aa538082d3099b104e2d51daf2cf485e7" + integrity sha512-6xRRkwWUKFqDTnjgCXkB6v9dxA51KUD4Cd7InLB4qirMBDuMtyYhYVNc1yJbHPYs9gkN5/ao0dFk+1CQxt7T7g== dependencies: - "@jsii/check-node" "1.87.0" - "@jsii/spec" "1.87.0" + "@jsii/check-node" "1.88.0" + "@jsii/spec" "1.88.0" "@xmldom/xmldom" "^0.8.10" commonmark "^0.30.0" fast-glob "^3.3.1" - jsii "1.87.0" + jsii "1.88.0" semver "^7.5.4" semver-intersect "^1.4.0" stream-json "^1.8.0" typescript "~3.9.10" - workerpool "^6.4.0" + workerpool "^6.4.2" yargs "^16.2.0" jsii-rosetta@^5.1.9: @@ -3204,13 +3219,13 @@ jsii-srcmak@^0.1.951: ncp "^2.0.0" yargs "^15.4.1" -jsii@1.87.0: - version "1.87.0" - resolved "https://registry.yarnpkg.com/jsii/-/jsii-1.87.0.tgz#a57c6b286a82ca032bf4d3ff48d92c0161a8666c" - integrity sha512-yMb64s0L4Teu8wbuL7ixhLlqcbiLaPUHUiLCloSvfGfbFikayPQOTGUkIri3tZnAE26XskmgbZsStlc2tRfjBg== +jsii@1.88.0: + version "1.88.0" + resolved "https://registry.yarnpkg.com/jsii/-/jsii-1.88.0.tgz#f8b56420d47c6230dafb5d78a601bd5696e4f69c" + integrity sha512-WKfwHbcEI/j5OYDPexvkH8KKDcTZR7tIBFNTxu8h1Nh3G8xFT4hh3pObUUSMRCa6rsSF9EHGjS+AKC+TfpFGrQ== dependencies: - "@jsii/check-node" "1.87.0" - "@jsii/spec" "^1.87.0" + "@jsii/check-node" "1.88.0" + "@jsii/spec" "^1.88.0" case "^1.6.3" chalk "^4" fast-deep-equal "^3.1.3" @@ -4006,11 +4021,16 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -oo-ascii-tree@^1.86.1, oo-ascii-tree@^1.87.0: +oo-ascii-tree@^1.86.1: version "1.87.0" resolved "https://registry.yarnpkg.com/oo-ascii-tree/-/oo-ascii-tree-1.87.0.tgz#77223b6d0c3382a30500b8738d7a602af1eed5ff" integrity sha512-AvQw3bQAiZrx1h4+LnK6s/AxhHv3cs/j4f4T+r+JOO++Qx3i0ZIf8h9/aG/O4byGQPWRKKwpjvV+74cxbJv+0g== +oo-ascii-tree@^1.88.0: + version "1.88.0" + resolved "https://registry.yarnpkg.com/oo-ascii-tree/-/oo-ascii-tree-1.88.0.tgz#3ed84cdcaab9e5b7970fcfc2d086c2c069db65b7" + integrity sha512-A7m3z7XlUD3DnXSYxWmAdKQTIY6+1JzWS0lhaqgPGhj6g7a/odCsV1ctaRnjJljCB3zQBrbp2QHdYTUsD9AXcQ== + open@^7.4.2: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" @@ -4308,10 +4328,10 @@ progress@^2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -projen@^0.72.23: - version "0.72.23" - resolved "https://registry.yarnpkg.com/projen/-/projen-0.72.23.tgz#44aab0144250a8e815e088a2bce28d3ea9e08f4a" - integrity sha512-1cA9rQaMEnNPOFlzvuGFoVEPd+22eI/TU9hE2MLV9mXGY1X5FDpcgpsVYHP1DM/6e/PRZKks8MyVm1YGelrvKQ== +projen@^0.72.24: + version "0.72.24" + resolved "https://registry.yarnpkg.com/projen/-/projen-0.72.24.tgz#c628538dd55fdd3264be1f3dd6f4ceb8e59be60f" + integrity sha512-q6d6wSxuIqNQVEcVYebPLSqcXcCoQ3fh7L+i/INQeS+gBSO/Z8xy+oNq1tfw7HZy2hIyXGwFTKoJS5SIIDypwA== dependencies: "@iarna/toml" "^2.2.5" case "^1.6.3" @@ -5287,9 +5307,9 @@ typescript@^3.9.10, typescript@~3.9.10: integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== typescript@next: - version "5.3.0-dev.20230824" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.0-dev.20230824.tgz#14fc65c14c588363c0d290dbbbda8ae0968fd95b" - integrity sha512-iiUWxGibzrRHEBLDJfVymsvpPKflf3cMrw0oQTMQoguFS2ikNlVlfQWAsYeHqGpRQc77nSQkzsE9rAHNHqvIjw== + version "5.3.0-dev.20230825" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.0-dev.20230825.tgz#14c56a699ea2d417fb8e28df8b2698b691ce17b5" + integrity sha512-LbxxB17+nHqe7e6oA/240Ha1kOhtrgmLz98Dq3Nbm1sEdkqOnsv3j9XbI0tqd+RWtC/5pgnljHmZRHk/qUeKpQ== typescript@~5.1.6: version "5.1.6" @@ -5493,7 +5513,7 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -workerpool@^6.4.0, workerpool@^6.4.1: +workerpool@^6.4.0, workerpool@^6.4.1, workerpool@^6.4.2: version "6.4.2" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.4.2.tgz#5d086f6fef89adbc4300ca24fcafb7082330e960" integrity sha512-MrDWwemtC4xNV22kbbZDQQQmxNX+yLm790sgYl2wVD3CWnK7LJY1youI/11wHorAjHjK+GEjUxUh74XoPU71uQ==