diff --git a/.github/workflows/definition_update.yml b/.github/workflows/definition_update.yml new file mode 100644 index 0000000000..5626859d9f --- /dev/null +++ b/.github/workflows/definition_update.yml @@ -0,0 +1,21 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: Send update event + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + steps: + - name: Dispatch update to repos + run: | + curl 'https://api.github.com/repos/the-via/website/dispatches' --request POST -H 'Accept: application/vnd.github.everest-preview+json' -H 'Content-Type: application/javascript' -H 'Authorization: Bearer ${{ secrets.PAT }}' --data-raw '{"event_type": "definition_update", "client_payload": {}}' + curl 'https://api.github.com/repos/the-via/app/dispatches' --request POST -H 'Accept: application/vnd.github.everest-preview+json' -H 'Content-Type: application/javascript' -H 'Authorization: Bearer ${{ secrets.PAT }}' --data-raw '{"event_type": "definition_update", "client_payload": {}}' + diff --git a/package.json b/package.json index cf98333c82..d5aba4d907 100755 --- a/package.json +++ b/package.json @@ -27,13 +27,11 @@ }, "homepage": "https://github.com/the-via/keyboards#readme", "devDependencies": { - "@types/node-static": "^0.7.7", - "node-static": "^0.7.11", "@types/fs-extra": "^9.0.9", + "@types/node-static": "^0.7.7", "microbundle": "^0.11.0", - "prettier": "^2.2.1", - "ts-node": "^8.4.1", - "typescript": "^3.6.4" + "node-static": "^0.7.11", + "prettier": "^2.2.1" }, "dependencies": { "@types/bluebird": "^3.5.28", @@ -45,7 +43,9 @@ "fs-extra": "^9.1.0", "json-stringify-pretty-compact": "^2.0.0", "rimraf": "^3.0.0", + "ts-node": "10.4.0", "ts-node-dev": "^1.0.0-pre.43", + "typescript": "^3.6.4", "typescript-json-schema": "^0.40.0", "via-reader": "git://github.com/the-via/reader.git#f2fbf9cf87adfec271d1953e43ab9c037776535f", "yarn": "^1.22.0" diff --git a/src/mode/m80h/m80h.json b/src/mode/m80h/m80v1h.json similarity index 100% rename from src/mode/m80h/m80h.json rename to src/mode/m80h/m80v1h.json diff --git a/src/mode/m80h/m80v2h.json b/src/mode/m80h/m80v2h.json new file mode 100644 index 0000000000..1d548b78f7 --- /dev/null +++ b/src/mode/m80h/m80v2h.json @@ -0,0 +1,240 @@ +{ + "name": "M80V2 H", + "vendorId": "0x00DE", + "productId": "0x0083", + "lighting": "none", + "matrix": {"rows": 6, "cols": 17}, + "layouts": { + "labels": ["7U bottom row"], + "keymap":[ + [ + { + "c": "#777777" + }, + "0,0", + { + "x": 1, + "c": "#cccccc" + }, + "0,1", + "0,2", + "0,3", + "0,4", + { + "x": 0.5, + "c": "#aaaaaa" + }, + "0,5", + "0,6", + "0,7", + "0,8", + { + "x": 0.5, + "c": "#cccccc" + }, + "0,9", + "0,10", + "0,11", + "0,12", + { + "x": 0.25 + }, + "0,14", + "0,15", + "0,16" + ], + [ + { + "y": 0.5 + }, + "1,0", + "1,1", + "1,2", + "1,3", + "1,4", + "1,5", + "1,6", + "1,7", + "1,8", + "1,9", + "1,10", + "1,11", + "1,12", + { + "c": "#aaaaaa", + "w": 2 + }, + "0,13", + { + "x": 0.25, + "c": "#cccccc" + }, + "1,14", + "1,15", + "1,16" + ], + [ + { + "c": "#aaaaaa", + "w": 1.5 + }, + "2,0", + { + "c": "#cccccc" + }, + "2,1", + "2,2", + "2,3", + "2,4", + "2,5", + "2,6", + "2,7", + "2,8", + "2,9", + "2,10", + "2,11", + "2,12", + { + "c": "#aaaaaa", + "w": 1.5 + }, + "2,13", + { + "x": 0.25, + "c": "#cccccc" + }, + "2,14", + "2,15", + "2,16" + ], + [ + { + "c": "#aaaaaa", + "w": 1.75 + }, + "3,0", + { + "c": "#cccccc" + }, + "3,1", + "3,2", + "3,3", + "3,4", + "3,5", + "3,6", + "3,7", + "3,8", + "3,9", + "3,10", + "3,11", + { + "c": "#777777", + "w": 2.25 + }, + "3,13" + ], + [ + { + "c": "#aaaaaa", + "w": 2.25 + }, + "4,0", + { + "c": "#cccccc" + }, + "4,2", + "4,3", + "4,4", + "4,5", + "4,6", + "4,7", + "4,8", + "4,9", + "4,10", + "4,11", + { + "c": "#aaaaaa", + "w": 2.75 + }, + "4,12", + { + "x": 1.25, + "c": "#777777" + }, + "4,15" + ], + [ + { + "c": "#aaaaaa", + "w": 1.25 + }, + "5,0\n\n\n0,0", + { + "w": 1.25 + }, + "5,1\n\n\n0,0", + { + "w": 1.25 + }, + "5,2\n\n\n0,0", + { + "c": "#cccccc", + "w": 6.25 + }, + "5,6\n\n\n0,0", + { + "c": "#aaaaaa", + "w": 1.25 + }, + "5,10\n\n\n0,0", + { + "w": 1.25 + }, + "5,11\n\n\n0,0", + { + "w": 1.25 + }, + "5,12\n\n\n0,0", + { + "w": 1.25 + }, + "5,13\n\n\n0,0", + { + "x": 0.25, + "c": "#777777" + }, + "5,14", + "5,15", + "5,16" + ], + [ + { + "y": 0.25, + "c": "#aaaaaa", + "w": 1.5 + }, + "5,0\n\n\n0,1", + "5,1\n\n\n0,1", + { + "c": "#cccccc", + "w": 1.5 + }, + "5,2\n\n\n0,1", + { + "w": 7 + }, + "5,6\n\n\n0,1", + { + "c": "#aaaaaa", + "w": 1.5 + }, + "5,11\n\n\n0,1", + "5,12\n\n\n0,1", + { + "w": 1.5 + }, + "5,13\n\n\n0,1" + ] +] +} +} diff --git a/src/mode/m80s/m80s.json b/src/mode/m80s/m80v1s.json similarity index 100% rename from src/mode/m80s/m80s.json rename to src/mode/m80s/m80v1s.json diff --git a/src/mode/m80s/m80v2s.json b/src/mode/m80s/m80v2s.json new file mode 100644 index 0000000000..467e7ef906 --- /dev/null +++ b/src/mode/m80s/m80v2s.json @@ -0,0 +1,287 @@ +{ + "name": "M80V2 S", + "vendorId": "0x00DE", + "productId": "0x0082", + "lighting": "none", + "matrix": {"rows": 6, "cols": 17}, + "layouts": { + "labels": [ + "7U bottom row", + "Split backspace", + "ISO enter", + "Split left shift", + "Split right shift" + ], + "keymap":[ + [ + { + "c": "#777777" + }, + "0,0", + { + "x": 1, + "c": "#cccccc" + }, + "0,1", + "0,2", + "0,3", + "0,4", + { + "x": 0.5, + "c": "#aaaaaa" + }, + "0,5", + "0,6", + "0,7", + "0,8", + { + "x": 0.5, + "c": "#cccccc" + }, + "0,9", + "0,10", + "0,11", + "0,12", + { + "x": 0.25 + }, + "0,14", + "0,15", + "0,16" + ], + [ + { + "y": 0.5 + }, + "1,0", + "1,1", + "1,2", + "1,3", + "1,4", + "1,5", + "1,6", + "1,7", + "1,8", + "1,9", + "1,10", + "1,11", + "1,12", + { + "c": "#aaaaaa", + "w": 2 + }, + "0,13\n\n\n1,0", + { + "x": 0.25, + "c": "#cccccc" + }, + "1,14", + "1,15", + "1,16", + { + "x": 0.5 + }, + "0,13\n\n\n1,1", + "1,13\n\n\n1,1" + ], + [ + { + "c": "#aaaaaa", + "w": 1.5 + }, + "2,0", + { + "c": "#cccccc" + }, + "2,1", + "2,2", + "2,3", + "2,4", + "2,5", + "2,6", + "2,7", + "2,8", + "2,9", + "2,10", + "2,11", + "2,12", + { + "c": "#aaaaaa", + "w": 1.5 + }, + "2,13\n\n\n2,0", + { + "x": 0.25, + "c": "#cccccc" + }, + "2,14", + "2,15", + "2,16", + { + "x": 1.5, + "c": "#777777", + "w": 1.25, + "h": 2, + "w2": 1.5, + "h2": 1, + "x2": -0.25 + }, + "3,13\n\n\n2,1" + ], + [ + { + "c": "#aaaaaa", + "w": 1.75 + }, + "3,0", + { + "c": "#cccccc" + }, + "3,1", + "3,2", + "3,3", + "3,4", + "3,5", + "3,6", + "3,7", + "3,8", + "3,9", + "3,10", + "3,11", + { + "c": "#777777", + "w": 2.25 + }, + "3,13\n\n\n2,0", + { + "x": 3.75, + "c": "#cccccc" + }, + "3,12\n\n\n2,1" + ], + [ + { + "c": "#aaaaaa", + "w": 2.25 + }, + "4,0\n\n\n3,0", + { + "c": "#cccccc" + }, + "4,2", + "4,3", + "4,4", + "4,5", + "4,6", + "4,7", + "4,8", + "4,9", + "4,10", + "4,11", + { + "c": "#aaaaaa", + "w": 2.75 + }, + "4,12\n\n\n4,0", + { + "x": 1.25, + "c": "#777777" + }, + "4,15", + { + "x": 1.5, + "c": "#aaaaaa", + "w": 1.75 + }, + "4,12\n\n\n4,1", + { + "c": "#cccccc" + }, + "4,13\n\n\n4,1" + ], + [ + { + "c": "#aaaaaa", + "w": 1.25 + }, + "5,0\n\n\n0,0", + { + "w": 1.25 + }, + "5,1\n\n\n0,0", + { + "w": 1.25 + }, + "5,2\n\n\n0,0", + { + "c": "#cccccc", + "w": 6.25 + }, + "5,6\n\n\n0,0", + { + "c": "#aaaaaa", + "w": 1.25 + }, + "5,10\n\n\n0,0", + { + "w": 1.25 + }, + "5,11\n\n\n0,0", + { + "w": 1.25 + }, + "5,12\n\n\n0,0", + { + "w": 1.25 + }, + "5,13\n\n\n0,0", + { + "x": 0.25, + "c": "#777777" + }, + "5,14", + "5,15", + "5,16" + ], + [ + { + "y": 0.25, + "c": "#aaaaaa", + "w": 1.5 + }, + "5,0\n\n\n0,1", + "5,1\n\n\n0,1", + { + "c": "#cccccc", + "w": 1.5 + }, + "5,2\n\n\n0,1", + { + "w": 7 + }, + "5,6\n\n\n0,1", + { + "c": "#aaaaaa", + "w": 1.5 + }, + "5,11\n\n\n0,1", + "5,12\n\n\n0,1", + { + "w": 1.5 + }, + "5,13\n\n\n0,1" + ], + [ + { + "y": 0.5, + "w": 1.25 + }, + "4,0\n\n\n3,1", + { + "c": "#cccccc" + }, + "4,1\n\n\n3,1" + ] +] +} +} diff --git a/src/wilba_tech/wt65_d/wt65_d.json b/src/wilba_tech/wt65_d/wt65_d.json new file mode 100644 index 0000000000..401e3bdf47 --- /dev/null +++ b/src/wilba_tech/wt65_d/wt65_d.json @@ -0,0 +1,226 @@ +{ + "name": "wilba.tech WT65-D", + "vendorId": "0x6582", + "productId": "0x0031", + "lighting": "none", + "matrix": {"rows": 5, "cols": 15}, + "layouts": { + "labels": [ + "Split Backspace", + "ISO Enter", + "Split Left Shift", + ["Bottom Row", "7U", "6U"] + ], + "keymap": [ + { + "x": 13, + "c": "#aaaaaa", + "w": 2 + }, + [ + { + "x": 2.5, + "c": "#777777" + }, + "0,0", + { + "c": "#cccccc" + }, + "0,3", + "0,2", + "0,1", + "0,4", + "0,5", + "0,6", + "0,7", + "0,8", + "0,9", + "0,12", + "0,11", + "0,10", + { + "c": "#aaaaaa", + "w": 2 + }, + "0,13\n\n\n0,0", + "0,14", + { + "x": 0.5, + "c": "#cccccc" + }, + "0,13\n\n\n0,1", + "2,13\n\n\n0,1" + ], + [ + { + "x": 2.5, + "c": "#aaaaaa", + "w": 1.5 + }, + "1,0", + { + "c": "#cccccc" + }, + "1,1", + "1,2", + "1,3", + "1,4", + "1,5", + "1,6", + "1,7", + "1,8", + "1,9", + "1,10", + "1,11", + "1,12", + { + "w": 1.5 + }, + "1,13\n\n\n1,0", + { + "c": "#aaaaaa" + }, + "1,14", + { + "x": 1.25, + "w": 1.25, + "h": 2, + "w2": 1.5, + "h2": 1, + "x2": -0.25 + }, + "1,13\n\n\n1,1" + ], + [ + { + "x": 2.5, + "w": 1.75 + }, + "2,0", + { + "c": "#cccccc" + }, + "2,1", + "2,2", + "2,3", + "2,4", + "2,5", + "2,6", + "2,7", + "2,8", + "2,9", + "2,10", + "2,11", + { + "c": "#aaaaaa", + "w": 2.25 + }, + "2,12\n\n\n1,0", + "2,14", + { + "x": 0.25, + "c": "#cccccc" + }, + "2,12\n\n\n1,1" + ], + [ + { + "c": "#aaaaaa", + "w": 1.25 + }, + "3,0\n\n\n2,1", + "3,1\n\n\n2,1", + { + "x": 0.25, + "w": 2.25 + }, + "3,0\n\n\n2,0", + { + "c": "#cccccc" + }, + "3,2", + "3,3", + "3,4", + "3,5", + "3,6", + "3,7", + "3,8", + "3,9", + "3,10", + "3,11", + { + "c": "#aaaaaa", + "w": 1.75 + }, + "3,12", + { + "c": "#777777" + }, + "3,13", + { + "c": "#aaaaaa" + }, + "3,14" + ], + [ + { + "x": 2.5, + "w": 1.5 + }, + "4,0\n\n\n3,0", + { + "w": 1.5 + }, + "4,2\n\n\n3,0", + { + "c": "#cccccc", + "w": 7 + }, + "4,3\n\n\n3,0", + { + "c": "#aaaaaa", + "w": 1.5 + }, + "4,9\n\n\n3,0", + { + "w": 1.5 + }, + "4,11\n\n\n3,0", + { + "c": "#777777" + }, + "4,12", + "4,13", + "4,14" + ], + [ + { + "x": 2.5, + "c": "#aaaaaa", + "w": 1.25 + }, + "4,0\n\n\n3,1", + "4,1\n\n\n3,1", + { + "w": 1.25 + }, + "4,2\n\n\n3,1", + { + "c": "#cccccc", + "w": 6 + }, + "4,3\n\n\n3,1", + { + "c": "#aaaaaa", + "w": 1.25 + }, + "4,9\n\n\n3,1", + "4,10\n\n\n3,1", + { + "w": 1.25 + }, + "4,11\n\n\n3,1" + ] + ] + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index dade83add5..ee97acc5e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -189,6 +189,38 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz#4789840aa859e46d2f3173727ab707c66bf344f5" + integrity sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA== + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + +"@tsconfig/node16@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== + "@types/bluebird@^3.5.28": version "3.5.28" resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.28.tgz#04c1a520ff076649236bc8ca21198542ce2bdb09" @@ -298,11 +330,21 @@ acorn-jsx@^5.0.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^6.1.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^8.4.1: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + add@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" @@ -844,6 +886,11 @@ cosmiconfig@^5.0.0, cosmiconfig@^5.2.1: js-yaml "^3.13.1" parse-json "^4.0.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -4384,7 +4431,7 @@ ts-node-dev@^1.0.0-pre.43: ts-node "*" tsconfig "^7.0.0" -ts-node@*, ts-node@^8.4.1: +ts-node@*: version "8.4.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.4.1.tgz#270b0dba16e8723c9fa4f9b4775d3810fd994b4f" integrity sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw== @@ -4395,6 +4442,24 @@ ts-node@*, ts-node@^8.4.1: source-map-support "^0.5.6" yn "^3.0.0" +ts-node@10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.4.0.tgz#680f88945885f4e6cf450e7f0d6223dd404895f7" + integrity sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A== + dependencies: + "@cspotcode/source-map-support" "0.7.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + yn "3.1.1" + tsconfig@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" @@ -4694,7 +4759,7 @@ yarn@^1.22.0: resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.0.tgz#acf82906e36bcccd1ccab1cfb73b87509667c881" integrity sha512-KMHP/Jq53jZKTY9iTUt3dIVl/be6UPs2INo96+BnZHLKxYNTfwMmlgHTaMWyGZoO74RI4AIFvnWhYrXq2USJkg== -yn@^3.0.0: +yn@3.1.1, yn@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==