From deb3dec2e28acac4807acaa43a30ea35dd934d7b Mon Sep 17 00:00:00 2001 From: AdyaGMD <114347520+AdyaGMD@users.noreply.github.com> Date: Wed, 31 May 2023 17:24:55 +0100 Subject: [PATCH 001/389] Update getGJRewards.md --- docs/endpoints/getGJRewards.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/getGJRewards.md b/docs/endpoints/getGJRewards.md index 528c20f5a..faa2d98bb 100644 --- a/docs/endpoints/getGJRewards.md +++ b/docs/endpoints/getGJRewards.md @@ -26,7 +26,7 @@ Gets the rewards from the chests. **uuid** - Seemingly a random number also used for identifying someone -**rewardType** - 0 for small chest, 1 for large chest. Defaults to 0 if left out +**rewardType** - 1 for small chest, 2 for large chest. Defaults to 0 if left out **r1** - A random 3-5 digit number @@ -80,4 +80,4 @@ print(req.text) DA96FcVVmQnEPCggLBwMOAwIGDAAGDgsPcBFbU1sZQU1GFXtiGFpQS1QCAwIKCQsDDwsHDAQPDQEUAxkJHQgIBA4DDAgCDQcMAg8LAQgeAxUFFAIPDAILCAQ=|3f5f0ad92a601380e7eea113c223be94ff75304d ``` - \ No newline at end of file + From 144328e51a56446346da721508cccd518176e802 Mon Sep 17 00:00:00 2001 From: AdyaGMD <114347520+AdyaGMD@users.noreply.github.com> Date: Wed, 31 May 2023 17:26:46 +0100 Subject: [PATCH 002/389] Update getGJRewards.md --- docs/endpoints/getGJRewards.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/endpoints/getGJRewards.md b/docs/endpoints/getGJRewards.md index faa2d98bb..a5993ebac 100644 --- a/docs/endpoints/getGJRewards.md +++ b/docs/endpoints/getGJRewards.md @@ -73,6 +73,9 @@ data = { req = requests.post("http://boomlings.com/database/getGJRewards.php", data=data) print(req.text) + +decoded_text = xor_cipher(base64.urlsafe_b64decode(response_text.split("|")[0][5:].encode()).decode(), '59182') +print(decoded_text) ``` **Response** From 3c13ee8c4c14cea15a6ffd9a6e529c0fdf0b3255 Mon Sep 17 00:00:00 2001 From: AdyaGMD <114347520+AdyaGMD@users.noreply.github.com> Date: Wed, 31 May 2023 17:27:52 +0100 Subject: [PATCH 003/389] Update getGJRewards.md --- docs/endpoints/getGJRewards.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/endpoints/getGJRewards.md b/docs/endpoints/getGJRewards.md index a5993ebac..0faa1d626 100644 --- a/docs/endpoints/getGJRewards.md +++ b/docs/endpoints/getGJRewards.md @@ -81,6 +81,7 @@ print(decoded_text) **Response** ```py DA96FcVVmQnEPCggLBwMOAwIGDAAGDgsPcBFbU1sZQU1GFXtiGFpQS1QCAwIKCQsDDwsHDAQPDQEUAxkJHQgIBA4DDAgCDQcMAg8LAQgeAxUFFAIPDAILCAQ=|3f5f0ad92a601380e7eea113c223be94ff75304d +DlWzC:3935672:499769:I can put BS here:173831:2646:40,1,0,0:1724:74640:200,6,4,0:533:1 ``` From 35085dadc1537303223185c99b8f98b8df976ccd Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 18:38:40 +0100 Subject: [PATCH 004/389] First Port change --- assets/gddocs-icon.png | Bin 14802 -> 0 bytes docs/ProjectCard.css | 189 ------------------------------- docs/README.md | 53 +++++---- docs/_404.md | 6 +- docs/_sidebar.md | 13 ++- docs/index.html | 86 ++++++-------- docs/reference/keys.md | 30 +++++ docs/reference/salts.md | 35 ++++++ docs/reference/secrets.md | 167 +++++++++++++++++++++++++++ docs/reference/songs.md | 88 ++++++++++++++ docs/stylesheets/colour_tags.css | 35 ++++++ docs/stylesheets/imageStyles.css | 16 +++ docs/stylesheets/style.css | 23 ++++ 13 files changed, 469 insertions(+), 272 deletions(-) delete mode 100644 assets/gddocs-icon.png delete mode 100644 docs/ProjectCard.css create mode 100644 docs/reference/keys.md create mode 100644 docs/reference/salts.md create mode 100644 docs/reference/secrets.md create mode 100644 docs/reference/songs.md create mode 100644 docs/stylesheets/colour_tags.css create mode 100644 docs/stylesheets/imageStyles.css create mode 100644 docs/stylesheets/style.css diff --git a/assets/gddocs-icon.png b/assets/gddocs-icon.png deleted file mode 100644 index 0c3e1efb238ea0f873f4447f33c7597795025c59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14802 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

Wv+Nn4sZJOiUo5;845) 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 sC!VkTevL-c If you can't find what you're looking for on here, join our [Discord Server](https://discord.gg/gd-programming-646101505417674758) and we can assist you! -## Projects +## Contributions -### Geometry Dash Wrappers +> If you wish to contribute to this project, please submit a [Pull Request](https://github.com/Wyliemaster/gddocs) in our GitHub repository -A few people, or teams have gone out of their way to create proper wrappers and API's around the **Geometry Dash** servers and it's client. All of the known and endorsed projects will find their way here, as a listing of resources people can use for their own projects. -#### Python +## Community Projects -* [gd.py](https://github.com/NeKitDS/gd.py) by [NeKitDS](https://github.com/NeKitDS) +> Over the years, many community members have developed their own tools and software which interact with Geometry Dash and its servers -#### C# +### Tools and Software -* [GDAPI](https://github.com/gd-edit/GDAPI) by the [GDEdit Team](https://github.com/gd-edit) -* [GDNET](https://github.com/GDdotNET/GDNET) by the [GD.NET Team](https://github.com/GDdotNET) +- **[GD Browser](https://gdbrowser.com/) by [GD Colon](https://github.com/GDColon)** +Recreation of Geometry Dash's interface available via the browser -### Geometry Dash Projects +- **[GD Forums](https://gdforums.com/) by [Hyperbolus Team](https://github.com/hyperbolus)** +Community Forum which can interact with the Geometry Dash Servers -These are generally projects that generally interface over the Geometry Dash servers, and overall have built up their own recognition and traction along the community, and developers alike. +- **[SPWN Language](https://github.com/Spu7Nix/SPWN-language) by [Spu7nix](https://github.com/Spu7Nix)** +Programming Language designed to create Geometry Dash levels -#### Node.js +- **[GD History](https://history.geometrydash.eu/) by [Cvolton](https://github.com/Cvolton)** +Preservation of Geometry Dash's history -* [GDBrowser](https://github.com/GDColon/GDBrowser) by [GDColon](https://github.com/GDColon) -* [GD-NodeJS-API](https://github.com/SMJSGaming/GD-NodeJS-API) by [SMJS](https://github.com/SMJSGaming) +- **[GMDPrivateServer](https://github.com/Cvolton/GMDprivateServer) by [Cvolton](https://github.com/Cvolton)** +Private Server Implementation for Geometry Dash's Servers -#### C# +- **[Geode](https://geode-sdk.org/) by [Geode Team](https://github.com/geode-sdk)** +Cross Platform Mod loader and Modding framework -* [GDEdit](https://github.com/gd-edit/GDE) by the [GDEdit Team](https://github.com/gd-edit) +### Client Modifications -#### C++ +- **[Megahack](https://absolllute.com/store/view_mega_hack_pro) by [Absolute](https://github.com/absoIute)** +Modded client for Windows and Android which includes hundreds of mods -* [GDAddon](https://github.com/Keenlos/GDAddonSDK) by the [Keenlos Team](https://github.com/Keenlos/Keenlos/blob/master/ABOUT.md) -* [GDCrypto](https://github.com/Cos8o/GDCrypto) by [Cos8o](https://github.com/Cos8o) +- **[iCreate Pro](https://geticreate.pro/) by [Camila314](https://github.com/camila314)** +Modded client for iOS which includes 30+ mods -## Outside Remarks +- **[Crystal](https://github.com/ninXout/Crystal-Client/tree/main) by [ninXout](https://github.com/ninXout)** +Modded client for MacOS which includes 60+ mods -With this documentation, the Geometry Dash Programming staff team would love to see your interesting ideas with this project, and the kinds of things you create with the information provided. Make sure to hit us up on our discord, and show us of such! +- **[BetterEdit](https://github.com/HJfod/BetterEdit) by [HJFod](https://github.com/HJfod/)** +An extension to the GD editor with many Quality of life enhancements + +- **[Textureldr](https://github.com/poweredbypie/textureldr) by [PoweredByPie](https://github.com/PoweredByPie/)** +Integrated Texture pack system \ No newline at end of file diff --git a/docs/_404.md b/docs/_404.md index cbafc5a4c..b09e5a896 100644 --- a/docs/_404.md +++ b/docs/_404.md @@ -1,5 +1,5 @@ -# Uh oh, you did a fucky wucky +# Oh Dear! -Wonder how you got here. Maybe an invalid link? +There was a problem and now you're here. -I'd suggest reporting about it to [the team](https://github.com/gd-programming/gddocs/issues) as best as you can. +If you think this was a bug, Submit it in our [issues page](https://github.com/Wyliemaster/gddocs) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 54753c5d2..f7cfb8d18 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -1,10 +1,15 @@ -- [Intro](/) -- [Reference](/reference.md) -- [Credits](/CREDITS.md) +- [Home](/) +- [Reference]() + - [Official Songs](/reference/songs) + - [Secrets](/reference/secrets) + - [Keys](/reference/keys) + - [Salts](/reference/salts) +- [Credits](/CREDITS) -## **Resources** + +- **Resources** - **Server** - [Comment](/resources/server/comment.md) diff --git a/docs/index.html b/docs/index.html index 6df068a0c..68613bfa7 100644 --- a/docs/index.html +++ b/docs/index.html @@ -3,42 +3,34 @@ - Geometry Dash Documentation - - - - - + GD Documentation + + + + - - - - - - - - + +

- + - - + + + + + + - - - - - - - - - - - - - - - - - + + + + - + \ No newline at end of file diff --git a/docs/reference/keys.md b/docs/reference/keys.md new file mode 100644 index 000000000..d5fca71cc --- /dev/null +++ b/docs/reference/keys.md @@ -0,0 +1,30 @@ +# Keys + +> Geometry Dash uses [XOR Cipher](#) combined with [base64 encoding](#) to protect various strings within the client. Multiple Keys are used to protect different aspects of the game + +## XOR Keys + +| Key | Usage | XOR Type | +| :------ | :-------------------------- | :------- | +| `11` | Player Save Data | Static | +| `14251` | Player Messages | Cycled | +| `19283` | Vault Codes | Cycled | +| `19847` | Daily Challenges | Cycled | +| `26364` | Level Password | Cycled | +| `29481` | Comment Integrity | Cycled | +| `37526` | Account Password | Cycled | +| `39673` | Level Leaderboard Integrity | Cycled | +| `41274` | Level Integrity | Cycled | +| `48291` | Load Data | Cycled | +| `58281` | Rating Integry | Cycled | +| `59182` | Chest Rewards | Cycled | +| `85271` | Stat submission Integrity | Cycled | + +## XOR Types + +> there are **two** ways Geometry Dash applies [XOR Cipher](topics/algorithms/xor.md) to strings - **Static** and **Cycled** +> +> - Static Ciphers apply the key as is without any changes applying to the key itself. +> - Cycled Ciphers iterate through each value on the key one by one and then loops back once it reaches the end. + + diff --git a/docs/reference/salts.md b/docs/reference/salts.md new file mode 100644 index 000000000..90ea6887f --- /dev/null +++ b/docs/reference/salts.md @@ -0,0 +1,35 @@ +# Salts + +> Salts are small strings of random characters appended onto the end of strings. In the context of Geometry Dash, salts are used within request validation to make it a bit more difficult for a 3rd parties to interact with the private API + +## List of known Salts + +| Salt | Usage | +| :------------- | :--------------------------------------- | +| `xI25fpAapCQg` | Level Upload Seed | +| `xPT6iUrtws0J` | Comment Chk | +| `ysg6pUrtjn0J` | Like and Rate Chk | +| `xI35fsAapCRg` | Update Profile Chk | +| `yPg6pUrtWn0J` | Level Leaderboard Chk | +| `ask2fpcaqCQ2` | Vault of Secrets & Chamber of Time Codes | + +## How Salts are used + +- Salts are appended onto the end of a string of data. What happens to the salted string depends on what its used for. + +Below is an example of a salt being implemented within **Vault Codes** + +```js + function generate_vault_code(str /*brainpower*/) + { + const SALT = "ask2fpcaqCQ2"; + const URL_SAFE = true; + + let raw_str = str + SALT; // "brainpowerask2fpcaqCQ2" + let xor_str = xor_cycle_cipher(raw_str, "19283"); + + return base64_encode(xor_str, URL_SAFE).toString(); + } +``` + +Please refer to the [Algorithms](topics/algorithms) for more information about the implementation \ No newline at end of file diff --git a/docs/reference/secrets.md b/docs/reference/secrets.md new file mode 100644 index 000000000..7a8a4dccb --- /dev/null +++ b/docs/reference/secrets.md @@ -0,0 +1,167 @@ +# Secrets + +> Secrets are 11 character strings used to validate if requests to the server were from a Geometry Dash client. Rather than generating a new secret for each request sent to the server, RobTop opted with hardcoing these secrets and slightly obfuscating them instead to stop people finding them. + +- **Below is a table showing all known secrets** + +### Table of Secrets + +| Secret | Type | +|:--------------|:--------| +| `Wmfd2893gb7` | Common | +| `Wmfv3899gc9` | Account | +| `Wmfv2898gc9` | Level | +| `Wmfp3879gc3` | Mod | +| `Wmfx2878gb9` | Admin | + +### Secret Types +**As of Geometry Dash version 2.113, there are 4 *publicly* known secrets** + +- Common Secret +- Account Secret +- Level Secret +- Mod Secret + +### **Common Secret** + +> As of Geometry Dash 2.113, there are 41 endpoints on the server which use the `Common Secret`. Below is a table of all known endpoints which use the Common Secret. + +
+Endpoints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Endpoint
http://www.boomlings.com/database/getAccountURL.php
http://www.boomlings.com/database/acceptGJFriendRequest20.php
http://www.boomlings.com/database/blockGJUser20.php
http://www.boomlings.com/database/deleteGJAccComment20.php
http://www.boomlings.com/database/deleteGJComment20.php
http://www.boomlings.com/database/deleteGJFriendRequests20.php
http://www.boomlings.com/database/deleteGJMessages20.php
http://www.boomlings.com/database/downloadGJLevel22.php
http://www.boomlings.com/database/downloadGJMessage20.php
http://www.boomlings.com/database/getGJAccountComments20.php
http://www.boomlings.com/database/getGJChallenges.php
http://www.boomlings.com/database/getGJCommentHistory.php
http://www.boomlings.com/database/getGJComments21.php
http://www.boomlings.com/database/getGJDailyLevel.php
http://www.boomlings.com/database/getGJFriendRequests20.php
http://www.boomlings.com/database/getGJGauntlets21.php
http://www.boomlings.com/database/getGJLevelScores211.php
http://www.boomlings.com/database/getGJLevels21.php
http://www.boomlings.com/database/getGJMapPacks21.php
http://www.boomlings.com/database/getGJMessages20.php
http://www.boomlings.com/database/getGJRewards.php
http://www.boomlings.com/database/getGJScores20.php
http://www.boomlings.com/database/getGJSongInfo.php
http://www.boomlings.com/database/getGJTopArtists.php
http://www.boomlings.com/database/getGJUserList20.php
http://www.boomlings.com/database/getGJUsers20.php
http://www.boomlings.com/database/getSaveData.php
http://www.boomlings.com/database/likeGJItem211.php
http://www.boomlings.com/database/rateGJStars211.php
http://www.boomlings.com/database/readGJFriendRequest20.php
http://www.boomlings.com/database/removeGJFriend20.php
http://www.boomlings.com/database/reportGJLevel.php
http://www.boomlings.com/database/requestUserAccess.php
http://www.boomlings.com/database/restoreGJItems.php
http://www.boomlings.com/database/unblockGJUser20.php
http://www.boomlings.com/database/updateGJDesc20.php
http://www.boomlings.com/database/updateGJUserScore22.php
http://www.boomlings.com/database/uploadFriendRequest20.php
http://www.boomlings.com/database/uploadGJAccComment20.php
http://www.boomlings.com/database/uploadGJComment21.php
http://www.boomlings.com/database/uploadGJLevel21.php
http://www.boomlings.com/database/uploadGJMessage20.php
+ +
+ +**

Account Secret

** +> As of Geometry Dash 2.113, there are 5 endpoints which use the `Account Secret`. The Account Secret was created for endpoints that deal with important account features such as save data and privacy settings. Below is a table of each endpoint which uses the Account Secret. + +
+Endpoints + + + + + + + + +
Endpoint
http://www.boomlings.com/database/accounts/registerGJAccount.php
http://www.boomlings.com/database/accounts/loginGJAccount.php
http://geometrydash.com/database/accounts/syncGJAccountNew.php
http://geometrydash.com/database/accounts/backupGJAccountNew.php
http://www.boomlings.com/database/updateGJAccSettings20.php
+ +
+ +**

Level Secret

** +> As of Geometry Dash 2.113, there is only a single endpoint that uses the `Level Secret`. The Level Secret is used to handle level deletions. Below you can find the endpoint which uses the Level Secret + +
+Endpoints + + + + +
Endpoint
http://www.boomlings.com/database/deleteGJLevelUser20.php
+
+ +**

Mod Secret

** +> As of Geometry Dash 2.113, there are only 2 endpoints which use the `Mod Secret`. These endpoints allow hand-picked users called moderators to send in-game levels to the server which then have a chance to earn a star rating. Below are the endpoints in question. + +
+Endpoints + + + + + +
Endpoint
http://www.boomlings.com/database/rateGJDemon21.php
http://www.boomlings.com/database/suggestGJStars20.php
+
+ + +### Admin Secret + +> In the client for Geometry Dash 1.9, RobTop mistakenly included the secret for `Admin Endpoints` inside of a function. Admin Endpoints are only accessible for game admins and they make direct changes in-game that affect everyone. + + + +
+**Below is a screenshot of the Admin Secret being created from Geometry Dash 1.9. RobTop split it into 6 segments to obfuscate it.**
+ + +Currently, the Admin Secret no longer works as RobTop became aware of it +
+ + + +### Secret Structure + +A Secret is split into 5 components and can be divided as such: `x|xxx|xxxx|xx|x`. From analysing the available secrets that we have access too, we have a general idea of what each component may represent. + +> **Note:** *The following is based on analysis using the endpoints the secret is used by as well as the status in the community one is required to have in order to access them. **None of the information below has been proven*** + +- **The first component of a Secret is always a `W`** + +- **The second component seems to denote the permissions level of the user** + `mfd` seems to be endpoints that anyone can use. + `mfv` seems to be endpoints that anyone can use but, they handle important information regarding a users account - save data and levels. + `mfp` seems to be endpoints that are restricted to a select few individuals - Geometry Dash Moderators. + `mfx` seems to be endpoints that are restricted to everyone except Game Admins. + +- **The third component is a 4-digit number which it's purpose is unknown** + `2893` + `3899` + `2898` + `3879` + `2878` + + +- **The fourth component seems denote the purpose of the secret.** + `gb` seems to be general use. + `gc` Seems to be specialised use - managing accounts, sending levels, deleting levels. + +- **The fifth component seems to be overall power the endpoints have.** + `3` being able to submit data that can greatly affect in-game levels + `7` being able to perform general activities on the server + `9` being able to alter accounts and remove levels from the server \ No newline at end of file diff --git a/docs/reference/songs.md b/docs/reference/songs.md new file mode 100644 index 000000000..346aee49a --- /dev/null +++ b/docs/reference/songs.md @@ -0,0 +1,88 @@ +# Official Songs + +> **As of Geometry Dash 2.113, there are 38 songs which are used by the game within official levels.** + + +## Table of Official Songs + +> **Note**: *In the tables below, ID refers to the level ID the level would be if uploaded to the servers and the Server ID refers to an ID within the Song Enum.* + + + + +### **Geometry Dash** + +| ID | Server ID | Track Name | Track Author | +|------|-----------|--------------------------|--------------| +| - | -1 | Practice: Stay Inside Me | OcularNebula | +| 1 | 0 | Stereo Madness | Foreverbound | +| 2 | 1 | Back on Track | DJVI | +| 3 | 2 | Polargeist | Step | +| 4 | 3 | Dry Out | DJVI | +| 5 | 4 | Base after Base | DJVI | +| 6 | 5 | Cant Let Go | DJVI | +| 7 | 6 | Jumper | Waterflame | +| 8 | 7 | Time Machine | Waterflame | +| 9 | 8 | Cycles | DJVI | +| 10 | 9 | xStep | DJVI | +| 11 | 10 | Clutterfunk | Waterflame | +| 12 | 11 | Theory of Everything | DJ-Nate | +| 13 | 12 | Electroman Adventures | Waterflame | +| 14 | 13 | Clubstep | DJ-Nate | +| 15 | 14 | Electrodynamix | DJ-Nate | +| 16 | 15 | Hexagon Force | Waterflame | +| 17 | 16 | Blast Processing | Waterflame | +| 18 | 17 | Theory of Everything 2 | DJ-Nate | +| 19 | 18 | Geometrical Dominator | Waterflame | +| 20 | 19 | Deadlocked | F-777 | +| 21 | 20 | Fingerdash | MDK | + +### **Geometry Dash Meltdown** + +| ID | Server ID | Track Name | Track Author | +|------|-----------|--------------------------|--------------| +| 1001 | 21 | The Seven Seas | F-777 | +| 1002 | 22 | Viking Arena | F-777 | +| 1003 | 23 | Airborne Robots | F-777 | + +### **Geometry Dash World** + +| ID | Server ID | Track Name | Track Author | +|------|-----------|--------------------------|--------------| +| 3001 | 24 | The Challenge | RobTop | +| 2001 | 25 | Payload | Dex Arson | +| 2002 | 26 | Beast Mode | Dex Arson | +| 2003 | 27 | Machina | Dex Arson | +| 2004 | 28 | Years | Dex Arson | +| 2005 | 29 | Frontlines | Dex Arson | +| 2006 | 30 | Space Pirates | Waterflame | +| 2007 | 31 | Striker | Waterflame | +| 2008 | 32 | Embers | Dex Arson | +| 2009 | 33 | Round 1 | Dex Arson | +| 2010 | 34 | Monster Dance Off | F-777 | + +### **Geometry Dash Subzero** + +| ID | Server ID | Track Name | Track Author | +|------|-----------|--------------------------|--------------| +| 4001 | 35 | Press Start | MDK | +| 4002 | 36 | Nock Em | Bossfight | +| 4003 | 37 | Power Trip | Boom Kitty | + + + +## Other Songs + + + + +
+ +**In 2019, Google removed various Geometry Dash clients from their playstore and RobTop accidentally uploaded a development build of update 2.2 when resolving the issue. In the game files, 2 new songs can be found.** +Explorers by Hinkik and Firebird by MDK + + + +*Firebird was confirmed by RobTop to be fake however, another MDK song was confirmed to be in the update with the codename: [Dash](https://www.youtube.com/watch?v=ipK7vQ8gEZw)* + +
\ No newline at end of file diff --git a/docs/stylesheets/colour_tags.css b/docs/stylesheets/colour_tags.css new file mode 100644 index 000000000..a1fd81d2f --- /dev/null +++ b/docs/stylesheets/colour_tags.css @@ -0,0 +1,35 @@ +cb { +color:#4A52E1; +} + +cg { + color: #40E348; +} + +cl { + color: #60ABEF; +} + +cj { + color: #32C8FF; +} + +cy { + color: #FFFF00; +} + +co { + color: #FFA54B; +} + +cr { + color: #FF5A5A; +} + +cp { + color: #FF00FF; +} + +ccDefault { + color: #FF0000; +} \ No newline at end of file diff --git a/docs/stylesheets/imageStyles.css b/docs/stylesheets/imageStyles.css new file mode 100644 index 000000000..54a0d3bd4 --- /dev/null +++ b/docs/stylesheets/imageStyles.css @@ -0,0 +1,16 @@ +.admin { + margin: 10px; + border: 2px solid #344640; + border-radius: 7px; + padding: 10px; + background-color: #2D2D2D; +} + +.alertlayer +{ + margin: 10px; + border: 2px solid #344640; + border-radius: 7px; + padding: 10px; + background-color: #001033; +} \ No newline at end of file diff --git a/docs/stylesheets/style.css b/docs/stylesheets/style.css new file mode 100644 index 000000000..cb0498180 --- /dev/null +++ b/docs/stylesheets/style.css @@ -0,0 +1,23 @@ +/* Custom colour theme. */ +:root { + --mono-hue: 160; + --theme-hue: 160; + --theme-saturation: 100%; + --table-cell-border-width: 1px; + --table-head-border-width: 1px; + --table-head-background: #17201e; +} + +details > summary:hover { + background: rgba(0, 0, 0, 0.1); + transition: 0.1s; + border-radius: 0.2em; +} + +details[open] { + background: rgba(0, 0, 0, 0.05); +} + +details[open] > *:not(summary) { + margin: 0.5em; +} \ No newline at end of file From 9a8282a1e2ff29893d6ae5376eaff01f055dbbb9 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 18:44:46 +0100 Subject: [PATCH 005/389] web stuff --- assets/gddocs-icon.png | Bin 0 -> 14802 bytes docs/index.html | 14 +++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 assets/gddocs-icon.png diff --git a/assets/gddocs-icon.png b/assets/gddocs-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0c3e1efb238ea0f873f4447f33c7597795025c59 GIT binary patch literal 14802 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

Wv+Nn4sZJOiUo5;845) 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 sC!VkTevL-c GD Documentation - - + + + + + + + + - + From 7dcc15c55b9817776236a78ce8d7432edd1b7347 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 19:12:27 +0100 Subject: [PATCH 006/389] Some Porting --- docs/_sidebar.md | 33 +++---- docs/endpoints/generic.md | 35 +++++++ docs/index.html | 2 +- docs/reference/keys.md | 4 +- docs/reference/salts.md | 2 +- docs/topics/encryption/AES.md | 85 ++++++++++++++++ docs/topics/encryption/base64.md | 77 +++++++++------ docs/topics/encryption/robtop-cipher.md | 58 +++++++++++ docs/topics/encryption/xor.md | 126 ++++++++---------------- 9 files changed, 283 insertions(+), 139 deletions(-) create mode 100644 docs/endpoints/generic.md create mode 100644 docs/topics/encryption/AES.md create mode 100644 docs/topics/encryption/robtop-cipher.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index f7cfb8d18..8b3557d70 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -6,6 +6,7 @@ - [Secrets](/reference/secrets) - [Keys](/reference/keys) - [Salts](/reference/salts) +- [Request](/endpoints/generic.md) - [Credits](/CREDITS) @@ -102,30 +103,28 @@ - [updateGJUserScore22](/endpoints/updateGJUserScore22.md) - **Accounts** - - [Login](/endpoints/accounts/loginGJAccount.md) - [Registration](/endpoints/accounts/registerGJAccount.md) -- [Request](/endpoints/request.md) - -**Account Server Endpoints** +- **Account Server Endpoints** + - [Backup](/endpoints/accounts/backupGJAccountNew.md) + - [Sync](/endpoints/accounts/syncGJAccountNew.md) -- [Backup](/endpoints/accounts/backupGJAccountNew.md) -- [Sync](/endpoints/accounts/syncGJAccountNew.md) +- **Topics** + - [GJP](/topics/gjp.md) + - [Level Passwords](/topics/level_passwords.md) + - [Level Encoding/Decoding](/topics/levelstring_encoding_decoding.md) + - [Game Save Files Encryption/Decryption](/topics/localfiles_encrypt_decrypt.md) + - [Status Codes](/topics/status_codes.md) + - [Vault Codes](/topics/vault_codes.md) + - [Shop](/topics/shop) + - [Tags](/topics/tags) -**Topics** -- [GJP](/topics/gjp.md) -- [Level Passwords](/topics/level_passwords.md) -- [Level Encoding/Decoding](/topics/levelstring_encoding_decoding.md) -- [Game Save Files Encryption/Decryption](/topics/localfiles_encrypt_decrypt.md) -- [Status Codes](/topics/status_codes.md) -- [Vault Codes](/topics/vault_codes.md) -- [Shop](/topics/shop) -- [Tags](/topics/tags) - **Encryption** + - [AES](topics/encryption/AES.md) - [Base64 Encoding](topics/encryption/base64.md) - [CHK Generation](topics/encryption/chk.md) - [RS, UDID and UUID](topics/encryption/id.md) - - [XOR Cipher](topics/encryption/xor.md) - - [Data Zipping](topics/encryption/zip.md) + - [Xor](topics/encryption/xor.md) + - [RobTop Cipher](topics/encryption/robtop-cipher.md) diff --git a/docs/endpoints/generic.md b/docs/endpoints/generic.md new file mode 100644 index 000000000..33801121a --- /dev/null +++ b/docs/endpoints/generic.md @@ -0,0 +1,35 @@ +# Important Info + +> When interacting with Geometry Dash's Private API, there are a set of rules which you must follow. Failure to follow these rules will result in the error `-1` + +## Sending requests + +To make a successful request to the Geometry Dash servers, there are a couple factors to consider: + +- Cloudflare +- Request Type +- Rate Limits + +**Cloudflare** \ +The Geometry Dash servers are protected using a service called [Cloudflare](https://www.cloudflare.com/). In order to send a successful request, bypassing cloudflare is essential. In order to bypass cloudflare there are two steps. + +- You must send the request to the `www.` subdomain. +- You must send the request using the `HTTP` protocol, not `HTTPS` +- You must send the request with an empty user-agent + +If you don't follow these steps, cloudflare will block the request and you will recieve an HTTP error code: `1020` + +**Request Type** \ +In 99% of cases, Geometry Dash requires you to send `POST` request. The request parameters require the following Content Type: `Content-Type: application/x-www-form-urlencoded`. +- The parameters required will be detailed in their respective sections. + +**Rate Limits** \ +One thing to be mindful about is the number of requests you send at a given time. Sending too many requests will result in you becoming rate limited and not being able to send any more requests for a certain duration. As the number of requests required to start a rate limit changes, we are unable to provide exact numbers + +## **Alternative Method** +> As of May 31st, 2023. An alternative method is using IPv6 to interact with the servers + +```py +#>curl http://[2600:3c03::f03c:91ff:fe69:863b]/database/getGJLevels21.php -X POST -d secret=Wmfd2893gb7 +1:6508283:2:ReTraY:5:3:6:4993756:8:10:9:10:10:71657392:12:0:13:21:14:6541047:17::43:3:25::18:2:19:7730:42:0:45:20000:3:VGhhbmtzIGZvciBwbGF5aW5nIEdlb21ldHJ5IERhc2g=:15:3:30:0:31:0:37:3:38:1:39:2:46:1:47:2:35:557117|... +``` \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 1c0f78a10..b785ba6bf 100644 --- a/docs/index.html +++ b/docs/index.html @@ -63,7 +63,7 @@ - + diff --git a/docs/reference/keys.md b/docs/reference/keys.md index d5fca71cc..20ee85518 100644 --- a/docs/reference/keys.md +++ b/docs/reference/keys.md @@ -1,6 +1,6 @@ # Keys -> Geometry Dash uses [XOR Cipher](#) combined with [base64 encoding](#) to protect various strings within the client. Multiple Keys are used to protect different aspects of the game +> Geometry Dash uses [XOR Cipher](topics/encryption/xor.md) combined with [base64 encoding](topics/encryption/base64.md) to protect various strings within the client. Multiple Keys are used to protect different aspects of the game ## XOR Keys @@ -22,7 +22,7 @@ ## XOR Types -> there are **two** ways Geometry Dash applies [XOR Cipher](topics/algorithms/xor.md) to strings - **Static** and **Cycled** +> there are **two** ways Geometry Dash applies [XOR Cipher](topics/encryption/xor.md) to strings - **Static** and **Cycled** > > - Static Ciphers apply the key as is without any changes applying to the key itself. > - Cycled Ciphers iterate through each value on the key one by one and then loops back once it reaches the end. diff --git a/docs/reference/salts.md b/docs/reference/salts.md index 90ea6887f..5d691faaa 100644 --- a/docs/reference/salts.md +++ b/docs/reference/salts.md @@ -32,4 +32,4 @@ Below is an example of a salt being implemented within **Vault Codes** } ``` -Please refer to the [Algorithms](topics/algorithms) for more information about the implementation \ No newline at end of file +Please refer to the Encryption Section for more information about the implementation \ No newline at end of file diff --git a/docs/topics/encryption/AES.md b/docs/topics/encryption/AES.md new file mode 100644 index 000000000..8464be159 --- /dev/null +++ b/docs/topics/encryption/AES.md @@ -0,0 +1,85 @@ +# AES + +> AES (The Advanced Encryption Standard) is an encryption algorithm used for encrypting Geometry Dash Save files on Mac and iOS + +- Geometry Dash uses `ECB` mode and a 256-bit key for encrypting and descrypting data + +## AES Key + +- The key used by Geometry Dash is: + + ```md + 69 70 75 39 54 55 76 35 34 79 76 5d 69 73 46 4d 68 35 40 3b 74 2e 35 77 33 34 45 32 52 79 40 7b + ``` + +## Padding + +- The plaintext data sometimes may not perfectly align and therefore, some padding is implemented + + + +### **Implement Padding** + +```js +// Pseudocode +pad_offset = data.length % 16; + +if (pad_offset != 0) { + pad_total = 16 - pad_offset; + + for (i = 0; i < pad_total; i++) { + data += pad_total.toByte(); + } +} +``` + +### **Remove Padding** + +```js +// Pseudocode +total_padding = data.last_byte(); + +if (total_padding < 16) { + data = data.slice(0, data.length - total_padding); +} +``` + + + +## Implementation + +- Decrypting and Encrypting data with AES is pretty simple + + + +### **Encrypt** + +```js +// Pseudocode +data = addPadding(data); + +cipher = AES.new( + "\x69\x70\x75\x39\x54\x55\x76\x35\x34\x79\x76\x5d\x69\x73\x46\x4d + \x68\x35\x40\x3b\x74\x2e\x35\x77\x33\x34\x45\x32\x52\x79\x40\x7b", + AES.MODE_ECB +); + +encrypted_data = cipher.encrypt(data); +``` + +### **Decrypt** + +```js +// Pseudocode +cipher = AES.new( + "\x69\x70\x75\x39\x54\x55\x76\x35\x34\x79\x76\x5d\x69\x73\x46\x4d + \x68\x35\x40\x3b\x74\x2e\x35\x77\x33\x34\x45\x32\x52\x79\x40\x7b", + AES.MODE_ECB +); + +decrypted = cipher.decrypt(data); + +decrypted = removePadding(decrypted); +``` + + diff --git a/docs/topics/encryption/base64.md b/docs/topics/encryption/base64.md index 7de27ae92..e8c3f891b 100644 --- a/docs/topics/encryption/base64.md +++ b/docs/topics/encryption/base64.md @@ -1,33 +1,48 @@ # Base64 -Base64 encoding is widely used amongst different endpoints in Geometry Dash. - -It is used to encode fields like level data, level descriptions, comments, etc. - -GD uses *URL-safe* Base64 encoding, which uses A-Z and a-z letters, along with `_` and `-` as special characters. (Main Base64 uses `+` and `/` special characters) - -Here is an example of using Base64 decoding and encoding: - - - -### **Python** - -```py -import base64 - -# For unknown reasons, people tend to use base64.b64(decode|encode) functions -# and replace "+" with "-" and "/" with "_" manually, -# even though "base64" module implements base64.urlsafe_b64(decode|encode). - -# encode and decode functions return "bytes" type in python so we might want to use -# bytes.decode() to convert them to "str" type. - -def base64_encode(string: str) -> str: - return base64.urlsafe_b64encode(string.encode()).decode() - - -def base64_decode(string: str) -> str: - return base64.urlsafe_b64decode(string.encode()).decode() -``` - - +> Base64 is a method of encoding data which is widely used in the context of Geometry Dash. + +**GD uses a variant of Base64 called url safe Base64 which replaces characters that may unintentionally break requests sent to the servers** + +## Table of characters + +> This table covers the characters url safe base64 use + +| Index | Binary | Char | | Index | Binary | Char | +| :---- | :------- | :--- | :-- | :---- | -------- | ---- | +| `0` | `000000` | A | | `32` | `100000` | g | +| `1` | `000001` | B | | `33` | `100001` | h | +| `2` | `000010` | C | | `34` | `100010` | i | +| `3` | `000011` | D | | `35` | `100011` | j | +| `4` | `000100` | E | | `36` | `100100` | k | +| `5` | `000101` | F | | `37` | `100101` | l | +| `6` | `000110` | G | | `38` | `100110` | m | +| `7` | `000111` | H | | `39` | `100111` | n | +| `8` | `001000` | I | | `40` | `101000` | o | +| `9` | `001001` | J | | `41` | `101001` | p | +| `10` | `001010` | K | | `42` | `101010` | q | +| `11` | `001011` | L | | `43` | `101011` | r | +| `12` | `001100` | M | | `44` | `101100` | s | +| `13` | `001101` | N | | `45` | `101101` | t | +| `14` | `001110` | O | | `46` | `101110` | u | +| `15` | `001111` | P | | `47` | `101111` | v | +| `16` | `010000` | Q | | `48` | `110000` | w | +| `17` | `010001` | R | | `49` | `110001` | x | +| `18` | `010010` | S | | `50` | `110010` | y | +| `19` | `010011` | T | | `51` | `110011` | z | +| `20` | `010100` | U | | `52` | `110100` | 0 | +| `21` | `010101` | V | | `53` | `110101` | 1 | +| `22` | `010110` | W | | `54` | `110110` | 2 | +| `23` | `010111` | X | | `55` | `110111` | 3 | +| `24` | `011000` | Y | | `56` | `111000` | 4 | +| `25` | `011001` | Z | | `57` | `111001` | 5 | +| `26` | `011010` | a | | `58` | `111010` | 6 | +| `27` | `011011` | b | | `59` | `111011` | 7 | +| `28` | `011100` | c | | `60` | `111100` | 8 | +| `29` | `011101` | d | | `61` | `111101` | 9 | +| `30` | `011110` | e | | `62` | `111110` | \_ | +| `31` | `011111` | f | | `63` | `111111` | - | + +## Padding + +> The padding character is `=` however, it is optional as the Geometry Dash servers will automatically correct strings that do not have any padding \ No newline at end of file diff --git a/docs/topics/encryption/robtop-cipher.md b/docs/topics/encryption/robtop-cipher.md new file mode 100644 index 000000000..dc6c9d48d --- /dev/null +++ b/docs/topics/encryption/robtop-cipher.md @@ -0,0 +1,58 @@ +# The RobTop Cipher +The RobTop Cipher refers to the combination of Base64 (url-safe) + XOR used frequently within Geometry Dash as a form of encryption. +It is used within places such as passwords (GJP) or save data on Windows. +The cipher may utilise either the cycled or static variant of the XOR cipher depending on where the ciphertext originates from (such as save data or the +encoded password). To find out which variant is used, you may consult the [key reference material](/reference/keys.md#xor-keys). + +## Encryption and Decryption +### Encryption +To encrypt something using the RobTop Cipher, you do the following: + +```js +plaintext = "some text" + +// Cyclic XOR RobTop Cipher +cyclic_key = "..." // The XOR Key from the key reference material + +cxor_text = cyclic_xor(plaintext, cyclic_key) +cresult = base64_urlsafe_encode(cxor_text) // Our result + +// Static XOR RobTop Cipher +static_key = 0xFF // The XOR Key from the key reference material + +sxor_text = static_xor(plaintext, static_key) +sresult = base64_urlsafe_encode(sxor_text) // Our result. +``` + +### Decryption +To decrypt something using the RobTop cipher, you do the following: + +```js +ciphertext = "..." + +// Cyclic XOR RobTop Cipher +cyclic_key = "..." // The XOR Key from the key reference material + +cxor_text = base64_urlsafe_decode(ciphertext) +cresult = cyclic_xor(cxor_text, cyclic_key) // Our result. + +// Static XOR RobTop Cipher +static_key = 0xFF // The XOR Key from the key reference material + +sxor_text = base64_urlsafe_decode(ciphertext) +sresult = static_xor(sxor_text, static_key) // Our result. +``` + +## Types of XOR Used +### Static XOR +Within the static XOR RobTop Cipher, the key should be treated as a byte. Then, all bytes of the string must be iterated over, XORing each unicode code of a +character by the static key to form a new string. + +By the very nature of the XOR cipher, decoding involves the same process as encoding. + +### Cyclic XOR +Within the cyclic XOR RobTop Cipher (the most common variant), the key should be treated as a string or a sequence of UTF-8 character codes. +The differentiating factor between cyclic and static XOR is that cyclic XOR uses a key longer than one byte. This means that the key has to be +repeatedly looped over during the string iteration. + +Please refer to the [XOR](/topics/encryption/xor.md) section for details on the implementation diff --git a/docs/topics/encryption/xor.md b/docs/topics/encryption/xor.md index 96d4d141e..89980ff67 100644 --- a/docs/topics/encryption/xor.md +++ b/docs/topics/encryption/xor.md @@ -1,104 +1,56 @@ # XOR -[XOR](https://en.wikipedia.org/wiki/Bitwise_operation#XOR) is a _bit-wise_ binary operation that is commonly written as `^` in programming languages. +> XOR is a bitwise operation used by Geometry Dash to encrypt data. It is commonly denoted as a `^` in many programming languages -Each character in a string is essentially represented by a number, -so-called _codepoint_, to which XOR operation can be applied. +- **Geometry Dash has 2 methods to encrypting data using XOR** + - Using a singular key + - Cycling through a 5 digit key - - -### **Python** - -In python, you can use `ord()` function to get the codepoint of a character, -and `chr()` to convert the codepoint to a character. - -```py ->>> ord("N") -78 ->>> chr(78) -"N" -``` - - - -## XOR Cipher - -**XOR-Cipher** elaborates on the idea of applying _XOR_ to each to characters, -one in the string and one in the key. - -Here is our **XOR-Cipher** stub (empty) function: - - - -### **Python** - -```py -def xor_cipher(string: str, key: str) -> str: ... -``` +When needed, Geometry Dash iterates through every byte of the data and applies the XOR operation using its key - - -Suppose we have a string `"GD"` (how original), and key `"42069"` (rather original as well). +## Examples -Here is what will happen to our string if we apply **XOR-Cipher**: +Below are pseudocode examples of the algorithms used -### **Python** +### **Singular** -```py ->>> chr(ord("G") ^ ord("4")) + chr(ord("D") ^ ord("2")) -"sv" +```js +result = ""; +for (i = 0; i < input.length; i++) { + byte = input[i].toByte(); + result += (byte ^ key).toChar(); +} ``` - - -**XOR-Cipher** connects each character in given string with character in key (key is cycled), then applies _XOR_ operation on each pair. - -Returning back to the function: - - - -### **Python** +### **Cycle** -```py -import itertools - -# we are going to use itertools.cycle() on our key, which will basically -# repeatedly yield "1234512345..." for key "12345" - -def xor_cipher(string: str, key: str) -> str: - result = "" - for string_char, key_char in zip(string, itertools.cycle(key)): - result += chr(ord(string_char) ^ ord(key_char)) - return result -``` - -This function is quite good, but adding new characters to strings in python is quite slow. -Here is a better function that implements **XOR-Cipher** (and hey, it is written in one line!): - -```py -def xor_cipher(string: str, key: str) -> str: - return ("").join(chr(ord(x) ^ ord(y)) for x, y in zip(string, itertools.cycle(key))) +```js +result = ""; +for (i = 0; i < input.length; i++) { + byte = input[i].toByte(); + xKey = key[i % key.length].toByte(); + result += (byte ^ xKey).toChar(); +} ``` -## XOR Keys - -Here is a list of XOR keys currently used in GD: - -| Key | Usage | -| ----- | ----------------- | -| 14251 | Messages | -| 26364 | Level Password | -| 37526 | Account Password | -| 39673 | Level Leaderboard | -| 41274 | Level Seed | -| 29481 | Comment CHK | -| 19847 | Challenges | -| 59182 | Rewards | -| 58281 | Like and Rate | -| 85271 | User Profile | -| 19283 | Vault Codes | -| 48291 | Load data | +### Keys + +| Key | Usage | XOR Type | +| :------ | :-------------------------- | :------- | +| `11` | Player Save Data | Singular | +| `14251` | Player Messages | Cycled | +| `19283` | Vault Codes | Cycled | +| `19847` | Daily Challenges | Cycled | +| `26364` | Level Password | Cycled | +| `29481` | Comment Integrity | Cycled | +| `37526` | Account Password | Cycled | +| `39673` | Level Leaderboard Integrity | Cycled | +| `41274` | Level Integrity | Cycled | +| `48291` | Load Data | Cycled | +| `58281` | Rating Integrity | Cycled | +| `59182` | Chest Rewards | Cycled | +| `85271` | Stat Submission Integrity | Cycled | From 10bb5138ffc86d59a7f6e17596ce30b0a0cc96a2 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 20:27:12 +0100 Subject: [PATCH 007/389] Port content + credits --- docs/CREDITS.md | 26 +- docs/endpoints/acceptGJFriendRequest20.md | 64 ++--- docs/endpoints/accounts/loginGJAccount.md | 62 ++--- docs/endpoints/accounts/registerGJAccount.md | 55 ++-- docs/endpoints/deleteGJFriendRequests20.md | 61 ++--- docs/endpoints/getGJFriendRequests20.md | 69 ++--- docs/endpoints/getGJLevels21.md | 255 ++++++++++--------- docs/endpoints/readGJFriendRequest20.md | 59 ++--- docs/endpoints/uploadFriendRequest20.md | 62 ++--- 9 files changed, 286 insertions(+), 427 deletions(-) diff --git a/docs/CREDITS.md b/docs/CREDITS.md index 59c0b2d31..6ad52bb80 100644 --- a/docs/CREDITS.md +++ b/docs/CREDITS.md @@ -1,12 +1,26 @@ # Credits -Thanks to the **Geometry Dash Programming** experts, and the **GDDocs** contributors for making this project a reality. Without you guys, this project wouldn't have even been possible. +> **The GD Docs Project is maintained by [Wylie](https://github.com/Wyliemaster) and is backed by [GD Programming](https://discord.gg/gd-programming-646101505417674758) which is owned by [SMJS](https://github.com/SMJSGaming)** -*-- Team professionally led by [SMJS](https://github.com/SMJSGaming)* -- [nekit](https://github.com/nekitdev) -- [Wylie](https://github.com/Wyliemaster) +## Special Thanks + +**Special thanks to all the experts in GD Programming for their contributions to this project** - [Andre](https://github.com/AndreNIH) - [Cvolton](https://github.com/Cvolton) - [Colon](https://github.com/GDColon) -- [AlFas](https://github.com/AlFasGD) -- [zmx](https://github.com/kyurime) +- [Mat](https://github.com/matcool) +- [Nekit](https://github.com/nekitdev) +- [Nora](https://github.com/naoei) +- [Rekkon](https://github.com/Rekkonnect) +- [zmx](https://github.com/qimiko) + + + + + + + + + + + diff --git a/docs/endpoints/acceptGJFriendRequest20.md b/docs/endpoints/acceptGJFriendRequest20.md index 0b8c6bda5..237064b93 100644 --- a/docs/endpoints/acceptGJFriendRequest20.md +++ b/docs/endpoints/acceptGJFriendRequest20.md @@ -1,60 +1,30 @@ -# acceptGJFriendRequest20.php +# Accepting Friend Requests -Accepts an incoming friend request +> This endpoint is used to accept friend requests recieved from other users ## Parameters -### Required Parameters - -**accountID** - Account ID of the user accepting the friend request - -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user accepting the friend request - -**targetAccountID** - Account ID of the user who sent the friend request - -**requestID** - ID of the friend request (Returned by [uploadFriendRequest20](/endpoints/uploadFriendRequest20.md)) - -**secret** - Wmfd2893gb7 - -### Optional Parameters - -**gameVersion** - 21 - -**binaryVersion** - 35 - -**gdw** - 0 +| Parameter | Explanation | Optional | +| :---------------- | :----------------------------------------------------------------- | -------- | +| `gameVersion` | The Game Version the player is playing on | `True` | +| `binaryVersion` | The current build the player playing on | `True` | +| `gdw` | If the player is using Geometry Dash World | `True` | +| `requestID` | The ID of the friend request being accepted | `True` | +| `accountID` | The player's account ID | `False` | +| `targetAccountID` | The account which the player is trying to send a friend request to | `False` | +| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `secret` | The common secret: `Wmfd2893gb7` | `False` | ## Response -1, regardless of if the friend request exists or not - -## Example - - - -### **Python** +**Successful Request** ```py -import requests - -# With this code, DevExit is accepted a friend request -# from PasswordFinders, whose account ID is 5317656 - -data = { - "accountID": 173831, # DevExit's account ID - "gjp": "********", # This would be DevExit's password encoded with GJP encryption - "targetAccountID": 5317656, - "requestID": 43248797, - "secret": "Wmfd2893gb7", -} - -r = requests.post('http://boomlings.com/database/acceptGJFriendRequest20.php', data=data) -print(req.text) +1 ``` -**Response** +**Failed Request** + ```py -1 +-1 ``` - - \ No newline at end of file diff --git a/docs/endpoints/accounts/loginGJAccount.md b/docs/endpoints/accounts/loginGJAccount.md index babec6ff3..c32540db8 100644 --- a/docs/endpoints/accounts/loginGJAccount.md +++ b/docs/endpoints/accounts/loginGJAccount.md @@ -1,50 +1,36 @@ -# accounts/loginGJAccount.php +# LoginGJAccount -Logs into an account +> This endpoint is used to log into a players Geometry Dash account. ## Parameters -### Required Parameters +| Parameter | Explanation | Optional | +| :--------- | :---------------------------------------------------------------------------------------------------- | :------- | +| `udid` | [The user's Universal Unique Identifier](https://en.wikipedia.org/wiki/Universally_unique_identifier) | `False` | +| `username` | The username for the account the player is trying to log into | `False` | +| `password` | The plaintext password for the account the player is trying to log into | `False` | +| `sID` | The player's steam ID | `True` | +| `secret` | Account Secret: `Wmfv3899gc9` | `False` | -**udid** - Funnily, this is the UUID of the user, [see here](/topics/encryption/id?id=uuid) +**Note** +the `sID` parameter is only sent to the servers if the player is logging into their account from the steam release of Geometry Dash. From what has been observed, it has not been utilised. -**userName** - The username of the account being signed into +## Responses -**password** - The password of the account being signed into - -**secret** - Wmfv3899gc9 - -### Optional Parameters - -**sID** - The players Steam ID - -## Response - -The account ID and the player ID of the user, separated by a comma, otherwise -1 - -## Example - - - -### **Python** +A successful login attempt will return the players accountID and player ID seperated by a `,` ```py -import requests - -data = { - "udid": "605BE9FD-300E-49EA-A45C-B272EE64D3E0", - "userName": "DevExit", - "password": "********", # This would be DevExit's password - "secret": "Wmfv3899gc9" -} - -r = requests.post("http://boomlings.com/database/accounts/loginGJAccount.php", data=data) -print(req.text) +# response = 71,16 +accountID, playerID = response.split(",") ``` -**Response** -```py -173831,3935672 -``` +If the request was not successful, there are 7 different error codes that can be returned - +| Error Code | Meaning | +| :--------- | :-------------------------------------------------------------------------------------------------------- | +| `-1` | Generic Error | +| `-8` | If the user's password is less than 6 characters long | +| `-9` | If the user's Username is less than 3 characters long | +| `-11` | If the user's login credentials are incorrect | +| `-12` | If the user's account is disabled | +| `-13` | If the account the user is trying to log into has a different steam ID to to that account **(Unused)** | diff --git a/docs/endpoints/accounts/registerGJAccount.md b/docs/endpoints/accounts/registerGJAccount.md index 0d46d5510..a82b86e78 100644 --- a/docs/endpoints/accounts/registerGJAccount.md +++ b/docs/endpoints/accounts/registerGJAccount.md @@ -1,46 +1,33 @@ -# accounts/registerGJAccount.php +# Register Account -Registers an account +> This endpoint is used to register an account ## Parameters -### Required Parameters - -**userName** - The username of the account to be added - -**password** - The password of the account to be added - -**email** - The email of the account to be added - -**secret** - Wmfv3899gc9 +| Parameter | Explanation | Optional | +| --- | --- | --- | +| `userName` | The username of the account to create | `False` | +| `password` | The password of the account to create | `False` | +| `email` | The email of the account to create | `False` | +| `secret` | Account Secret: `Wmfv3899gc9` | `False` | ## Response -1 if the account ID was successfully created, otherwise an [error code](/topics/status_codes) - -## Example +**Successful Request** - - -### **Python** - -```py -import requests - -data = { - "userName": "GDDocsTestAcc", - "password": "********", - "email": "gddocsemail@gmail.com", - "secret": "Wmfv3899gc9" -} - -req = requests.post("http://boomlings.com/database/accounts/registerGJAccount.php", data=data) -print(req.text) ``` - -**Response** -```py 1 ``` - +**Failed Request** + +| Error Code | Meaning | +| --- | --- | +| -1 | Generic Error | +| -2 | Username taken | +| -3 | Email taken | +| -4 | Username is longer than 20 characters | +| -5 | Invalid Password | +| -6 | Invalid Email | +| -8 | Password to short | +| -9 | Username to short | diff --git a/docs/endpoints/deleteGJFriendRequests20.md b/docs/endpoints/deleteGJFriendRequests20.md index 5d1825d8e..052dc8ed7 100644 --- a/docs/endpoints/deleteGJFriendRequests20.md +++ b/docs/endpoints/deleteGJFriendRequests20.md @@ -1,57 +1,32 @@ -# deleteGJFriendRequests20.php +# DeleteFriendRequests -Deletes a friend request +> This endpoint is used to delete friend requests that the player may have recieved from other players ## Parameters -### Required Parameters +| Parameter | Explanation | Optional | +| :---------------- | :---------------------------------------------------------------------------------- | -------- | +| `gameVersion` | The Game Version the player is playing on | `True` | +| `binaryVersion` | The current build the player playing on | `True` | +| `gdw` | If the player is using Geometry Dash World | `True` | +| `accountID` | The player's account ID | `False` | +| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `targetAccountID` | The accountID of the player you are declining the friend request | `False` | +| `accounts` | Account IDs seperated by `,` for users the player is declining friend requests from | `True` | +| `isSender` | If the player is the sender of this friend request | `True` | -**accountID** - The account ID of the user who is deleting the friend request - -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user who is deleting the friend request - -**targetAccountID** - ID of the person whose friend request is being deleted - -**isSender** - 1 if the user who deleted the friend request is the sender, otherwise 0 - -**secret** - Wmfd2893gb7 - -### Optional Parameters - -**gameVersion** - 21 - -**binaryVersion** - 35 +**Note:** `isSender` must be set to `1` if you are deleting a request you have sent ## Response -Always returns 1, regardless of whether the request exists or not. - -## Example - - - -### **Python** +**Successful Request** ```py -import requests - -# With this code, DevExit is deleting a friend request to the person with ID 314159 - -data = { - "accountID": 173831, # DevExit's account ID - "gjp": "********", # This would be DevExit's password encoded with GJP encryption - "targetAccountID": 314159, - "isSender": 1, # DevExit sent the friend request, so this is 1 - "secret": "Wmfd2893gb7" -} - -req = requests.post("http://boomlings.com/database/deleteGJFriendRequests20.php", data=data) -print(req.text) +1 ``` -**Response** +**Failed Request** + ```py -1 +-1 ``` - - \ No newline at end of file diff --git a/docs/endpoints/getGJFriendRequests20.md b/docs/endpoints/getGJFriendRequests20.md index e0e0a5a51..706617a9d 100644 --- a/docs/endpoints/getGJFriendRequests20.md +++ b/docs/endpoints/getGJFriendRequests20.md @@ -1,62 +1,35 @@ -# getGJFriendRequests20.php +# GetFriendRequests -Gets a user's friend requests. +> This endpoint is to fetch friend requests recieved by other users ## Parameters -### Required Parameters - -**accountID** - The account ID of the person whose friend requests you're trying to get - -**gjp** - The user's [GJP](/topics/encryption/gjp.md) - -**getSent** - 0 for friend requests the user retrieved, and 1 for friend requests the user has sent - -**secret** - Wmfd2893gb7 - -### Optional Parameters - -**gameVersion** - 21 - -**binaryVersion** - 35 - -**gdw** - 0 - -**page** - The page of friend requests you want. Defaults to 0 if not sent - -**total** - Current use is unknown, defaults to the amount of friend requests the user has, but leaving it as 0 works. +| Parameter | Explanation | Optional | +| :-------------- | :--------------------------------------------------------- | -------- | +| `gameVersion` | The Game Version the player is playing on | `True` | +| `binaryVersion` | The current build the player playing on | `True` | +| `gdw` | If the player is using Geometry Dash World | `True` | +| `page` | The page currently being viewed | `True` | +| `total` | The total friend requests recieved | `True` | +| `getSent` | If the server should fetch requests sent by the player | `True` | +| `accountID` | The player's account ID | `False` | +| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `secret` | The common secret: `Wmfd2893gb7` | `False` | ## Response -A list of [friend request objects](/resources/server/friendrequest.md) separated by a pipe `|`. +The response for this endpoint is a `key:value` format with `|` being the seperator for each object. a `#` is used to seperate the metadata -## Example +> the metadata is split up into 3 segments: `total requests: page number : total requests per page` - +**Below is a raw response for a single friend request** -### **Python** - -```py -import requests - -# This code gets all the friend requests DevExit has sent - -data = { - "accountID": 173831, # DevExit's account ID - "gjp": "********", # This would be DevExit's password encoded with GJP encryption - "getSent": 1, - "secret": "Wmfd2893gb7" -} - -req = requests.post("http://boomlings.com/database/getGJFriendRequests20.php", data=data) -print(req.text) ``` - -**Response** -```py -1:XShadowWizardX:2:10670782:9:115:10:12:11:7:14:0:15:2:16:1919857:32:40482513:35:b3dv:41:1:37:3 months|1:HyperSoul:2:8417870:9:37:10:35:11:12:14:0:15:2:16:1217980:32:16160788:35:V2h5IGRpZCB5b3UgdW5mcmllbmQgbWUgOzM7:41:1:37:3 years|1:foreverbound95:2:15015378:9:1:10:0:11:3:14:0:15:0:16:4273678:32:13187274:35:SGksIFhE:41:1:37:3 years|1:Zhen M:2:19294285:9:1:10:0:11:3:14:0:15:0:16:5610849:32:13077932:35:ZWNrcyBkZWUgcnVicnVi:41:1:37:3 years|1:xSpectrum:2:12078249:9:22:10:15:11:12:14:0:15:2:16:2786272:32:11605585:35:OzM7LyBZb3UgbWFrZSBndWQgbGV2ZWxzIFw7MzsgSEFQUFkgTkVXIFlFQVJT:41:1:37:3 years|1:Michicun:2:9389282:9:46:10:16:11:12:14:0:15:2:16:2655938:32:10263453:35:Ok8gWW91IGNvbW1lbnRlZCBvbiBteSBsZXZlbCBYRA==:41:1:37:3 years|1:Findexi:2:995430:9:127:10:6:11:3:14:0:15:2:16:22264:32:9633972:35:TXkgZnJpZW5kIGhhcyAxIG1vcmUgc3RhciB0aGFuIHlvdQ==:41:1:37:3 years|1:lSuwako:2:11304810:9:3:10:3:11:12:14:6:15:2:16:215104:32:9621020:35:R0cgT04gMTMgQU5EIFlPVSBDT01NRU5URUQgT04gTVkgTEVWRUw=:41:1:37:3 years|1:Xaro:2:3032783:9:32:10:8:11:6:14:2:15:2:16:14233:32:7255586:35:UEx6IDszOyBJJ2xsIGdpdmUgeW91IG9uZSBvZiBteSBuZWlnaGJvcidzIGNvcmdpcyEgQ29yZ2lEZXJw:41:1:37:4 years|1:KaotikJumper:2:2676052:9:110:10:12:11:12:14:0:15:0:16:129311:32:3612380:35:REVBVEggQ09SUklET1IgQ09NUExFVEUhIChwcmFjdGljZSkgS2FwcGE=:41:1:37:4 years|1:D4rkGryf:2:4053881:9:87:10:21:11:40:14:0:15:2:16:270562:32:3125311:35:SGo=:41::37:4 years|1:TrueChaos:2:464435:9:60:10:9:11:15:14:0:15:2:16:100961:32:994096:35::41:1:37:4 years|1:DiMaViKuLov26:2:4993756:9:1:10:12:11:15:14:0:15:2:16:225521:32:944653:35:aW5zZXJ0bGVubnloZXJl:41:1:37:4 years|1:Krexon:2:3488114:9:28:10:12:11:16:14:0:15:2:16:1716100:32:397053:35:Ty5PIHBseiwgSSBMT1ZFIFVSIExWTFMhISEh:41:1:37:4 years|1:TheZekenator:2:3497675:9:1:10:0:11:3:14:0:15:0:16:1028719:32:372035:35:RGVtb24gQ29sbGFiIDop:41::37:4 years|1:Z3lLink:2:114346:9:30:10:3:11:12:14:0:15:0:16:677:32:191941:35::41:1:37:4 years|1:Experience D:2:9618:9:120:10:35:11:3:14:0:15:2:16:9917:32:191927:35::41:1:37:4 years|1:ZenthicAlpha:2:214216:9:108:10:12:11:3:14:0:15:2:16:638:32:191899:35:UGx6IEknZCBsaWtlIHRvIGZyaWVuZCBwbHogOkQ=:41:1:37:4 years#:0:20 +1:TheWylieMaster:2:84696119:9:31:10:4:11:16:14:0:15:2:16:9276649:32:45404710:35:aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQ==:41::37:2024 years#1:0:1 ``` -~~Please don't hurt me I was 12/13 at the time when I sent most of those friend requests~~ +if the request fails then the server will return - \ No newline at end of file +```py +-1 +``` diff --git a/docs/endpoints/getGJLevels21.md b/docs/endpoints/getGJLevels21.md index 8593be62d..e646299d8 100644 --- a/docs/endpoints/getGJLevels21.md +++ b/docs/endpoints/getGJLevels21.md @@ -1,141 +1,148 @@ -# getGJLevels21.php +# getGJLevels21 -Gets a list of levels. +> This endpoint is used to search levels by name and or filter ## Parameters -### Required Parameters +| Parameter | Description | Required | +| ----------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------- | +| `secret` | [Common secret](/reference/secrets.md) `Wmfd2893gb7` | Yes | +| `gameVersion` | [Game Version](#), 21 on 2.1 | | +| `binaryVersion` | [Binary Version](#), 35 on 2.113 | | +| `type` | Search type, [see values](#type). Defaults to most liked | | +| `str` | Search query, user ID or level list depending on `type` | Only on types 5 and 10 | +| `page` | Which page to request, defaults to 0 | | +| `total` | Currently unknown. Defaults to the amount of levels available up to 9999, but 0 or leaving it out also work. | | +| `gjp` | The [GJP](/topics/Algorithms/robtop-cipher.md) for the `accountID` | | +| `accountID` | The ID for the account which is doing the search. Only sent on types 8, 13 and 5 | | +| `gdw` | Whether the request is for GD World, either 0 or 1 | | +| `gauntlet` | The ID for the gauntlet being requested | | +| `diff` | Difficulty filter, [see values](#diff) | | +| `demonFilter` | Selects which demon difficulty to search, [see values](#demonFilter). If not sent will search all demon types | | +| `len` | Level length, [see values](#len) | | +| `uncompleted` | Uncompleted filter, either 0 or 1 | | +| `onlyCompleted` | Completed filter, either 0 or 1 | | +| `completedLevels` | Comma separated list of completed level IDs surrounded by `()` | Only when using (un)completed filters | +| `featured` | Featured filter, either 0 or 1 | | +| `original` | Original filter, either 0 or 1 | | +| `twoPlayer` | Two Player Mode filter, either 0 or 1 | | +| `coins` | Coins filter, either 0 or 1 | | +| `epic` | Epic filter, either 0 or 1 | | +| `noStar` | Unrated filter, either 0 or 1 | | +| `star` | Rated filter, either 0 or 1 | | +| `song` | Official (or custom) song ID, not sent when off | | +| `customSong` | Newgrounds song, 1 when on and uses `song` as the ID, not sent when off | | +| `followed` | Comma separated list of the followed user IDs | Only on type 12 | +| `local` | Whether to fetch "My Levels", either 0 or 1 | Only on type 5 | + +

+ type + +| Type | Description | +| :--: | --------------------------------------------------------------------------------- | +| 0 | Search query | +| 1 | Most downloaded | +| 2 | Most liked | +| 3 | Trending | +| 4 | Recent | +| 5 | User's levels, uses `str` as the **user ID** | +| 6 | Featured | +| 7 | Magic | +| 8 | Moderator sent levels | +| 10 | Level list (used in map packs), uses `str` as a comma separated list of level IDs | +| 11 | Awarded | +| 12 | Followed (see `followed` parameter) | +| 13 | Friends (login required) | +| 15 | Most liked in GD World | +| 16 | Hall of fame | +| 17 | Featured in GD World | +| 18 | Unknown (always empty, perhaps robtop only?) | +| 21 | Daily history | +| 22 | Weekly history | + +
+ +
+ diff + +| diff | Description | +| :--: | ---------------------------------------------------------- | +| -1 | N/A | +| -2 | Demons (see `demonFilter` for specifying demon difficulty) | +| 1 | Easy | +| 2 | Normal | +| 3 | Hard | +| 4 | Harder | +| 5 | Insane | + +
+ +
+ demonFilter + +| demonFilter | Description | +| :---------: | ------------- | +| 1 | Easy demon | +| 2 | Medium demon | +| 3 | Hard demon | +| 4 | Insane demon | +| 5 | Extreme demon | + +
+ +
+ len + +| len | Value | +| :-: | ------ | +| 0 | Tiny | +| 1 | Short | +| 2 | Medium | +| 3 | Long | +| 4 | XL | + +
-**secret** - Wmfd2893gb7 - -### Optional Parameters - -**gameVersion** - 21 - -**binaryVersion** - 35 - -**gdw** - 0 - -**accountID** - The account ID of the user who is searching the levels. Only sent when **type** is set to 8, 13 or when **type** is set to 5 and you are loading your own levels. - -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user who is searching the levels. Only sent when **type** is set to 5, 8 or 13. - -**gauntlet** - The ID of the gauntlet that's currently being loaded. - -**type** - Controls the fetch priority. By default it's most liked. - -| type | desc | -| ---- | ---- | -| 0 | most liked | -| 1 | most downloaded | -| 2 | default for the search button (also most liked) | -| 3 | trending | -| 4 | recent | -| 5 | user's levels (uses the player ID, **not the account ID,** in the `str` parameter to get which user) | -| 6 | featured | -| 7 | magic | -| 8 | moderator sent levels | -| 10 | list of specific levels (this uses the `str` parameter as a comma separated list of level IDs), used in map packs | -| 11 | recently awarded | -| 12 | levels from people you follow | -| 13 | friends | -| 15 | most liked in GD World | -| 16 | hall of fame | -| 17 | most featured in GD World | -| 18 | unknown because it's always empty (maybe mod or robtop only?) | -| 21 | Daily History | -| 22 | Weekly History | - -**str** - Search string, required when `type` is 5 or 10. - -**diff** - Difficulty filter. A list of integers denoting the different difficulties. Negative difficulties are ignored when any positive one is specified. - -| diff | desc | -| ---- | ---- | -| -1 | N/A (doesn't work, always returns no results) | -| -2 | Demons (use the `demonFilter` parameter to denote which demon type to search) (exclusive from -3) | -| -3 | Auto (exclusive from -2) | -| 1 | Easy | -| 2 | Normal | -| 3 | Hard | -| 4 | Harder | -| 5 | Insane | -| 6–10 | Easy to Extreme Demon, respectively | - -**len** - Length Filter. - -| len | desc | -| --- | ---- | -| 0 | Tiny | -| 1 | Short | -| 2 | Medium | -| 3 | Long | -| 4 | XL | - -**page** - Which page of levels you want to see. - -**total** - Current use is unknown, defaults to the amount of levels available, up to 9999. Most likely it's a caching system for avoiding excessive execution of expensive COUNT database queries. - -**count** - Size of a single page of levels. Capped at 10. - -**uncompleted** - Uncompleted filter. 0 for off, 1 for on. - -**onlyCompleted** - Completed filter. 0 for off, 1 for on. - -**featured** - Featured filter. 0 for off, 1 for on. - -**original** - Original filter. 0 for off, 1 for on. - -**twoPlayer** - Two Player Mode filter. 0 for off, 1 for on. - -**coins** - Coins filter. 0 for no coins, 1 for any amount of coins. - -**epic** - Epic filter. 0 for off, 1 for on. - -**noStar** - Unrated filter. Not sent when off, 1 for on. - -**star** - Rated filter. Not sent when off, 1 for on. - -**song** - Official song filter. Not sent when off. - -**customSong** - Enable newgrounds song filter, **song** parameter will be songID. Not sent when off. +## Response -**completedLevels** - A comma separated list of completed levels enclosed in brackets. Only sent if the uncompleted or completed filter is enabled. +A successful level search will return the data in the format -**followed** - Required if `type` is 12. A comma separated list of player IDs, **not account IDs** of the people you follow. +``` +levels#creators#songs#page info#hash +``` -**demonFilter** - Denotes which difficulty of demon to search for if `diff` is -2. If left out it will search for all demons, otherwise it's 1-5 for Easy to Extreme, respectively. +where: -## Response +- `levels` is a list of [Level Objects](#) separated by `|` +- `creators` is a list of creators separated by `|`, each in the format `userID:username:accountID` +- `songs` is a list of [Song Objects](#) separated by `~:~` +- `page info` is in the format `total:offset:amount` where: + - `total` - total number of levels for the query + - `offset` - offset from which the current page starts + - `amount` - number of levels per page (always 10 for the gd servers) +- `hash` is a hash of every level, see [Hashes](#) + -Returns a list of [level objects](/resources/server/level) separated by pipes `|` and sorted by the parameters, a list of objects denoting the authors sorted by increasing player ID (format is `PLAYERID:USERNAME:ACCOUNTID`) which are also separated by pipes `|`, and a list of [song objects](/resources/server/song) sorted by increasing song ID and separated by `~:~`. The indexers for each are `:`, `:` and `~|~` respectively. +If the request is not successful, it will return `-1` ## Example - - -### **Python** - -```py -import requests - -# This code gets the most recent epic-rated Hard Demons +```js +// pseudo code! +request({ + type: "POST", + url: "http://www.boomlings.com/database/getGJLevels21.php", + data: { + secret: "Wmfd2893gb7", + str: "bloodbath", + star: "1", + type: "0", + }, +}); +``` -data = { - "secret": "Wmfd2893gb7", - "type": 4, - "diff": -2, - "epic": 1, - "demonFilter": 3 -} +### Output -req = requests.post("http://boomlings.com/database/getGJLevels21.php", data=data) -print(req.text) ``` - -**Response** -```py -1:62282482:2:DEAD BEAT:5:1:6:28770186:8:10:9:30:10:94536:12:0:13:21:14:2990:17:1:43:0:25::18:10:19:24971:42:1:45:56373:3:YWZ0ZXIgdGhyZWUgbW9udGhzIG9mIGhhcmQgd29yayBpIGZpbmFsbHkgcHJlc2VudCB0byB5b3UgdGhlIGxvbmcgYXdhaXRlZCBzZXF1ZWwgdG8gbXVyZGVyIG1lbG9keQ==:15:3:30:60376208:31:0:37:1:38:1:39:10:46:1:47:2:35:541786|1:62028241:2:Eternelle Vehemence:5:14:6:4761912:8:10:9:30:10:89174:12:0:13:21:14:5187:17:1:43:0:25::18:10:19:24968:42:1:45:65535:3:c3VmZmVyLCB1bnRpbCBldGVybml0eSBlbmRzLg==:15:4:30:0:31:0:37:3:38:1:39:10:46:1:47:2:35:896821|1:60927712:2:PERIHELION:5:1:6:9456326:8:10:9:30:10:8864:12:0:13:21:14:725:17:1:43:0:25::18:10:19:24970:42:1:45:65535:3:VG9vayBmb3JldmVyIHRvIG1ha2UsICBidXQgaXQgaXMgZmluYWxseSBoZXJlLiBSZWxsIC0gU21pbnggLSBHYWx6byAtIFdoaXRlaGVhZCAtIFNwdTduaXggLSBXaWsgLSBLbm90cyAtIEh5cGVyZmxhbWU=:15:3:30:51261866:31:0:37:0:38:1:39:10:46:1:47:2:35:790560|1:59502709:2:Supreme:5:4:6:2595697:8:10:9:30:10:48776:12:0:13:21:14:2471:17:1:43:0:25::18:10:19:24956:42:1:45:65535:3:aW5zZXJ0ICQzNTAgVVNEIHRvIHBsYXkgW0J5IENyZXBlcyAmIEVuWm9yZV0gZml4ZWQgYnVuY2ggb2YgYnVncyBhcm91bmQgOTAlICwgYW5kIGFkZGVkIFVMRE0gd2hlbiB5b3UgYWN0aXZhdGUgTERNICwgdXBkYXRlcyBjb21pbmcgc29vbg==:15:3:30:58794967:31:0:37:2:38:1:39:10:46:1:47:2:35:754856|1:59413155:2:HASH:5:1:6:1424041:8:10:9:30:10:28010:12:0:13:21:14:1576:17:1:43:0:25::18:10:19:24953:42:1:45:52312:3:YSBsZXZlbCB3aXRoIG1hbnkgY29sb3Vycy4=:15:3:30:52863418:31:0:37:0:38:0:39:10:46:1:47:2:35:216300|1:59352979:2:RANYER:5:5:6:9441630:8:10:9:30:10:93328:12:0:13:21:14:3681:17:1:43:0:25::18:10:19:24949:42:1:45:65535:3:YW1hemluZyBjb2xsYWJvcmF0aW9uIC4uIEkgaG9wZSB5b3UgbGlrZSBpdCAuLi4gd2l0aCBhIGxvdCBvZiBkZWRpY2F0aW9uIHdlIGJyaW5nIHlvdSByYW55ZXIgOikgZ29vZCBsdWNrIGFuZCBlbmpveSBpdCArOTAwMDAgT0JKIDowIExETT8gOyk=:15:3:30:59193188:31:0:37:1:38:1:39:10:46:1:47:2:35:658059|1:59315849:2:Double Dash:5:5:6:3624826:8:10:9:30:10:102653:12:0:13:21:14:11269:17:1:43:0:25::18:10:19:24953:42:1:45:65535:3:IkR1YWwgZ2FtZW1vZGUgaXMgdGhlIGJlc3QgZ2FtZW1vZGUiIH4gSm9uYXRoYW5HRCB8IEEgY29sb3JmdWwgMiBtaW51dGVzIG9mIG9ubHkgZHVhbHMgKCsgcGxheWVyIGNvbG9ycykgfCBHTCwgSEYsIGRvbid0IGRpZSBhdCA5OSUgOCk=:15:4:30:0:31:0:37:0:38:0:39:10:46:1:47:2:35:872453|1:59309294:2:Archaic:5:6:6:13003836:8:10:9:30:10:33708:12:0:13:21:14:1700:17:1:43:0:25::18:10:19:24949:42:1:45:65535:3:QW1hemluZyBjb2xsYWIgd2l0aCBWbGFpbmUgYW5kIE1yY3lsZGUsIGdhbWVwbGF5IGJ5IEVuem9yZSBhbmQgR2FycC4gRW5qb3l5ISE=:15:3:30:59045071:31:0:37:0:38:0:39:10:46:1:47:2:35:791611|1:58994346:2:Agios:5:2:6:18682953:8:10:9:30:10:67315:12:0:13:21:14:2226:17:1:43:0:25::18:10:19:24940:42:1:45:65535:3:N3RoIE5veHR1cm5hbCBUZWFtIE1DLCBXZSB1c2UgYSBsaXR0bGUgbmljZSB0aGVtZSBpbiB0aGlzISEgIEhvcGUgeW91IGVuam95IG91ciB3b3JrLi4gIFtWZXJpZmllZCBieSBTaXJaYWlzc10=:15:3:30:58581054:31:0:37:0:38:0:39:10:46:1:47:2:35:728233|1:58932971:2:Divine Descendance:5:5:6:11876184:8:10:9:30:10:11239:12:0:13:21:14:882:17:1:43:0:25::18:10:19:24960:42:1:45:65535:3:VmVyaWZpZWQgYnkgaVRodW5kZXIxMiwgdmlkZW8gb24gaGlzIFlUIGNoYW5uZWw=:15:3:30:0:31:0:37:3:38:1:39:10:46:1:47:2:35:713127#1424041:flash:127035|2595697:CrispyCrepes:117663|3624826:Zoroa:44967|4761912:Vrymer:411964|9441630:CatronixGD:1462499|9456326:Galzo:1463681|11876184:TroxxP1:2638799|13003836:SirZaiss:3749813|18682953:TeamNoX:5594928|28770186:swwft:6434750#1~|~216300~|~2~|~Necromancy (drum n bass)~|~3~|~772~|~4~|~zirconmusic~|~5~|~6.15~|~6~|~~|~10~|~http%3A%2F%2Faudio.ngfiles.com%2F216000%2F216300_04___Necromancy.mp3~|~7~|~~|~8~|~1~:~1~|~541786~|~2~|~NK - Fairydust~|~3~|~1895~|~4~|~Rukkus~|~5~|~7.37~|~6~|~~|~10~|~http%3A%2F%2Faudio.ngfiles.com%2F541000%2F541786_NK---Fairydust.mp3~|~7~|~~|~8~|~1~:~1~|~658059~|~2~|~Pursuit~|~3~|~2787~|~4~|~BoomKitty~|~5~|~7.28~|~6~|~~|~10~|~http%3A%2F%2Faudio.ngfiles.com%2F658000%2F658059_Pursuit.mp3~|~7~|~UCwHQ93ecuoQne93sgY-x8Nw~|~8~|~1~:~1~|~713127~|~2~|~Synergetic Enigma~|~3~|~1861~|~4~|~DanJohansen~|~5~|~10.21~|~6~|~~|~10~|~http%3A%2F%2Faudio.ngfiles.com%2F713000%2F713127_Synergetic-Enigma.mp3~|~7~|~~|~8~|~1~:~1~|~728233~|~2~|~FWLR - Badass Bae~|~3~|~50638~|~4~|~FWLRmusic~|~5~|~7.75~|~6~|~~|~10~|~https%3A%2F%2Faudio.ngfiles.com%2F728000%2F728233_FWLR---Badass-Bae.mp3%3Ff1486917017~|~7~|~~|~8~|~1~:~1~|~754856~|~2~|~[Complextro] Viscerality - Upgrade~|~3~|~48232~|~4~|~VisceralSounds~|~5~|~11.22~|~6~|~~|~10~|~http%3A%2F%2Faudio.ngfiles.com%2F754000%2F754856_Complextro-Viscerality---U.mp3~|~7~|~~|~8~|~1~:~1~|~790560~|~2~|~Forgathering Firefly~|~3~|~47526~|~4~|~Codly~|~5~|~12.79~|~6~|~~|~10~|~https%3A%2F%2Faudio.ngfiles.com%2F790000%2F790560_Forgathering-Firefly.mp3%3Ff1518710297~|~7~|~~|~8~|~1~:~1~|~791611~|~2~|~Viscerality - Bliss [Intervention EP]~|~3~|~48232~|~4~|~VisceralSounds~|~5~|~10.38~|~6~|~~|~10~|~https%3A%2F%2Faudio.ngfiles.com%2F791000%2F791611_Viscerality---Bliss-Interv.mp3%3Ff1519159342~|~7~|~~|~8~|~1~:~1~|~872453~|~2~|~Shining Sprinter~|~3~|~1068~|~4~|~megawolf77~|~5~|~3.51~|~6~|~~|~10~|~https%3A%2F%2Faudio.ngfiles.com%2F872000%2F872453_Shining-Sprinter.mp3%3Ff1562814299~|~7~|~~|~8~|~1~:~1~|~896821~|~2~|~Panda Eyes - Anybody Else~|~3~|~45754~|~4~|~PandaEyesOfficial~|~5~|~13.92~|~6~|~~|~10~|~https%3A%2F%2Faudio.ngfiles.com%2F896000%2F896821_Panda-Eyes---Anybody-Else.mp3%3Ff1575713545~|~7~|~~|~8~|~1#91:0:10#2a84bec46c4d1304c17b4c73252faf92be4dac24 +1:10565740:2:Bloodbath:5:3:6:503085:8:10:9:50:10:44138442:12:0:13:21:14:2375318:17:1:43:6:25::18:10:19:10330:42:0:45:24746:3:V2hvc2UgYmxvb2Qgd2lsbCBiZSBzcGlsdCBpbiB0aGUgQmxvb2RiYXRoPyBXaG8gd2lsbCB0aGUgdmljdG9ycyBiZT8gSG93IG1hbnkgd2lsbCBzdXJ2aXZlPyBHb29kIGx1Y2suLi4=:15:3:30:7679228:31:0:37:0:38:0:39:0:46:1:47:2:35:467339|1:21761387:2:Bloodbath Z:5:1:6:3277407:8:10:9:20:10:4556435:12:0:13:20:14:200369:17:1:43:4:25::18:10:19:17840:42:0:45:0:3:UmVtYWtlIG9mIEJCLCBidXQgU2hvcnRlciBhbmQgbXVjaCBlYXNpZXIgWEQgTW9yZSBvZiBhIGdhbWVwbGF5IGxldmVsISAgSnVzdCBhIGZ1biBlYXN5IGRlbW9uLiBWZXJpZmllZCBCeSBYaW9kYXplciEgRW5qb3kgOkQ=:15:3:30:0:31:0:37:3:38:1:39:10:46:1:47:2:35:223469|1:64968478:2:Bloodbath but no:5:1:6:19747356:8:10:9:50:10:652130:12:0:13:21:14:51559:17::43:6:25::18:8:19:24992:42:0:45:23233:3:Qmxvb2RiYXRoLCBJdCdzIG5vdCBldmVuIHRoaXM=:15:3:30:0:31:0:37:0:38:1:39:8:46:1:47:2:35:706340|1:75795864:2:Bloodbath:5:2:6:12348083:8:10:9:40:10:88763:12:0:13:21:14:4326:17::43:5:25::18:7:19:25025:42:0:45:55947:3:VGhhbmtzIHRvIGV2ZXJ5b25lIGluIG15IGRpc2NvcmQgc2VydmVyIHRoYXQgY29udHJpYnV0ZWQ=:15:3:30:0:31:0:37:0:38:1:39:6:46:1:47:2:35:513064#503085:Riot:37415|3277407:Zyzyx:88354|12348083:KNOEPPEL:3009121|19747356:Texic:6152129#1~|~223469~|~2~|~ParagonX9 - HyperioxX~|~3~|~31~|~4~|~ParagonX9~|~5~|~3.77~|~6~|~~|~10~|~http%3A%2F%2Faudio.ngfiles.com%2F223000%2F223469_ParagonX9___HyperioxX.mp3~|~7~|~~|~8~|~1~:~1~|~467339~|~2~|~At the Speed of Light~|~3~|~52~|~4~|~Dimrain47~|~5~|~9.56~|~6~|~~|~10~|~http%3A%2F%2Fgeometrydashcontent.com%2Fsongs%2F467339.mp3~|~7~|~~|~8~|~1~:~1~|~513064~|~2~|~EnV - Uprise~|~3~|~149~|~4~|~Envy~|~5~|~8.71~|~6~|~~|~10~|~http%3A%2F%2Faudio.ngfiles.com%2F513000%2F513064_EnV---Uprise.mp3~|~7~|~UCaRqE7rKwJl1BvMRU4FFVJQ~|~8~|~1~:~1~|~706340~|~2~|~-At the Speed of Light- (8 bit Remix)~|~3~|~46724~|~4~|~ThaPredator~|~5~|~4.78~|~6~|~~|~10~|~http%3A%2F%2Faudio.ngfiles.com%2F706000%2F706340_-At-the-Speed-of-Light--8-.mp3~|~7~|~~|~8~|~1#4:0:10#1664b8bb919b0822a4408752c37a9fb5f651f813 ``` - - diff --git a/docs/endpoints/readGJFriendRequest20.md b/docs/endpoints/readGJFriendRequest20.md index 867d4903f..c168f9a42 100644 --- a/docs/endpoints/readGJFriendRequest20.md +++ b/docs/endpoints/readGJFriendRequest20.md @@ -1,54 +1,29 @@ -# readGJFriendRequest20.php +# ReadFriendRequests -Marks a friend request as "read" +> This endpoint is used to read friend requests recieved from other players ## Parameters -### Required Parameters - -**accountID** - The accountID of the user reading the friend request - -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user reading the friend request - -**requestID** - The ID of the friend request - -**secret** - Wmfd2893gb7 - -### Optional Parameters - -**gameVersion** - 21 - -**binaryVersion** - 35 - -**gdw** - 0 +| Parameter | Explanation | Optional | +| :-------------- | :--------------------------------------------------------- | -------- | +| `gameVersion` | The Game Version the player is playing on | `True` | +| `binaryVersion` | The current build the player playing on | `True` | +| `gdw` | If the player is using Geometry Dash World | `True` | +| `accountID` | The player's account ID | `False` | +| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `requestID` | The ID for the friend request recieved | `False` | +| `secret` | The common secret: `Wmfd2893gb7` | `False` | ## Response -1 if the required parameters are met, otherwise -1 - -## Example - - - -### **Python** +**Successful Request** -```py -import requests - -data = { - 'accountID': 173831, # DevExit's account ID - 'gjp': "********", # This would be DevExit's password encoded with GJP encryption - 'requestID': 43199784, - 'secret': 'Wmfd2893gb7' -} - -r = requests.post('http://boomlings.com/database/readGJFriendRequest20.php', data=data) -print(req.text) -``` - -**Response** ```py 1 ``` - \ No newline at end of file +**Failed Request** + +```py +-1 +``` \ No newline at end of file diff --git a/docs/endpoints/uploadFriendRequest20.md b/docs/endpoints/uploadFriendRequest20.md index 5bf79915c..33c6ab44b 100644 --- a/docs/endpoints/uploadFriendRequest20.md +++ b/docs/endpoints/uploadFriendRequest20.md @@ -1,57 +1,29 @@ -# uploadFriendRequest20.php +# UploadFriendRequest -Sends a friend request to a user +> This endpont is used to send a friend request to other players ## Parameters -### Required Parameters - -**accountID** - Account ID of the user sending the friend request - -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user sending the friend request - -**toAccountID** - Account ID of the user receiving the friend request - -**secret** - Wmfd2893gb7 - -### Optional Parameters - -**gameVersion** - 21 - -**binaryVersion** - 35 - -**gdw** - 0 - -**comment** - The comment sent with the friend request encoded with [Base 64](/topics/encryption/base64), defaults to nothing if left out +| Parameter | Explanation | Optional | +| :-------------- | :----------------------------------------------------------------- | -------- | +| `gameVersion` | The Game Version the player is playing on | `True` | +| `binaryVersion` | The current build the player playing on | `True` | +| `gdw` | If the player is using Geometry Dash World | `True` | +| `accountID` | The player's account ID | `False` | +| `toAccountID` | The account which the player is trying to send a friend request to | `False` | +| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `secret` | The common secret: `Wmfd2893gb7` | `False` | ## Response -1 if the user hasn't sent a friend request to that account ID already, regardless of whether it exists or not, but returns a 500 error code if the user has already sent a friend request to that account +**Successful Request** -## Example - - - -### **Python** - -```py -import requests, base64 - -data = { - "accountID": 173831, # DevExit's account ID - "gjp": "********", # This would be DevExit's password encoded with GJP encryption - "toAccountID": 5317656, - "comment": base64.b64encode(b"Hello good sir!").decode(), - "secret": "Wmfd2893gb7", -} - -r = requests.post('http://boomlings.com/database/uploadFriendRequest20.php', data=data) -print(req.text) -``` - -**Response** ```py 1 ``` - \ No newline at end of file +**Failed Request** + +```py +-1 +``` \ No newline at end of file From e037fc740b41c245d096e4c55c4a5420dc47c63c Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 21:15:08 +0100 Subject: [PATCH 008/389] re-structure endpoints --- docs/_sidebar.md | 130 ++++++------ .../{ => accounts}/updateGJAccSettings20.md | 0 .../{ => comments}/deleteGJAccComment20.md | 0 .../{ => comments}/deleteGJComment20.md | 0 .../{ => comments}/getGJAccountComments20.md | 0 .../{ => comments}/getGJCommentHistory.md | 0 .../{ => comments}/getGJComments21.md | 0 .../{ => comments}/uploadGJAccComment20.md | 0 .../{ => comments}/uploadGJComment21.md | 0 .../{ => levels}/deleteGJLevelUser20.md | 0 .../{ => levels}/downloadGJLevel22.md | 0 .../endpoints/{ => levels}/getGJDailyLevel.md | 0 .../{ => levels}/getGJGauntlets21.md | 0 .../{ => levels}/getGJLevelScores211.md | 0 docs/endpoints/{ => levels}/getGJLevels21.md | 0 .../endpoints/{ => levels}/getGJMapPacks21.md | 0 docs/endpoints/{ => levels}/rateGJDemon21.md | 0 docs/endpoints/{ => levels}/rateGJStars211.md | 0 docs/endpoints/{ => levels}/reportGJLevel.md | 0 docs/endpoints/{ => levels}/suggestGJStars.md | 0 docs/endpoints/{ => levels}/updateGJDesc20.md | 0 .../endpoints/{ => levels}/uploadGJLevel21.md | 0 docs/endpoints/{ => misc}/getAccountURL.md | 0 docs/endpoints/{ => misc}/getSaveData.md | 0 docs/endpoints/{ => misc}/getTop1000.md | 0 docs/endpoints/{ => misc}/likeGJItem211.md | 0 .../endpoints/{ => misc}/requestUserAccess.md | 0 docs/endpoints/{ => misc}/restoreGJItems.md | 0 docs/endpoints/request.md | 200 ------------------ .../{ => rewards}/getGJChallenges.md | 0 docs/endpoints/{ => rewards}/getGJRewards.md | 0 .../{ => socials}/acceptGJFriendRequest20.md | 0 docs/endpoints/{ => socials}/blockGJUser20.md | 0 .../{ => socials}/deleteGJFriendRequests20.md | 0 .../{ => socials}/deleteGJMessages20.md | 0 .../{ => socials}/downloadGJMessage20.md | 0 .../{ => socials}/getGJFriendRequests20.md | 0 .../{ => socials}/getGJMessages20.md | 0 .../{ => socials}/getGJUserList20.md | 0 .../{ => socials}/readGJFriendRequest20.md | 0 .../{ => socials}/removeGJFriend20.md | 0 .../{ => socials}/unblockGJUser20.md | 0 .../{ => socials}/uploadFriendRequest20.md | 0 .../{ => socials}/uploadGJMessage20.md | 0 docs/endpoints/{ => songs}/getGJSongInfo.md | 0 docs/endpoints/{ => songs}/getGJTopArtists.md | 0 docs/endpoints/{ => songs}/testSong.md | 0 docs/endpoints/{ => users}/getGJScores20.md | 0 docs/endpoints/{ => users}/getGJUserInfo20.md | 0 docs/endpoints/{ => users}/getGJUsers20.md | 0 .../{ => users}/updateGJUserScore22.md | 0 51 files changed, 62 insertions(+), 268 deletions(-) rename docs/endpoints/{ => accounts}/updateGJAccSettings20.md (100%) rename docs/endpoints/{ => comments}/deleteGJAccComment20.md (100%) rename docs/endpoints/{ => comments}/deleteGJComment20.md (100%) rename docs/endpoints/{ => comments}/getGJAccountComments20.md (100%) rename docs/endpoints/{ => comments}/getGJCommentHistory.md (100%) rename docs/endpoints/{ => comments}/getGJComments21.md (100%) rename docs/endpoints/{ => comments}/uploadGJAccComment20.md (100%) rename docs/endpoints/{ => comments}/uploadGJComment21.md (100%) rename docs/endpoints/{ => levels}/deleteGJLevelUser20.md (100%) rename docs/endpoints/{ => levels}/downloadGJLevel22.md (100%) rename docs/endpoints/{ => levels}/getGJDailyLevel.md (100%) rename docs/endpoints/{ => levels}/getGJGauntlets21.md (100%) rename docs/endpoints/{ => levels}/getGJLevelScores211.md (100%) rename docs/endpoints/{ => levels}/getGJLevels21.md (100%) rename docs/endpoints/{ => levels}/getGJMapPacks21.md (100%) rename docs/endpoints/{ => levels}/rateGJDemon21.md (100%) rename docs/endpoints/{ => levels}/rateGJStars211.md (100%) rename docs/endpoints/{ => levels}/reportGJLevel.md (100%) rename docs/endpoints/{ => levels}/suggestGJStars.md (100%) rename docs/endpoints/{ => levels}/updateGJDesc20.md (100%) rename docs/endpoints/{ => levels}/uploadGJLevel21.md (100%) rename docs/endpoints/{ => misc}/getAccountURL.md (100%) rename docs/endpoints/{ => misc}/getSaveData.md (100%) rename docs/endpoints/{ => misc}/getTop1000.md (100%) rename docs/endpoints/{ => misc}/likeGJItem211.md (100%) rename docs/endpoints/{ => misc}/requestUserAccess.md (100%) rename docs/endpoints/{ => misc}/restoreGJItems.md (100%) delete mode 100644 docs/endpoints/request.md rename docs/endpoints/{ => rewards}/getGJChallenges.md (100%) rename docs/endpoints/{ => rewards}/getGJRewards.md (100%) rename docs/endpoints/{ => socials}/acceptGJFriendRequest20.md (100%) rename docs/endpoints/{ => socials}/blockGJUser20.md (100%) rename docs/endpoints/{ => socials}/deleteGJFriendRequests20.md (100%) rename docs/endpoints/{ => socials}/deleteGJMessages20.md (100%) rename docs/endpoints/{ => socials}/downloadGJMessage20.md (100%) rename docs/endpoints/{ => socials}/getGJFriendRequests20.md (100%) rename docs/endpoints/{ => socials}/getGJMessages20.md (100%) rename docs/endpoints/{ => socials}/getGJUserList20.md (100%) rename docs/endpoints/{ => socials}/readGJFriendRequest20.md (100%) rename docs/endpoints/{ => socials}/removeGJFriend20.md (100%) rename docs/endpoints/{ => socials}/unblockGJUser20.md (100%) rename docs/endpoints/{ => socials}/uploadFriendRequest20.md (100%) rename docs/endpoints/{ => socials}/uploadGJMessage20.md (100%) rename docs/endpoints/{ => songs}/getGJSongInfo.md (100%) rename docs/endpoints/{ => songs}/getGJTopArtists.md (100%) rename docs/endpoints/{ => songs}/testSong.md (100%) rename docs/endpoints/{ => users}/getGJScores20.md (100%) rename docs/endpoints/{ => users}/getGJUserInfo20.md (100%) rename docs/endpoints/{ => users}/getGJUsers20.md (100%) rename docs/endpoints/{ => users}/updateGJUserScore22.md (100%) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 8b3557d70..86055508b 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -42,73 +42,67 @@ - [Guideline String](/resources/client/level-components/guideline-string.md) **Endpoints** -- Comments - - [deleteGJAccComment20](/endpoints/deleteGJAccComment20.md) - - [deleteGJComment20](/endpoints/deleteGJComment20.md) - - [getGJAccountComments20](/endpoints/getGJAccountComments20.md) - - [getGJCommentHistory](/endpoints/getGJCommentHistory.md) - - [getGJComments21](/endpoints/getGJComments21.md) - - [uploadGJAccComment20](/endpoints/uploadGJAccComment20.md) - - [uploadGJComment21](/endpoints/uploadGJComment21.md) -- Level Packs - - [getGJGauntlets21](/endpoints/getGJGauntlets21.md) - - [getGJMapPacks21](/endpoints/getGJMapPacks21.md) -- Levels - - [deleteGJLevelUser20](/endpoints/deleteGJLevelUser20.md) - - [downloadGJLevel22](/endpoints/downloadGJLevel22.md) - - [getGJDailyLevel](/endpoints/getGJDailyLevel.md) - - [getGJLevels21](/endpoints/getGJLevels21.md) - - [rateGJDemon21](/endpoints/rateGJDemon21.md) - - [rateGJStars211](/endpoints/rateGJStars211.md) - - [reportGJLevel](/endpoints/reportGJLevel.md) - - [suggestGJStars](/endpoints/suggestGJStars.md) - - [updateGJDesc20](/endpoints/updateGJDesc20.md) - - [uploadGJLevel21](/endpoints/uploadGJLevel21.md) -- Messages - - [deleteGJMessages20](/endpoints/deleteGJMessages20.md) - - [downloadGJMessage20](/endpoints/downloadGJMessage20.md) - - [getGJMessages20](/endpoints/getGJMessages20.md) - - [uploadGJMessage20](/endpoints/uploadGJMessage20.md) -- Miscellaneous - - [getAccountURL](/endpoints/getAccountURL.md) - - [getTop1000](/endpoints/getTop1000.md) - - [getGJSongInfo](/endpoints/getGJSongInfo.md) - - [getGJTopArtists](/endpoints/getGJTopArtists.md) - - [getSaveData](/endpoints/getSaveData.md) - - [testSong](/endpoints/testSong.md) - - [likeGJItem211](/endpoints/likeGJItem211.md) - - [requestUserAccess](/endpoints/requestUserAccess.md) - - [restoreGJItems](/endpoints/restoreGJItems.md) -- Relationships - - [acceptGJFriendRequest20](/endpoints/acceptGJFriendRequest20.md) - - [blockGJUser20](/endpoints/blockGJUser20.md) - - [deleteGJFriendRequests20](/endpoints/deleteGJFriendRequests20.md) - - [getGJFriendRequests20](/endpoints/getGJFriendRequests20.md) - - [getGJUserList20](/endpoints/getGJUserList20.md) - - [readGJFriendRequest20](/endpoints/readGJFriendRequest20.md) - - [removeGJFriend20](/endpoints/removeGJFriend20.md) - - [unblockGJUser20](/endpoints/unblockGJUser20.md) - - [uploadFriendRequest20](/endpoints/uploadFriendRequest20.md) -- Rewards - - [getGJChallenges](/endpoints/getGJChallenges.md) - - [getGJRewards](/endpoints/getGJRewards.md) -- Scores - - [getGJLevelScores211](/endpoints/getGJLevelScores211.md) - - [getGJScores20](/endpoints/getGJScores20.md) -- Users - - - [getGJUserInfo20](/endpoints/getGJUserInfo20.md) - - [getGJUsers20](/endpoints/getGJUsers20.md) - - [updateGJAccSettings20](/endpoints/updateGJAccSettings20.md) - - [updateGJUserScore22](/endpoints/updateGJUserScore22.md) - -- **Accounts** - - [Login](/endpoints/accounts/loginGJAccount.md) - - [Registration](/endpoints/accounts/registerGJAccount.md) - -- **Account Server Endpoints** - - [Backup](/endpoints/accounts/backupGJAccountNew.md) - - [Sync](/endpoints/accounts/syncGJAccountNew.md) +**Accounts** + - [backupGJAccountNew](/endpoints/accounts/backupGJAccountNew.md) + - [syncGJAccountNew](/endpoints/accounts/syncGJAccountNew.md) + - [loginGJAccount](/endpoints/accounts/loginGJAccount.md) + - [registerGJAccount](/endpoints/accounts/registerGJAccount.md) + - [updateGJAccSettings20](/endpoints/accounts/updateGJAccSettings20.md) +**Users** + - [getGJScores20](/endpoints/users/getGJScores20.md) + - [getGJUserInfo20](/endpoints/users/getGJUserInfo20.md) + - [getGJUsers20](/endpoints/users/getGJUsers20.md) + - [updateGJUserScore22](/endpoints/users/updateGJUserScore22.md) +**Levels** + - [deleteGJLevelUser20](/endpoints/levels/deleteGJLevelUser20.md) + - [downloadGJLevel22](/endpoints/levels/downloadGJLevel22.md) + - [getGJDailyLevel](/endpoints/levels/getGJDailyLevel.md) + - [getGJGauntlets21](/endpoints/levels/getGJGauntlets21.md) + - [getGJLevels21](/endpoints/levels/getGJLevels21.md) + - [getGJLevelScores211](/endpoints/levels/getGJLevelScores211.md) + - [getGJMapPacks21](/endpoints/levels/getGJMapPacks21.md) + - [rateGJDemon21](/endpoints/levels/rateGJDemon21.md) + - [rateGJStars211](/endpoints/levels/rateGJStars211.md) + - [reportGJLevel](/endpoints/levels/reportGJLevel.md) + - [suggestGJStars](/endpoints/levels/suggestGJStars.md) + - [updateGJDesc20](/endpoints/levels/updateGJDesc20.md) + - [uploadGJLevel21](/endpoints/levels/uploadGJLevel21.md) +**Comments** + - [deleteGJAccComment20](/endpoints/comments/deleteGJAccComment20.md) + - [deleteGJComment20](/endpoints/comments/deleteGJComment20.md) + - [getGJAccountComments20](/endpoints/comments/getGJAccountComments20.md) + - [getGJCommentHistory](/endpoints/comments/getGJCommentHistory.md) + - [getGJComments21](/endpoints/comments/getGJComments21.md) + - [uploadGJAccComment20](/endpoints/comments/uploadGJAccComment20.md) + - [uploadGJComment21](/endpoints/comments/uploadGJComment21.md) +**Socials** + - [acceptGJFriendRequest20](/endpoints/socials/acceptGJFriendRequest20.md) + - [blockGJUser20](/endpoints/socials/blockGJUser20.md) + - [deleteGJFriendRequests20](/endpoints/socials/deleteGJFriendRequests20.md) + - [deleteGJMessages20](/endpoints/socials/deleteGJMessages20.md) + - [downloadGJMessage20](/endpoints/socials/downloadGJMessage20.md) + - [getGJFriendRequests20](/endpoints/socials/getGJFriendRequests20.md) + - [getGJMessages20](/endpoints/socials/getGJMessages20.md) + - [getGJUserList20](/endpoints/socials/getGJUserList20.md) + - [readGJFriendRequest20](/endpoints/socials/readGJFriendRequest20.md) + - [removeGJFriend20](/endpoints/socials/removeGJFriend20.md) + - [unblockGJUser20](/endpoints/socials/unblockGJUser20.md) + - [uploadFriendRequest20](/endpoints/socials/UploadFriendRequest20.md) + - [uploadGJMessage20](/endpoints/socials/uploadGJMessage20.md) +**Rewards** + - [getGJChallenges](/endpoints/rewards/getGJChallenges.md) + - [getGJRewards](/endpoints/rewards/getGJRewards.md) +**Songs** + - [getGJSongInfo](/endpoints/songs/getGJSongInfo.md) + - [getGJTopArtists](/endpoints/songs/getGJTopArtists.md) + - [testSong](/endpoints/songs/testSong.md) +**Misc** + - [getAccountURL](/endpoints/misc/getAccountURL.md) + - [getSaveData](/endpoints/misc/getSaveData.md) + - [getTop1000](/endpoints/misc/getTop1000.md) + - [likeGJItem211](/endpoints/misc/likeGJItem211.md) + - [requestUserAccess](/endpoints/misc/requestUserAccess.md) + - [restoreGJItems](/endpoints/misc/restoreGJItems.md) - **Topics** - [GJP](/topics/gjp.md) @@ -121,7 +115,7 @@ - [Tags](/topics/tags) -- **Encryption** +- **Algorithms** - [AES](topics/encryption/AES.md) - [Base64 Encoding](topics/encryption/base64.md) - [CHK Generation](topics/encryption/chk.md) diff --git a/docs/endpoints/updateGJAccSettings20.md b/docs/endpoints/accounts/updateGJAccSettings20.md similarity index 100% rename from docs/endpoints/updateGJAccSettings20.md rename to docs/endpoints/accounts/updateGJAccSettings20.md diff --git a/docs/endpoints/deleteGJAccComment20.md b/docs/endpoints/comments/deleteGJAccComment20.md similarity index 100% rename from docs/endpoints/deleteGJAccComment20.md rename to docs/endpoints/comments/deleteGJAccComment20.md diff --git a/docs/endpoints/deleteGJComment20.md b/docs/endpoints/comments/deleteGJComment20.md similarity index 100% rename from docs/endpoints/deleteGJComment20.md rename to docs/endpoints/comments/deleteGJComment20.md diff --git a/docs/endpoints/getGJAccountComments20.md b/docs/endpoints/comments/getGJAccountComments20.md similarity index 100% rename from docs/endpoints/getGJAccountComments20.md rename to docs/endpoints/comments/getGJAccountComments20.md diff --git a/docs/endpoints/getGJCommentHistory.md b/docs/endpoints/comments/getGJCommentHistory.md similarity index 100% rename from docs/endpoints/getGJCommentHistory.md rename to docs/endpoints/comments/getGJCommentHistory.md diff --git a/docs/endpoints/getGJComments21.md b/docs/endpoints/comments/getGJComments21.md similarity index 100% rename from docs/endpoints/getGJComments21.md rename to docs/endpoints/comments/getGJComments21.md diff --git a/docs/endpoints/uploadGJAccComment20.md b/docs/endpoints/comments/uploadGJAccComment20.md similarity index 100% rename from docs/endpoints/uploadGJAccComment20.md rename to docs/endpoints/comments/uploadGJAccComment20.md diff --git a/docs/endpoints/uploadGJComment21.md b/docs/endpoints/comments/uploadGJComment21.md similarity index 100% rename from docs/endpoints/uploadGJComment21.md rename to docs/endpoints/comments/uploadGJComment21.md diff --git a/docs/endpoints/deleteGJLevelUser20.md b/docs/endpoints/levels/deleteGJLevelUser20.md similarity index 100% rename from docs/endpoints/deleteGJLevelUser20.md rename to docs/endpoints/levels/deleteGJLevelUser20.md diff --git a/docs/endpoints/downloadGJLevel22.md b/docs/endpoints/levels/downloadGJLevel22.md similarity index 100% rename from docs/endpoints/downloadGJLevel22.md rename to docs/endpoints/levels/downloadGJLevel22.md diff --git a/docs/endpoints/getGJDailyLevel.md b/docs/endpoints/levels/getGJDailyLevel.md similarity index 100% rename from docs/endpoints/getGJDailyLevel.md rename to docs/endpoints/levels/getGJDailyLevel.md diff --git a/docs/endpoints/getGJGauntlets21.md b/docs/endpoints/levels/getGJGauntlets21.md similarity index 100% rename from docs/endpoints/getGJGauntlets21.md rename to docs/endpoints/levels/getGJGauntlets21.md diff --git a/docs/endpoints/getGJLevelScores211.md b/docs/endpoints/levels/getGJLevelScores211.md similarity index 100% rename from docs/endpoints/getGJLevelScores211.md rename to docs/endpoints/levels/getGJLevelScores211.md diff --git a/docs/endpoints/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md similarity index 100% rename from docs/endpoints/getGJLevels21.md rename to docs/endpoints/levels/getGJLevels21.md diff --git a/docs/endpoints/getGJMapPacks21.md b/docs/endpoints/levels/getGJMapPacks21.md similarity index 100% rename from docs/endpoints/getGJMapPacks21.md rename to docs/endpoints/levels/getGJMapPacks21.md diff --git a/docs/endpoints/rateGJDemon21.md b/docs/endpoints/levels/rateGJDemon21.md similarity index 100% rename from docs/endpoints/rateGJDemon21.md rename to docs/endpoints/levels/rateGJDemon21.md diff --git a/docs/endpoints/rateGJStars211.md b/docs/endpoints/levels/rateGJStars211.md similarity index 100% rename from docs/endpoints/rateGJStars211.md rename to docs/endpoints/levels/rateGJStars211.md diff --git a/docs/endpoints/reportGJLevel.md b/docs/endpoints/levels/reportGJLevel.md similarity index 100% rename from docs/endpoints/reportGJLevel.md rename to docs/endpoints/levels/reportGJLevel.md diff --git a/docs/endpoints/suggestGJStars.md b/docs/endpoints/levels/suggestGJStars.md similarity index 100% rename from docs/endpoints/suggestGJStars.md rename to docs/endpoints/levels/suggestGJStars.md diff --git a/docs/endpoints/updateGJDesc20.md b/docs/endpoints/levels/updateGJDesc20.md similarity index 100% rename from docs/endpoints/updateGJDesc20.md rename to docs/endpoints/levels/updateGJDesc20.md diff --git a/docs/endpoints/uploadGJLevel21.md b/docs/endpoints/levels/uploadGJLevel21.md similarity index 100% rename from docs/endpoints/uploadGJLevel21.md rename to docs/endpoints/levels/uploadGJLevel21.md diff --git a/docs/endpoints/getAccountURL.md b/docs/endpoints/misc/getAccountURL.md similarity index 100% rename from docs/endpoints/getAccountURL.md rename to docs/endpoints/misc/getAccountURL.md diff --git a/docs/endpoints/getSaveData.md b/docs/endpoints/misc/getSaveData.md similarity index 100% rename from docs/endpoints/getSaveData.md rename to docs/endpoints/misc/getSaveData.md diff --git a/docs/endpoints/getTop1000.md b/docs/endpoints/misc/getTop1000.md similarity index 100% rename from docs/endpoints/getTop1000.md rename to docs/endpoints/misc/getTop1000.md diff --git a/docs/endpoints/likeGJItem211.md b/docs/endpoints/misc/likeGJItem211.md similarity index 100% rename from docs/endpoints/likeGJItem211.md rename to docs/endpoints/misc/likeGJItem211.md diff --git a/docs/endpoints/requestUserAccess.md b/docs/endpoints/misc/requestUserAccess.md similarity index 100% rename from docs/endpoints/requestUserAccess.md rename to docs/endpoints/misc/requestUserAccess.md diff --git a/docs/endpoints/restoreGJItems.md b/docs/endpoints/misc/restoreGJItems.md similarity index 100% rename from docs/endpoints/restoreGJItems.md rename to docs/endpoints/misc/restoreGJItems.md diff --git a/docs/endpoints/request.md b/docs/endpoints/request.md deleted file mode 100644 index 317cc963a..000000000 --- a/docs/endpoints/request.md +++ /dev/null @@ -1,200 +0,0 @@ -# Request - -The **Geometry Dash** servers are based around one main HTTP server, rather than primarily through secondary sources or establishing a direct REST api for usage. All endpoints are stored over the `/database` folder, rather than the base. - -## Server/Database URL - -```plain -http://www.boomlings.com/database/ -``` - -## Requests - -Geometry Dash uses *POST* requests. The data is in the body field of the request. The body of a request is always structured in this way: - -```plain -param1=value1¶m2=value2¶m3... -``` - -Though many modern languages implement constructing data from mappings. - -## Server Responses - -Most server response are formatted in weird ways, not in more usual ways like **JSON**, or **XML**. Usually, they're formatted in a way that consists of `key:value`, not really in a way that gives each key a name; but is more similar to an ID system. Most responses will use the splitters `:`, `|`, or `#`, the last two being mostly to split between multiple response strings, usually seen in filtering endpoint such at `getGJLevels` or `getGJUsers`. - -### Example of a String - -```plain -1:61154556:2:Chillin:5:1:6:12901137:8:10:9:20:10:3348:12:0:13:21:14:373:17::43:4:25::18:3:19:24962:42:0:45:29651:3:UmVtYWtlIG9mIG15IG9sZCAyLjAgbGV2ZWwgY2FsbGVkIENoaWxsIHhkIEp1c3QgYSBzaW1wbGUgYW5kIGNoaWxsIGxldmVsLCBlbmpveSA6KQ==:15:3:30:0:31:0:37:0:38:1:39:3:46:1:47:2:35:669275 -``` - -## Examples - - - -### **PHP** - -```php - -``` - -### **Python** - -```py -import requests - -# sets the target url -url = "http://www.boomlings.com/database/[insert target file]" - -# creates data to send -data = { - "something": "value", "somethingElse": "otherValue" -} - -# sends request and reads the result -result = requests.post(url, data).text - -# outputs the site response -print(result) -``` - -### **Java** - -```java -/* - * Using Reactor Netty HTTP client - * https://github.com/reactor/reactor-netty - */ - -import static io.netty.buffer.Unpooled.wrappedBuffer; -import static java.nio.charset.StandardCharsets.UTF_8; - -import io.netty.buffer.ByteBuf; -import io.netty.handler.codec.http.HttpResponseStatus; -import reactor.core.publisher.Mono; -import reactor.netty.http.client.HttpClient; - -public class Main { - - public static void main(String[] args) { - // Creates data to send - ByteBuf data = wrappedBuffer(UTF_8.encode("something=value&somethingElse=otherValue")); - - // Creates HTTP client - HttpClient client = HttpClient.create() - .baseUrl("www.boomlings.com/database") - .headers(h -> { - h.add("Content-Type", "application/x-www-form-urlencoded"); - h.add("Content-Length", data.readableBytes()); - }); - - String response = client.post() // Creates the POST request - .uri("/[insert target file]") // Sets the target URL - .send(Mono.just(data)) // Sends the data - .responseSingle((responseHeader, responseBody) -> { - if (responseHeader.status().equals(HttpResponseStatus.OK)) { - // If 200 OK returns response body as string - return responseBody.asString().defaultIfEmpty(""); - } else { - // If not 200 OK throws an exception - return Mono.error(new RuntimeException(responseHeader.status().toString())); - } - }) - .block(); // awaits response - - System.out.println(response); // prints response body - } - -} - -``` - -### **NodeJS** - -```js -const http = require("http"); -const queryString = require("query-string"); - -// sets the target url -const target = "/database/[insert target file]"; - -// creates data to send -const data = queryString.stringify({ - something: "value", - somethingElse: "otherValue" -}); - -// sends a request -http.request({ - host: "boomlings.com", - path: target, - port: 80, - method: "POST", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - "Content-Length": Buffer.byteLength(data) - } -}, (res) => { - let output = ""; - - res.on("data", (chunk) => output += chunk); - - res.on("end", () => console.log(output)); -}).write(data); -``` - -### **Rust** - -```rust -use reqwest; - -// use the tokio runtime -#[tokio::main] -async fn main() -> reqwest::Result<()> { - // set the url - let uri = "http://www.boomlings.com/database/[insert target file]"; - - // create post values - let data = [ - ("something", "value"), - ("somethingElse", "otherValue") - ]; - - // send the request - let req = reqwest::Client::new() - .post(uri) - .form(&data) - .send() - .await?; - - // read the response - println!("{}", req.text().await?); - - Ok(()) -} -``` - - diff --git a/docs/endpoints/getGJChallenges.md b/docs/endpoints/rewards/getGJChallenges.md similarity index 100% rename from docs/endpoints/getGJChallenges.md rename to docs/endpoints/rewards/getGJChallenges.md diff --git a/docs/endpoints/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md similarity index 100% rename from docs/endpoints/getGJRewards.md rename to docs/endpoints/rewards/getGJRewards.md diff --git a/docs/endpoints/acceptGJFriendRequest20.md b/docs/endpoints/socials/acceptGJFriendRequest20.md similarity index 100% rename from docs/endpoints/acceptGJFriendRequest20.md rename to docs/endpoints/socials/acceptGJFriendRequest20.md diff --git a/docs/endpoints/blockGJUser20.md b/docs/endpoints/socials/blockGJUser20.md similarity index 100% rename from docs/endpoints/blockGJUser20.md rename to docs/endpoints/socials/blockGJUser20.md diff --git a/docs/endpoints/deleteGJFriendRequests20.md b/docs/endpoints/socials/deleteGJFriendRequests20.md similarity index 100% rename from docs/endpoints/deleteGJFriendRequests20.md rename to docs/endpoints/socials/deleteGJFriendRequests20.md diff --git a/docs/endpoints/deleteGJMessages20.md b/docs/endpoints/socials/deleteGJMessages20.md similarity index 100% rename from docs/endpoints/deleteGJMessages20.md rename to docs/endpoints/socials/deleteGJMessages20.md diff --git a/docs/endpoints/downloadGJMessage20.md b/docs/endpoints/socials/downloadGJMessage20.md similarity index 100% rename from docs/endpoints/downloadGJMessage20.md rename to docs/endpoints/socials/downloadGJMessage20.md diff --git a/docs/endpoints/getGJFriendRequests20.md b/docs/endpoints/socials/getGJFriendRequests20.md similarity index 100% rename from docs/endpoints/getGJFriendRequests20.md rename to docs/endpoints/socials/getGJFriendRequests20.md diff --git a/docs/endpoints/getGJMessages20.md b/docs/endpoints/socials/getGJMessages20.md similarity index 100% rename from docs/endpoints/getGJMessages20.md rename to docs/endpoints/socials/getGJMessages20.md diff --git a/docs/endpoints/getGJUserList20.md b/docs/endpoints/socials/getGJUserList20.md similarity index 100% rename from docs/endpoints/getGJUserList20.md rename to docs/endpoints/socials/getGJUserList20.md diff --git a/docs/endpoints/readGJFriendRequest20.md b/docs/endpoints/socials/readGJFriendRequest20.md similarity index 100% rename from docs/endpoints/readGJFriendRequest20.md rename to docs/endpoints/socials/readGJFriendRequest20.md diff --git a/docs/endpoints/removeGJFriend20.md b/docs/endpoints/socials/removeGJFriend20.md similarity index 100% rename from docs/endpoints/removeGJFriend20.md rename to docs/endpoints/socials/removeGJFriend20.md diff --git a/docs/endpoints/unblockGJUser20.md b/docs/endpoints/socials/unblockGJUser20.md similarity index 100% rename from docs/endpoints/unblockGJUser20.md rename to docs/endpoints/socials/unblockGJUser20.md diff --git a/docs/endpoints/uploadFriendRequest20.md b/docs/endpoints/socials/uploadFriendRequest20.md similarity index 100% rename from docs/endpoints/uploadFriendRequest20.md rename to docs/endpoints/socials/uploadFriendRequest20.md diff --git a/docs/endpoints/uploadGJMessage20.md b/docs/endpoints/socials/uploadGJMessage20.md similarity index 100% rename from docs/endpoints/uploadGJMessage20.md rename to docs/endpoints/socials/uploadGJMessage20.md diff --git a/docs/endpoints/getGJSongInfo.md b/docs/endpoints/songs/getGJSongInfo.md similarity index 100% rename from docs/endpoints/getGJSongInfo.md rename to docs/endpoints/songs/getGJSongInfo.md diff --git a/docs/endpoints/getGJTopArtists.md b/docs/endpoints/songs/getGJTopArtists.md similarity index 100% rename from docs/endpoints/getGJTopArtists.md rename to docs/endpoints/songs/getGJTopArtists.md diff --git a/docs/endpoints/testSong.md b/docs/endpoints/songs/testSong.md similarity index 100% rename from docs/endpoints/testSong.md rename to docs/endpoints/songs/testSong.md diff --git a/docs/endpoints/getGJScores20.md b/docs/endpoints/users/getGJScores20.md similarity index 100% rename from docs/endpoints/getGJScores20.md rename to docs/endpoints/users/getGJScores20.md diff --git a/docs/endpoints/getGJUserInfo20.md b/docs/endpoints/users/getGJUserInfo20.md similarity index 100% rename from docs/endpoints/getGJUserInfo20.md rename to docs/endpoints/users/getGJUserInfo20.md diff --git a/docs/endpoints/getGJUsers20.md b/docs/endpoints/users/getGJUsers20.md similarity index 100% rename from docs/endpoints/getGJUsers20.md rename to docs/endpoints/users/getGJUsers20.md diff --git a/docs/endpoints/updateGJUserScore22.md b/docs/endpoints/users/updateGJUserScore22.md similarity index 100% rename from docs/endpoints/updateGJUserScore22.md rename to docs/endpoints/users/updateGJUserScore22.md From 3d0f0c3b17a81c137f78d2efa581497539b934f4 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 21:22:01 +0100 Subject: [PATCH 009/389] a --- assets/screenshots/admin_secret.png | Bin 0 -> 5653 bytes assets/screenshots/colour_tags.png | Bin 0 -> 92045 bytes assets/screenshots/leaked_songs.png | Bin 0 -> 4067 bytes docs/_sidebar.md | 1 - docs/reference/secrets.md | 2 +- docs/reference/songs.md | 2 +- docs/topics/tags.md | 61 ++++++++++++++++++---------- 7 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 assets/screenshots/admin_secret.png create mode 100644 assets/screenshots/colour_tags.png create mode 100644 assets/screenshots/leaked_songs.png diff --git a/assets/screenshots/admin_secret.png b/assets/screenshots/admin_secret.png new file mode 100644 index 0000000000000000000000000000000000000000..3a881425900b6751078a2a84098f933f90753701 GIT binary patch literal 5653 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

Ns=Spx<;aSBW@ux1w9VUXqc~!rp2>P2@ez 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

hP0B<`!{vP+EyesmY>o%OC-5Rg9*9FevA zmd%aQ{27NYMPRckidqbY}9}^J;?WUXBr`c!!b-*ibQ+kEBAUQ zpJKG|{^QDHhT!IERc?4|=+$4Cg+8D{W|CDhs(pDH2^5!AUOI)_3>VoSSL#=Y6`GVP z@X~p20xKau!WVfPLcj25qTZYCK@d%W&^6&r8EA_3duLF|)M9~-VB=?z(y}Cnc#Dpc zarhXZLvk{(@^%_5_4Kyw;0!g#HuIKjQ@<~}iK2wy6*KuJS3yfVibUb^JL3S?@3t5e z{qtN1FNibiZ*WlPrYUH5J7(RR_zT2Yd5r%3SWFy?qBI*I{?^cEC3`G^oZf;KaIPBQU3~7!612_rm=I zs9ALV4;dTipjJ;dBkzHSUtJbYWvAi)o!&g8VRr)_o?_bXVVBPe-oIk)L;aZ380wkn)@VCD`3IYC6@&l) literal 0 HcmV?d00001 diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 86055508b..78f847b11 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -103,7 +103,6 @@ - [likeGJItem211](/endpoints/misc/likeGJItem211.md) - [requestUserAccess](/endpoints/misc/requestUserAccess.md) - [restoreGJItems](/endpoints/misc/restoreGJItems.md) - - **Topics** - [GJP](/topics/gjp.md) - [Level Passwords](/topics/level_passwords.md) diff --git a/docs/reference/secrets.md b/docs/reference/secrets.md index 7a8a4dccb..eab443dfb 100644 --- a/docs/reference/secrets.md +++ b/docs/reference/secrets.md @@ -128,7 +128,7 @@

**Below is a screenshot of the Admin Secret being created from Geometry Dash 1.9. RobTop split it into 6 segments to obfuscate it.**
- + Currently, the Admin Secret no longer works as RobTop became aware of it
diff --git a/docs/reference/songs.md b/docs/reference/songs.md index 346aee49a..12e9b47db 100644 --- a/docs/reference/songs.md +++ b/docs/reference/songs.md @@ -81,7 +81,7 @@ **In 2019, Google removed various Geometry Dash clients from their playstore and RobTop accidentally uploaded a development build of update 2.2 when resolving the issue. In the game files, 2 new songs can be found.** Explorers by Hinkik and Firebird by MDK - + *Firebird was confirmed by RobTop to be fake however, another MDK song was confirmed to be in the update with the codename: [Dash](https://www.youtube.com/watch?v=ipK7vQ8gEZw)* diff --git a/docs/topics/tags.md b/docs/topics/tags.md index f5669ec32..947d94f37 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -1,33 +1,50 @@ # Tags -Throughout Geometry Dash there are various interfaces in which the player an see specialised text. Specialised text is created using a custom tag which Robtop has created. As of Geometry Dash 2.11, there are 3 different types of tags. +> Various text interfaces within the Geometry Dash client can be manipulated using special tags similar to markup languages such as `HTML.` Geometry Dash has 3 primary types of tags -> - `` tags assign a specific colour depending on the letter you give you give it. All `` tags must be closed with `` otherwise the game will crash.

-> - `` tags manipulate the delay before a piece of text is sent within a dialog box. The speed you can set is within a range of `000` to `999` ms.

-> - `` tags are the simplest tags out of everything and all they do is make text appear immediately. `` tags must be closed with `` otherwise the game will crash. +- Colour Tags +- Instant Tags +- Delay Tags -## \ Tags +## Colour Tags -There are `9` different colour tags that are usable in Geometry Dash. below is a table of them all + + -**Note:** The `\` in the examples are **not** a part of a tag! It has been placed there to show the colour of the tag with the game still showing the tag as plain text. +> Colour Tags are used to style areas of text with colour. They contain both a start and an end tag - the start tag defining which colour should be rendered on screen and the end tag denoting when to stop reading. -| tag | Colour | Hex Code | -|:----|:-------|:---------| -| `` | ![Orange](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/orange.png) | `0xFFA54B` | -| `` | ![Yellow](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/yellow.png) | `0xFFFF48` -| `` | ![Green](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/green.png) | `0x40E348` | -| `` | ![Light Blue](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/lightBlue.png) | `0x32C8FF` | -| `` | ![Blue](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/blue.png) | `0x4A52E1` | -| `` | ![Purple](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/purple.png) | `0xFF00FF` -| `` | ![Very Light Blue](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/veryLightBlue.png) | `0x60ABEF` | -| `` | ![Red](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/red.png) | `0xFFA548` | -| `` | ![dark Red](https://raw.githubusercontent.com/Wyliemaster/gddocs/client/assets/examples/tags/any.png) | `0xFF0000` | +**Usage:** `Coloured Text!` -## \ Tags + -`` tags are used to create a delay before a specific string in dialog boxes. The game detects a `Delay Tag` if the string contains a `` | `0x4A52E1` | Sample | +| `` | `0x40E348` | Sample | +| `` | `0x60ABEF` | Sample | +| `` | `0x32C8FF` | Sample | +| `` | `0xFFFF00` | Sample | +| `` | `0xFF5A4B` | Sample | +| `` | `0xFF5A5A` | Sample | +| `` | `0xFF00FF` | Sample | +| `Default` | `0xFF0000` | Sample | -## \ Tags +## Instant Tags -`` tags are the complete opposite to `Delay Tags` as they display text instantly rather than after a delay. `` tags also require a closing tag which is `` so the game does not crash when parsing the string. An example of an `` tag can be found [here](https://github.com/Wyliemaster/gddocs/blob/client/assets/examples/tags/I%20tags%20example.mp4?raw=true) \ No newline at end of file +> Instant Tags are used to render text on screen immediately without any delay. Similarly to colour tags, Instant tags have a start and end tag to denote which piece of text should appear instantly. + +**Usage:** `WHAT???!` + +## Delay Tags + +> Delay tags are used to create a delay before a specific string in dialog boxes. The game detects a Delay Tag if the string contains a `...` + +## Notes + +- Failing to add an end tag for Colour tags and Instant tags will result in the game crashing + +- Only Colour tags are usable without modifying the client - via level descriptions and comment bans + +- The tags are defined within the `MultilineBitmapFont` class and are sometimes disabled within the create method using a bool \ No newline at end of file From b54cee59f1a6e7783ed16c5b1e248fbbfceb7b7e Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 21:22:59 +0100 Subject: [PATCH 010/389] style fix --- docs/topics/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 947d94f37..72d5550f5 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -15,7 +15,7 @@ **Usage:** `Coloured Text!` - + | Tag | Colour Code | Example (Website Only) | | :-------- | :---------- | :----------------------------------------------------- | From 3bf6b31210833ed2b60204f47cb17363df356852 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 21:33:12 +0100 Subject: [PATCH 011/389] smol --- docs/CREDITS.md | 2 +- docs/_sidebar.md | 2 +- docs/index.html | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/CREDITS.md b/docs/CREDITS.md index 6ad52bb80..7db0c3808 100644 --- a/docs/CREDITS.md +++ b/docs/CREDITS.md @@ -13,7 +13,7 @@ - [Nora](https://github.com/naoei) - [Rekkon](https://github.com/Rekkonnect) - [zmx](https://github.com/qimiko) - +- [13laze](https://github.com/KiFilterFiberContext) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 78f847b11..67310b105 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -10,7 +10,7 @@ - [Credits](/CREDITS) -- **Resources** +**Resources** - **Server** - [Comment](/resources/server/comment.md) diff --git a/docs/index.html b/docs/index.html index b785ba6bf..c32fee13d 100644 --- a/docs/index.html +++ b/docs/index.html @@ -16,7 +16,7 @@ - + @@ -63,7 +63,6 @@ - From 9993baa8a11380dbb856b63fbec123a31de2d1b0 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 21:36:13 +0100 Subject: [PATCH 012/389] Remove uneeded item of sidebar --- docs/_sidebar.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 67310b105..ff5cad10b 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -1,6 +1,5 @@ -- [Home](/) - [Reference]() - [Official Songs](/reference/songs) - [Secrets](/reference/secrets) From 1e9c45e7170ab0af9722278b97dd97bec3631dc5 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 31 May 2023 21:50:05 +0100 Subject: [PATCH 013/389] hierarchy fix --- docs/resources/server/friendrequest.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/server/friendrequest.md b/docs/resources/server/friendrequest.md index c915465b6..c72dec8ce 100644 --- a/docs/resources/server/friendrequest.md +++ b/docs/resources/server/friendrequest.md @@ -17,7 +17,7 @@ The server response returns a [User String](/resources/server/user) in a respons Each `key` is tied to a component within the client and the `value` sets data for the specific component. A list of all known keys can be found in the table below -#### Friend Request Structure +### Friend Request Structure **Note:** We will use "other user" to describe the user on the other side of the friend request, be it the receiving end or the sending end. @@ -36,6 +36,6 @@ A list of all known keys can be found in the table below | 37 | age | **String** | How long ago the friend request was sent (e.g. "2 months") | 41 | NewFriendRequest | **Bool** | if the friend request is new -### Trivia +#### Trivia - By sending yourself a friend request through 3rd party tools, you can actually block yourself. Doing so doesn't have any serious consequences as you can see in this [video by Cvolton](https://www.youtube.com/watch?v=R18tKYFrIqE) From a51122f7d9920ec4e24861ce2ae669e0630e1efb Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Thu, 3 Aug 2023 05:30:09 +0200 Subject: [PATCH 014/389] Fix the testSong example to use GET --- docs/endpoints/songs/testSong.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/songs/testSong.md b/docs/endpoints/songs/testSong.md index 48d6acf37..eca9e63fc 100644 --- a/docs/endpoints/songs/testSong.md +++ b/docs/endpoints/songs/testSong.md @@ -23,7 +23,7 @@ import requests songID = 787311 -req = requests.post(f'http://boomlings.com/database/testSong.php?songID={songID}') +req = requests.get(f'http://boomlings.com/database/testSong.php?songID={songID}') print(req.text) ``` @@ -42,4 +42,4 @@ Song: Newbie - Space External API allowed. ``` - \ No newline at end of file + From a10c8ac1f986a26eeb7ebcbacf193ce27bf39440 Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Thu, 31 Aug 2023 19:02:02 +0200 Subject: [PATCH 015/389] update, improve and fix code examples #1 (#25) * improve code examples of getGJLevels * improve code examples of downloadGJLevel changed the levelID because the previous one doesn't exist anymore * update code example of uploadGJLevel * fix minor stuff * tabs here for some reason * change tabs to spaces --- docs/endpoints/levels/downloadGJLevel22.md | 24 ++++++--- docs/endpoints/levels/getGJLevels21.md | 45 ++++++++++++----- docs/endpoints/levels/uploadGJLevel21.md | 59 ++++++++++++---------- 3 files changed, 82 insertions(+), 46 deletions(-) diff --git a/docs/endpoints/levels/downloadGJLevel22.md b/docs/endpoints/levels/downloadGJLevel22.md index dc551a9e9..3a339881c 100644 --- a/docs/endpoints/levels/downloadGJLevel22.md +++ b/docs/endpoints/levels/downloadGJLevel22.md @@ -47,20 +47,32 @@ Returns a [level object](/resources/server/level.md). ```py import requests -# With this code we are getting the level info of Test by DevExit +headers = { + "User-Agent": "" +} data = { - "levelID": 62687277, - "secret": "Wmfd2893gb7" + "levelID": 128, + "secret": "Wmfd2893gb7" } -req = requests.post("http://boomlings.com/database/downloadGJLevel22.php", data=data) +url = "http://www.boomlings.com/database/downloadGJLevel22.php" + +req = requests.post(url=url, data=data, headers=headers) print(req.text) ``` +### **curl** + +```plain +curl http://www.boomlings.com/database/downloadGJLevel22.php -A "" -d "levelID=128&secret=Wmfd2893gb7" +``` + + + **Response** -```py -1:62687277:2:Test:3:QSB0ZXN0IGxldmVsIGZvciB0aGUgR0QgRG9jcyE=:4:H4sIAAAAAAAAC6WQwQ3DIAxFF3IlfxsIUU6ZIQP8AbJChy_GPSZqpF7-A4yfDOfhXcCiNMIqnVYrgYQl8rDwBTZCVbkQRI3oVHbiDU6F2jMF_lesl4q4kw2PJMbovxLBQxTpM3-I6q0oHmXjzx7N0240cu5w0UBNtESRkble8uSLHjh8nTubmYJZ2MvMrEITEN0gEJMxlLiMZ28frmj:5:1:6:3935672:8:0:9:0:10:1:12:0:13:21:14:0:17::43:0:25::18:0:19:0:42:0:45:1:15:0:30:55610687:31:0:28:1 hour:29:1 hour:35:546561:36::37:0:38:0:39:50:46::47::40::27:AQcHBwEL#1bae6491cc87c72326abcbc0a7afaee139aa7088#f17c5a61f4ba1c7512081132459ddfaaa7c6f716 +```plain +1:128:2:1st level:3::4:H4sIAAAAAAAAC6WXUZLkIAiGL5StEgWV2qc5wxzAA8wV9vDbielEvumprtp9if3_AiIi0l-fpW8yNI08JNsoI5sNkTnkOUyyDkkpjTZkiO2fPtLoQ_7IOLRTfqst_6qt45dME_7SxC4zFd65kMeu-n829KX-Hr6nfnq3DfvRjfTeidtM_cHM9vUhZUv7YHOoc9Dt8Z2_22TOoe_DZ_ED5eM7DRwTH3p856ykOciWfssmW95yt61sYicsEqEGqCXCGqEHaPmCfYcWZ3uYrRJhXLe2AFuKMHrVbq8eE3nrhx_5CV0C3A804Iz5gnm9zdUdW4yYtBhQ6ZjvcWvZDRgHknAiSYEbDjABF-AaIl3EI84ZOPpXmDDMmCVlDn3FestJHwEt8_jyU79jvY71HOs51vMWsKYEjBxOS7r4QRwBqReWDGxPfOhL9E8L7BdckhJviWqMt6oBx4uiJsC4ohbzQWsChn8d8XLEywswLz1ufcrAuPcpxstEgBU4-mfFgGN8zCrw4l_ZiXYs-FhlL7NXNTq0NFkkSiOhJATE436AMBL5JhC8iRX4cqLi8td5-RX4drLOanAbOKtBuokZrnITTiLFfZ7Evc_T6HfCsMpKOIiz7BQQq4S9JJa9nKWJxOLYWawSiGVzs3ytRHspsdpoIOYzuagoQ6j1pcQ3GytRSTg2pzw5YwiNIZyv8ErwGM5nu0BlIWZBX2ycFX6RUEooJRolGiTmm79INOZYY46dbUKBykow-RvTsjGmnTHtjGlnCPsawryI-N3QxKLaUqwLTTKwAcei2rIAKzAaqsKOKhb9VipwbBqawj-Ffwr_0DQ1PGLNYtFvNQGz5UP8KuLX4J9jvw57jv163G_HI9fxyPXlkTt70NhF9hKb0q4a8XzFblx7xB32HE1uuuzt_jiaOEcT52jiHH2_l5gvrgk45ouj6XON8XOL8XP8OXCDfxX-4f-B15gv3hIw_GsxX7zFfPEO_66m9C_bF5V-dQ8AAA==:5:1:6:30144023:8:10:9:30:10:2147720:12:4:13:21:14:206221:17::43:0:25::18:0:19:0:42:0:45:208:15:2:30:128:31:0:28:10 years:29:6 years:35:0:36:0_46_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0:37:0:38:0:39:2:46::47::40::27:Aw==#30c4a15cfeb12f97de69d6bd0cc9478794e6c6c4#48e36e24b267df00a9c87aed127b4a9f020ac9c1 ``` diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index e646299d8..988c93658 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -125,22 +125,39 @@ where: If the request is not successful, it will return `-1` -## Example - -```js -// pseudo code! -request({ - type: "POST", - url: "http://www.boomlings.com/database/getGJLevels21.php", - data: { - secret: "Wmfd2893gb7", - str: "bloodbath", - star: "1", - type: "0", - }, -}); + + + +### **Python** + +```py +import requests + +headers = { + "User-Agent": "" +} + +data = { + "str": "bloodbath", + "star": 1, + "type": 0, + "secret": "Wmfd2893gb7", +} + +url = "http://www.boomlings.com/database/getGJLevels21.php" + +req = requests.post(url=url, data=data, headers=headers) +print(req.text) ``` +### **curl** + +```plain +curl http://www.boomlings.com/database/getGJLevels21.php -A "" -d "str=bloodbath&star=1&type=0&secret=Wmfd2893gb7" +``` + + + ### Output ``` diff --git a/docs/endpoints/levels/uploadGJLevel21.md b/docs/endpoints/levels/uploadGJLevel21.md index 74df84c41..8aced6e98 100644 --- a/docs/endpoints/levels/uploadGJLevel21.md +++ b/docs/endpoints/levels/uploadGJLevel21.md @@ -87,39 +87,46 @@ import requests levelString = "H4sIAAAAAAAAC6WQwQ3DIAxFF3IlfxsIUU6ZIQP8AbJChy_GPSZqpF7-A4yfDOfhXcCiNMIqnVYrgYQl8rDwBTZCVbkQRI3oVHbiDU6F2jMF_lesl4q4kw2PJMbovxLBQxTpM3-I6q0oHmXjzx7N0240cu5w0UBNtESRkble8uSLHjh8nTubmYJZ2MvMrEITEN0gEJMxlLiMZ28frmj" data = { - "gameVersion": 21, - "accountID": 173831, # This is DevExit's account ID - "gjp": "*******", # This would be DevExit's password encoded with GJP encryption - "userName": "devexit", - "levelID": 0, - "levelName": "Test", # The level name is Test - "levelDesc": "QSB0ZXN0IGxldmVsIGZvciB0aGUgR0QgRG9jcyE", # "A test level for the GD Docs!" - "levelVersion": 1, - "levelLength": 0, - "audioTrack": 0, # This uses a newgrounds song - "auto": 0, - "password": 314159, - "original": 55610687, - "twoPlayer": 0, - "songID": 546561, # NK - Jawbreaker - "objects": 1, - "coins": 0, - "requestedStars": 50, - "unlisted": 1, # This level is unlisted, but does exist! - "ldm": 0, - "levelString": levelString, # The level string for the level described above - "seed2": generate_chk(key="41274", values=[generate_upload_seed(levelString)], salt="xI25fpAapCQg"), # This is talked about in the CHK encryption, - "secret": "Wmfd2893gb7" + "gameVersion": 21, + "accountID": 173831, # This is DevExit's account ID + "gjp": "*******", # This would be DevExit's password encoded with GJP encryption + "userName": "devexit", + "levelID": 0, + "levelName": "Test", # The level name is Test + "levelDesc": "QSB0ZXN0IGxldmVsIGZvciB0aGUgR0QgRG9jcyE", # "A test level for the GD Docs!" + "levelVersion": 1, + "levelLength": 0, + "audioTrack": 0, # This uses a newgrounds song + "auto": 0, + "password": 314159, + "original": 55610687, + "twoPlayer": 0, + "songID": 546561, # NK - Jawbreaker + "objects": 1, + "coins": 0, + "requestedStars": 50, + "unlisted": 1, # This level is unlisted, but does exist! + "ldm": 0, + "levelString": levelString, # The level string for the level described above + "seed2": generate_chk(key="41274", values=[generate_upload_seed(levelString)], salt="xI25fpAapCQg"), # This is talked about in the CHK encryption, + "secret": "Wmfd2893gb7" } -req = requests.post("http://boomlings.com/database/uploadGJLevel21.php", data=data) +headers = { + "User-Agent": "" +} + +url = "http://www.boomlings.com/database/uploadGJLevel21.php" + +req = requests.post(url=url, data=data, headers=headers) print(req.text) ``` + + **Response** -```py +```plain 62687277 ``` - From c37b53666b7214a708cb051d8cf1332d26f4c60e Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Mon, 30 Oct 2023 00:14:05 +0000 Subject: [PATCH 016/389] Fix mistake in GSM --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index a255d2ec0..da77f0354 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -26,7 +26,7 @@ GS values contain Information regarding certain aspects of the game | 18 | Poison Shards | | 19 | Shadow Shards | | 20 | Lava Shards | -| 21 | Bonus Shards | +| 21 | Demon Keys| | 22 | Total Orbs Collected | | unique_{LevelID}_{Coins Collected} | The Coins Collected on the Official Levels From e985ff0d53f750078e90e21016670518e3390255 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Sun, 12 Nov 2023 22:44:19 +0000 Subject: [PATCH 017/389] Create getGJLevelLists.md --- docs/temp/wip/2.2/getGJLevelLists.md | 69 ++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 docs/temp/wip/2.2/getGJLevelLists.md diff --git a/docs/temp/wip/2.2/getGJLevelLists.md b/docs/temp/wip/2.2/getGJLevelLists.md new file mode 100644 index 000000000..5d8c38831 --- /dev/null +++ b/docs/temp/wip/2.2/getGJLevelLists.md @@ -0,0 +1,69 @@ +# getGJLevelLists.php + +Gets a list of levels. + +## Parameters + +### Required Parameters + +**secret** - Wmfd2893gb7 + +### Optional Parameters + +**accountID** - The account ID of the user who is searching the levels. Only sent when **type** is set to 8, 13 or when **type** is set to 5 and you are loading your own levels. + +**type** - Controls the fetch priority. + +| type | desc | +| ---- | ---- | +| 0 | most liked | +| 1 | most downloaded | +| 4 | recent | +| 5 | user's levels (uses the player ID, **not the account ID,** in the `str` parameter to get which user) | +| 6 | featured | +| 11 | recently awarded | +| 12 | levels from people you follow | +| 13 | friends | + + +**str** - Search string, required when `type` is 5 + +**diff** - Difficulty filter. A list of integers denoting the different difficulties. Negative difficulties are ignored when any positive one is specified. + +| diff | desc | +| ---- | ---- | +| -1 | N/A (doesn't work, always returns no results) | +| -2 | Demons (use the `demonFilter` parameter to denote which demon type to search) (exclusive from -3) | +| -3 | Auto (exclusive from -2) | +| 1 | Easy | +| 2 | Normal | +| 3 | Hard | +| 4 | Harder | +| 5 | Insane | +| 6–10 | Easy to Extreme Demon, respectively | + +**star** - Rated filter. Not sent when off, 1 for on. + +**followed** - Required if `type` is 12. A comma separated list of player IDs, **not account IDs** of the people you follow. + +## Response + +Returns a list of [level objects](/resources/server/level) separated by pipes `|` and sorted by the parameters, a list of objects denoting the authors sorted by increasing player ID (format is `PLAYERID:USERNAME:ACCOUNTID`) which are also separated by pipes `|`, and a list of [song objects](/resources/server/song) sorted by increasing song ID and separated by `~:~`. The indexers for each are `:`, `:` and `~|~` respectively. + +## Example + + + +### **curl** + +```cmd +curl -H "User-Agent:" http://www.boomlings.com/database/getGJLevelLists.php -X POST -d "secret=Wmfd2893gb7&type=6" +``` + + +**Response** +```py +1:17:2:The Demon Trial:3:Q2FuIHlvdSBiZWF0IGFueXRoaW5nPw==:5:1:49:1187377:50:YunHaSeu14:10:12:7:10:14:2:19:1:51:10565740,3979721,28220417,42584142:28:1687427379:29:0|1:16:2:My New List:3:U2Vjb25kIGxpc3QuIFRlc3RpbmcgdmVyc2lvbnMu:5:4:49:71:50:RobTop:10:11:7:1:14:1:19:1:51:91530036,91427162:28:1687427214:29:1687478036#16:RobTop:71|36314:YunHaSeu14:1187377#1:0:10#f5da5823d94bbe7208dd83a30ff427c7d88fdb99 +``` + + From 3026347afb524e72378459db493f014fcb06e208 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 27 Dec 2023 10:38:29 +0200 Subject: [PATCH 018/389] Update achievement.md --- docs/resources/client/gamesave/achievement.md | 313 ++++++++++++++++-- 1 file changed, 292 insertions(+), 21 deletions(-) diff --git a/docs/resources/client/gamesave/achievement.md b/docs/resources/client/gamesave/achievement.md index 2b7e8bc16..1c23ddd9a 100644 --- a/docs/resources/client/gamesave/achievement.md +++ b/docs/resources/client/gamesave/achievement.md @@ -1,12 +1,12 @@ # Achievements -Geometry Dash has 266 achievements that you can aquire, 2 of them are exclusive to the Steam version of the game. You can find out how to get all the achievements [here](https://geometry-dash.fandom.com/wiki/Achievements). +Geometry Dash has 581 achievements that you can acquire, 2 of them are exclusive to the Steam version of the game. You can find out how to get all the achievements [here](https://geometry-dash.fandom.com/wiki/Achievements). -keep in mind that adding the achievements into your save data manually will only show them as completed in game but won't give you the reward for the completion +Keep in mind that adding the achievements into your save data manually will only show them as completed in game, but won't give you the reward for the completion. ## Achievement key structure -Inside CCGameManager.dat, every achievement you have progress on can be found in the `reportedAchievements` Dictionary. they are all organised like this +Inside CCGameManager.dat, every achievement you have progress on can be found in the `reportedAchievements` dictionary. They are all organised like this: ```xml geometry.ach.[internal achievement name][percentage complete]geometry.ach.[internal achievement name][percentage complete] ``` @@ -57,8 +57,18 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.level20a | Beat Deadlocked in practice Mode | | geometry.ach.level21b | Beat Fingerdash in normal Mode | | geometry.ach.level21a | Beat Fingerdash in practice Mode | -| geometry.ach.steam01 | Beat Stereo Madness, Back On Track and Polargeist in normal mode (steam exlusive) | -| geometry.ach.steam02 | Beat Clubstep in normal mode (steam exlusive) | +| geometry.ach.level22b | Beat Dash in normal Mode | +| geometry.ach.level22a | Beat Dash in practice Mode | +| geometry.ach.tower01 | Beat The Tower| +| geometry.ach.tower02 | Beat The Sewers| +| geometry.ach.tower03 | Beat The Cellar| +| geometry.ach.tower04 | Beat The Secret Hollow| +| geometry.ach.tower01Coin | Beat The Tower with all 3 Coins| +| geometry.ach.tower02Coin | Beat The Sewers with all 3 Coins| +| geometry.ach.tower03Coin | Beat The Cellar with all 3 Coins| +| geometry.ach.tower04Coin | Beat The Secret Hollow with all 3 Coins| +| geometry.ach.steam01 | Beat Stereo Madness, Back On Track and Polargeist in normal mode (steam exclusive) | +| geometry.ach.steam02 | Beat Clubstep in normal mode (steam exclusive) | | geometry.ach.demoncoin01 | Beat Clubstep in with all coins| | geometry.ach.demoncoin02 | Beat Theory Of Everything 2 in with all coins| | geometry.ach.demoncoin03 | Beat Deadlocked in with all coins| @@ -72,14 +82,31 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.mappacks08 | Complete 35 Map Packs | | geometry.ach.mappacks09 | Complete 40 Map Packs | | geometry.ach.mappacks10 | Complete 45 Map Packs | +| geometry.ach.gauntlets01 | Complete 1 Gauntlet | +| geometry.ach.gauntlets02 | Complete 5 Gauntlets | +| geometry.ach.gauntlets03 | Complete 10 Gauntlets | +| geometry.ach.gauntlets04 | Complete 15 Gauntlets | +| geometry.ach.daily01 | Complete a Daily Level | +| geometry.ach.daily02 | Complete 25 Daily Levels | +| geometry.ach.daily03 | Complete 50 Daily Levels | +| geometry.ach.daily04 | Complete 100 Daily Levels | +| geometry.ach.daily05 | Complete 150 Daily Levels | +| geometry.ach.daily06 | Complete 250 Daily Levels | +| geometry.ach.daily07 | Complete 365 Daily Levels | | geometry.ach.custom01 | Complete 1 User Created Level in Normal Mode| -| geometry.ach.custom02 | Complete 10 User Created Level in Normal Mode| -| geometry.ach.custom03 | Complete 50 User Created Level in Normal Mode| -| geometry.ach.custom04 | Complete 100 User Created Level in Normal Mode| -| geometry.ach.custom05 | Complete 200 User Created Level in Normal Mode| -| geometry.ach.custom06 | Complete 300 User Created Level in Normal Mode| -| geometry.ach.custom07 | Complete 500 User Created Level in Normal Mode| -| geometry.ach.custom08 | Complete 1,000 User Created Level in Normal Mode| +| geometry.ach.custom02 | Complete 10 User Created Levels in Normal Mode| +| geometry.ach.custom03 | Complete 50 User Created Levels in Normal Mode| +| geometry.ach.custom04 | Complete 100 User Created Levels in Normal Mode| +| geometry.ach.custom05 | Complete 200 User Created Levels in Normal Mode| +| geometry.ach.custom06 | Complete 300 User Created Levels in Normal Mode| +| geometry.ach.custom07 | Complete 500 User Created Levels in Normal Mode| +| geometry.ach.custom08 | Complete 1,000 User Created Levels in Normal Mode| +| geometry.ach.custom09 | Complete 1,500 User Created Levels in Normal Mode| +| geometry.ach.custom10 | Complete 2,000 User Created Levels in Normal Mode| +| geometry.ach.custom11 | Complete 2,500 User Created Levels in Normal Mode| +| geometry.ach.custom12 | Complete 3,000 User Created Levels in Normal Mode| +| geometry.ach.custom13 | Complete 4,000 User Created Levels in Normal Mode| +| geometry.ach.custom14 | Complete 5,000 User Created Levels in Normal Mode| | geometry.ach.stars01 | Collect 100 stars| | geometry.ach.stars02 | Collect 200 stars| | geometry.ach.stars03 | Collect 300 stars| @@ -106,6 +133,39 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.stars24 | Collect 8,000 stars| | geometry.ach.stars25 | Collect 9,000 stars| | geometry.ach.stars26 | Collect 10,000 stars| +| geometry.ach.stars27 | Collect 12,000 stars| +| geometry.ach.stars28 | Collect 14,000 stars| +| geometry.ach.stars29 | Collect 16,000 stars| +| geometry.ach.stars30 | Collect 18,000 stars| +| geometry.ach.stars31 | Collect 20,000 stars| +| geometry.ach.stars32 | Collect 22,500 stars| +| geometry.ach.stars33 | Collect 25,000 stars| +| geometry.ach.moons01 | Collect 100 moons| +| geometry.ach.moons02 | Collect 200 moons| +| geometry.ach.moons03 | Collect 300 moons| +| geometry.ach.moons04 | Collect 400 moons| +| geometry.ach.moons05 | Collect 500 moons| +| geometry.ach.moons06 | Collect 600 moons| +| geometry.ach.moons07 | Collect 700 moons| +| geometry.ach.moons08 | Collect 800 moons| +| geometry.ach.moons09 | Collect 900 moons| +| geometry.ach.moons10 | Collect 1,000 moons| +| geometry.ach.moons11 | Collect 1,500 moons| +| geometry.ach.moons12 | Collect 2,000 moons| +| geometry.ach.moons13 | Collect 2,500 moons| +| geometry.ach.moons14 | Collect 3,000 moons| +| geometry.ach.moons15 | Collect 3,500 moons| +| geometry.ach.moons16 | Collect 4,000 moons| +| geometry.ach.moons17 | Collect 4,500 moons| +| geometry.ach.moons18 | Collect 5,000 moons| +| geometry.ach.moons19 | Collect 5,500 moons| +| geometry.ach.moons20 | Collect 6,000 moons| +| geometry.ach.moons21 | Collect 6,500 moons| +| geometry.ach.moons22 | Collect 7,000 moons| +| geometry.ach.moons23 | Collect 7,500 moons| +| geometry.ach.moons24 | Collect 8,000 moons| +| geometry.ach.moons25 | Collect 9,000 moons| +| geometry.ach.moons26 | Collect 10,000 moons| | geometry.ach.demon01 | Beat 1 Demon| | geometry.ach.demon02 | Beat 2 Demons| | geometry.ach.demon03 | Beat 3 Demons| @@ -118,6 +178,22 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.demon10 | Beat 40 Demons| | geometry.ach.demon11 | Beat 50 Demons| | geometry.ach.demon12 | Beat 60 Demons| +| geometry.ach.demon13 | Beat 70 Demons| +| geometry.ach.demon14 | Beat 80 Demons| +| geometry.ach.demon15 | Beat 90 Demons| +| geometry.ach.demon16 | Beat 100 Demons| +| geometry.ach.demon17 | Beat 120 Demons| +| geometry.ach.demon18 | Beat 140 Demons| +| geometry.ach.demon19 | Beat 160 Demons| +| geometry.ach.demon20 | Beat 180 Demons| +| geometry.ach.demon21 | Beat 200 Demons| +| geometry.ach.demon22 | Beat 225 Demons| +| geometry.ach.demon23 | Beat 250 Demons| +| geometry.ach.demon24 | Beat 275 Demons| +| geometry.ach.demon25 | Beat 300 Demons| +| geometry.ach.demon26 | Beat 350 Demons| +| geometry.ach.demon27 | Beat 400 Demons| +| geometry.ach.demon28 | Beat 500 Demons| | geometry.ach.coins01 | Collect 5 Secret Coins| | geometry.ach.coins02 | Collect 10 Secret Coins| | geometry.ach.coins03 | Collect 15 Secret Coins| @@ -143,6 +219,9 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.coins23 | Collect 115 Secret Coins| | geometry.ach.coins24 | Collect 120 Secret Coins| | geometry.ach.coins25 | Collect 130 Secret Coins| +| geometry.ach.coins26 | Collect 140 Secret Coins| +| geometry.ach.coins27 | Collect 150 Secret Coins| +| geometry.ach.coins28 | Collect 160 Secret Coins| | geometry.ach.usercoins01 | Collect 1 user Coin| | geometry.ach.usercoins02 | Collect 10 user Coins| | geometry.ach.usercoins03 | Collect 20 user Coins| @@ -175,6 +254,14 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.usercoins30 | Collect 800 user Coins| | geometry.ach.usercoins31 | Collect 900 user Coins| | geometry.ach.usercoins32 | Collect 1,000 user Coins| +| geometry.ach.usercoins33 | Collect 1,200 user Coins| +| geometry.ach.usercoins34 | Collect 1,400 user Coins| +| geometry.ach.usercoins35 | Collect 1,600 user Coins| +| geometry.ach.usercoins36 | Collect 1,800 user Coins| +| geometry.ach.usercoins37 | Collect 2,000 user Coins| +| geometry.ach.usercoins38 | Collect 2,300 user Coins| +| geometry.ach.usercoins39 | Collect 2,600 user Coins| +| geometry.ach.usercoins40 | Collect 3,000 user Coins| | geometry.ach.diamonds01 | Collect 100 Diamonds| | geometry.ach.diamonds02 | Collect 250 Diamonds| | geometry.ach.diamonds03 | Collect 500 Diamonds| @@ -185,6 +272,20 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.diamonds08 | Collect 3,000 Diamonds| | geometry.ach.diamonds09 | Collect 4,000 Diamonds| | geometry.ach.diamonds10 | Collect 5,000 Diamonds| +| geometry.ach.diamonds11 | Collect 6,000 Diamonds| +| geometry.ach.diamonds12 | Collect 7,000 Diamonds| +| geometry.ach.diamonds13 | Collect 9,000 Diamonds| +| geometry.ach.diamonds14 | Collect 11,000 Diamonds| +| geometry.ach.diamonds15 | Collect 14,000 Diamonds| +| geometry.ach.diamonds16 | Collect 17,000 Diamonds| +| geometry.ach.diamonds17 | Collect 20,000 Diamonds| +| geometry.ach.diamonds18 | Collect 25,000 Diamonds| +| geometry.ach.lists01 | Claim a List Reward| +| geometry.ach.lists02 | Claim 25 List Rewards| +| geometry.ach.lists03 | Claim 50 List Rewards| +| geometry.ach.lists04 | Claim 100 List Rewards| +| geometry.ach.lists05 | Claim 150 List Rewards| +| geometry.ach.lists06 | Claim 200 List Rewards| | geometry.ach.shardFire01 | Collect 5 Fire Shards| | geometry.ach.shardFire02 | Collect 15 Fire Shards| | geometry.ach.shardFire03 | Collect 35 Fire Shards| @@ -210,28 +311,77 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.shardLava03 | Collect 35 Lava Shards| | geometry.ach.shardLava04 | Collect 65 Lava Shards| | geometry.ach.shardLava05 | Collect 100 Lava Shards| -| geometry.ach.shardBonus01 | Collect 5 of each Shard| -| geometry.ach.shardBonus02 | Collect 15 of each Shard| -| geometry.ach.shardBonusa03 | Collect 35 of each Shard| -| geometry.ach.shardBonus04 | Collect 65 of each Shard| -| geometry.ach.shardBonus05 | Collect 100 of each Shard| -| geometry.ach.followCreator | follow 1 Creator| -| geometry.ach.followCreator2 | follow 10 Creators| +| geometry.ach.shardBonus01 | Collect 5 of each Tier 1 Shard| +| geometry.ach.shardBonus02 | Collect 15 of each Tier 1 Shard| +| geometry.ach.shardBonus03 | Collect 35 of each Tier 1 Shard| +| geometry.ach.shardBonus04 | Collect 65 of each Tier 1 Shard| +| geometry.ach.shardBonus05 | Collect 100 of each Tier 1 Shard| +| geometry.ach.shardEarth01 | Collect 5 Earth Shards| +| geometry.ach.shardEarth02 | Collect 15 Earth Shards| +| geometry.ach.shardEarth03 | Collect 35 Earth Shards| +| geometry.ach.shardEarth04 | Collect 65 Earth Shards| +| geometry.ach.shardEarth05 | Collect 100 Earth Shards| +| geometry.ach.shardBlood01 | Collect 5 Blood Shards| +| geometry.ach.shardBlood02 | Collect 15 Blood Shards| +| geometry.ach.shardBlood03 | Collect 35 Blood Shards| +| geometry.ach.shardBlood04 | Collect 65 Blood Shards| +| geometry.ach.shardBlood05 | Collect 100 Blood Shards| +| geometry.ach.shardMetal01 | Collect 5 Metal Shards| +| geometry.ach.shardMetal02 | Collect 15 Metal Shards| +| geometry.ach.shardMetal03 | Collect 35 Metal Shards| +| geometry.ach.shardMetal04 | Collect 65 Metal Shards| +| geometry.ach.shardMetal05 | Collect 100 Metal Shards| +| geometry.ach.shardLight01 | Collect 5 Light Shards| +| geometry.ach.shardLight02 | Collect 15 Light Shards| +| geometry.ach.shardLight03 | Collect 35 Light Shards| +| geometry.ach.shardLight04 | Collect 65 Light Shards| +| geometry.ach.shardLight05 | Collect 100 Light Shards| +| geometry.ach.shardSoul01 | Collect 5 Soul Shards| +| geometry.ach.shardSoul02 | Collect 15 Soul Shards| +| geometry.ach.shardSoul03 | Collect 35 Soul Shards| +| geometry.ach.shardSoul04 | Collect 65 Soul Shards| +| geometry.ach.shardSoul05 | Collect 100 Soul Shards| +| geometry.ach.shardBonusB01 | Collect 5 of each Tier 2 Shard| +| geometry.ach.shardBonusB02 | Collect 15 of each Tier 2 Shard| +| geometry.ach.shardBonusB03 | Collect 35 of each Tier 2 Shard| +| geometry.ach.shardBonusB04 | Collect 65 of each Tier 2 Shard| +| geometry.ach.shardBonusB05 | Collect 100 of each Tier 2 Shard| +| geometry.ach.followCreator | Follow 1 Creator| +| geometry.ach.followCreator2 | Follow 10 Creators| +| geometry.ach.followCreator3 | Follow 25 Creators| +| geometry.ach.followCreator4 | Follow 50 Creators| | geometry.ach.friends01 | Befriend 1 user| | geometry.ach.friends02 | Befriend 10 users| +| geometry.ach.friends03 | Befriend 25 users| +| geometry.ach.friends04 | Befriend 50 users| | geometry.ach.youtube | subscribe to [RobTop](https://www.youtube.com/user/RobTopGames) on YouTube| -| geometry.ach.youtube | Follow [RobTop](https://twitter.com/robtopgames) on Twitter| -| geometry.ach.youtube | Like [RobTop](https://www.facebook.com/geometrydash) on Facebook| +| geometry.ach.twitter | Follow [RobTop](https://twitter.com/robtopgames) on Twitter| +| geometry.ach.facebook | Like [RobTop](https://www.facebook.com/geometrydash) on Facebook| | geometry.ach.attempt01 | Do 100 Attempts | | geometry.ach.attempt02 | Do 500 Attempts | | geometry.ach.attempt03 | Do 2,000 Attempts | | geometry.ach.attempt04 | Do 10,000 Attempts | | geometry.ach.attempt05 | Do 20,000 Attempts | +| geometry.ach.attempt06 | Do 30,000 Attempts | +| geometry.ach.attempt07 | Do 40,000 Attempts | +| geometry.ach.attempt08 | Do 60,000 Attempts | +| geometry.ach.attempt09 | Do 80,000 Attempts | +| geometry.ach.attempt10 | Do 100,000 Attempts | +| geometry.ach.attempt11 | Do 135,000 Attempts | +| geometry.ach.attempt12 | Do 185,000 Attempts | +| geometry.ach.attempt13 | Do 250,000 Attempts | +| geometry.ach.attempt14 | Do 300,000 Attempts | | geometry.ach.jump01 | Jump 1,000 Times | | geometry.ach.jump02 | Jump 10,000 Times | | geometry.ach.jump03 | Jump 20,000 Times | | geometry.ach.jump04 | Jump 50,000 Times | | geometry.ach.jump05 | Jump 100,000 Times | +| geometry.ach.jump06 | Jump 200,000 Times | +| geometry.ach.jump07 | Jump 300,000 Times | +| geometry.ach.jump08 | Jump 400,000 Times | +| geometry.ach.jump09 | Jump 500,000 Times | +| geometry.ach.jump10 | Jump 750,000 Times | +| geometry.ach.jump11 | Jump 1,000,000 Times | | geometry.ach.submit | Submit an online level | | geometry.ach.rate | Click the supporter icon when it's locked | | geometry.ach.rateDiff | Rate the stars of an online level | @@ -244,11 +394,126 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.like02b | Like or dislike 500 online levels | | geometry.ach.like03 | Like or dislike 1,000 online levels | | geometry.ach.like04 | Like or dislike 2,000 online levels | +| geometry.ach.like05 | Like or dislike 3,000 online levels | +| geometry.ach.like06 | Like or dislike 4,000 online levels | | geometry.ach.moreGames | Click the "More Games" button | | geometry.ach.special01 | Die at over 95% on a main level | | geometry.ach.creator01 | Get 100 likes on your level | | geometry.ach.creator02 | Get a star rate on your level | | geometry.ach.creator03 | Get 50 likes on your level | +| geometry.ach.creator04 | Get 250 likes on your level | +| geometry.ach.creator05 | Get 500 likes on your level | +| geometry.ach.creator06 | Get 1,000 likes on your level | +| geometry.ach.path01.00 | Unlock the Path of Fire | +| geometry.ach.path01.01 | Reach Path of Fire Rank 1 | +| geometry.ach.path01.02 | Reach Path of Fire Rank 2 | +| geometry.ach.path01.03 | Reach Path of Fire Rank 3 | +| geometry.ach.path01.04 | Reach Path of Fire Rank 4 | +| geometry.ach.path01.05 | Reach Path of Fire Rank 5 | +| geometry.ach.path01.06 | Reach Path of Fire Rank 6 | +| geometry.ach.path01.07 | Reach Path of Fire Rank 7 | +| geometry.ach.path01.08 | Reach Path of Fire Rank 8 | +| geometry.ach.path01.09 | Reach Path of Fire Rank 9 | +| geometry.ach.path01.10 | Reach Path of Fire Rank 10 | +| geometry.ach.path02.00 | Unlock the Path of Ice | +| geometry.ach.path02.01 | Reach Path of Ice Rank 1 | +| geometry.ach.path02.02 | Reach Path of Ice Rank 2 | +| geometry.ach.path02.03 | Reach Path of Ice Rank 3 | +| geometry.ach.path02.04 | Reach Path of Ice Rank 4 | +| geometry.ach.path02.05 | Reach Path of Ice Rank 5 | +| geometry.ach.path02.06 | Reach Path of Ice Rank 6 | +| geometry.ach.path02.07 | Reach Path of Ice Rank 7 | +| geometry.ach.path02.08 | Reach Path of Ice Rank 8 | +| geometry.ach.path02.09 | Reach Path of Ice Rank 9 | +| geometry.ach.path02.10 | Reach Path of Ice Rank 10 | +| geometry.ach.path03.00 | Unlock the Path of Poison | +| geometry.ach.path03.01 | Reach Path of Poison Rank 1 | +| geometry.ach.path03.02 | Reach Path of Poison Rank 2 | +| geometry.ach.path03.03 | Reach Path of Poison Rank 3 | +| geometry.ach.path03.04 | Reach Path of Poison Rank 4 | +| geometry.ach.path03.05 | Reach Path of Poison Rank 5 | +| geometry.ach.path03.06 | Reach Path of Poison Rank 6 | +| geometry.ach.path03.07 | Reach Path of Poison Rank 7 | +| geometry.ach.path03.08 | Reach Path of Poison Rank 8 | +| geometry.ach.path03.09 | Reach Path of Poison Rank 9 | +| geometry.ach.path03.10 | Reach Path of Poison Rank 10 | +| geometry.ach.path04.00 | Unlock the Path of Shadow | +| geometry.ach.path04.01 | Reach Path of Shadow Rank 1 | +| geometry.ach.path04.02 | Reach Path of Shadow Rank 2 | +| geometry.ach.path04.03 | Reach Path of Shadow Rank 3 | +| geometry.ach.path04.04 | Reach Path of Shadow Rank 4 | +| geometry.ach.path04.05 | Reach Path of Shadow Rank 5 | +| geometry.ach.path04.06 | Reach Path of Shadow Rank 6 | +| geometry.ach.path04.07 | Reach Path of Shadow Rank 7 | +| geometry.ach.path04.08 | Reach Path of Shadow Rank 8 | +| geometry.ach.path04.09 | Reach Path of Shadow Rank 9 | +| geometry.ach.path04.10 | Reach Path of Shadow Rank 10 | +| geometry.ach.path05.00 | Unlock the Path of Lava | +| geometry.ach.path05.01 | Reach Path of Lava Rank 1 | +| geometry.ach.path05.02 | Reach Path of Lava Rank 2 | +| geometry.ach.path05.03 | Reach Path of Lava Rank 3 | +| geometry.ach.path05.04 | Reach Path of Lava Rank 4 | +| geometry.ach.path05.05 | Reach Path of Lava Rank 5 | +| geometry.ach.path05.06 | Reach Path of Lava Rank 6 | +| geometry.ach.path05.07 | Reach Path of Lava Rank 7 | +| geometry.ach.path05.08 | Reach Path of Lava Rank 8 | +| geometry.ach.path05.09 | Reach Path of Lava Rank 9 | +| geometry.ach.path05.10 | Reach Path of Lava Rank 10 | +| geometry.ach.path06.00 | Unlock the Path of Earth | +| geometry.ach.path06.01 | Reach Path of Earth Rank 1 | +| geometry.ach.path06.02 | Reach Path of Earth Rank 2 | +| geometry.ach.path06.03 | Reach Path of Earth Rank 3 | +| geometry.ach.path06.04 | Reach Path of Earth Rank 4 | +| geometry.ach.path06.05 | Reach Path of Earth Rank 5 | +| geometry.ach.path06.06 | Reach Path of Earth Rank 6 | +| geometry.ach.path06.07 | Reach Path of Earth Rank 7 | +| geometry.ach.path06.08 | Reach Path of Earth Rank 8 | +| geometry.ach.path06.09 | Reach Path of Earth Rank 9 | +| geometry.ach.path06.10 | Reach Path of Earth Rank 10 | +| geometry.ach.path07.00 | Unlock the Path of Blood | +| geometry.ach.path07.01 | Reach Path of Blood Rank 1 | +| geometry.ach.path07.02 | Reach Path of Blood Rank 2 | +| geometry.ach.path07.03 | Reach Path of Blood Rank 3 | +| geometry.ach.path07.04 | Reach Path of Blood Rank 4 | +| geometry.ach.path07.05 | Reach Path of Blood Rank 5 | +| geometry.ach.path07.06 | Reach Path of Blood Rank 6 | +| geometry.ach.path07.07 | Reach Path of Blood Rank 7 | +| geometry.ach.path07.08 | Reach Path of Blood Rank 8 | +| geometry.ach.path07.09 | Reach Path of Blood Rank 9 | +| geometry.ach.path07.10 | Reach Path of Blood Rank 10 | +| geometry.ach.path08.00 | Unlock the Path of Metal | +| geometry.ach.path08.01 | Reach Path of Metal Rank 1 | +| geometry.ach.path08.02 | Reach Path of Metal Rank 2 | +| geometry.ach.path08.03 | Reach Path of Metal Rank 3 | +| geometry.ach.path08.04 | Reach Path of Metal Rank 4 | +| geometry.ach.path08.05 | Reach Path of Metal Rank 5 | +| geometry.ach.path08.06 | Reach Path of Metal Rank 6 | +| geometry.ach.path08.07 | Reach Path of Metal Rank 7 | +| geometry.ach.path08.08 | Reach Path of Metal Rank 8 | +| geometry.ach.path08.09 | Reach Path of Metal Rank 9 | +| geometry.ach.path08.10 | Reach Path of Metal Rank 10 | +| geometry.ach.path09.00 | Unlock the Path of Light | +| geometry.ach.path09.01 | Reach Path of Light Rank 1 | +| geometry.ach.path09.02 | Reach Path of Light Rank 2 | +| geometry.ach.path09.03 | Reach Path of Light Rank 3 | +| geometry.ach.path09.04 | Reach Path of Light Rank 4 | +| geometry.ach.path09.05 | Reach Path of Light Rank 5 | +| geometry.ach.path09.06 | Reach Path of Light Rank 6 | +| geometry.ach.path09.07 | Reach Path of Light Rank 7 | +| geometry.ach.path09.08 | Reach Path of Light Rank 8 | +| geometry.ach.path09.09 | Reach Path of Light Rank 9 | +| geometry.ach.path09.10 | Reach Path of Light Rank 10 | +| geometry.ach.path10.00 | Unlock the Path of Souls | +| geometry.ach.path10.01 | Reach Path of Souls Rank 1 | +| geometry.ach.path10.02 | Reach Path of Souls Rank 2 | +| geometry.ach.path10.03 | Reach Path of Souls Rank 3 | +| geometry.ach.path10.04 | Reach Path of Souls Rank 4 | +| geometry.ach.path10.05 | Reach Path of Souls Rank 5 | +| geometry.ach.path10.06 | Reach Path of Souls Rank 6 | +| geometry.ach.path10.07 | Reach Path of Souls Rank 7 | +| geometry.ach.path10.08 | Reach Path of Souls Rank 8 | +| geometry.ach.path10.09 | Reach Path of Souls Rank 9 | +| geometry.ach.path10.10 | Reach Path of Souls Rank 10 | | geometry.ach.secret01 | Destroy an icon on the main menu | | geometry.ach.secret02 | Destroy 50 icons on the main menu | | geometry.ach.secret02b | Destroy 100 icons on the main menu | @@ -268,6 +533,8 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.secret15 | Type 'gandalfpotter' into the 2.0 Vault | | geometry.ach.secret16 | Consecutively type '8', '16', '30', '32', '46' and '84' into the 2.0 Vault | | geometry.ach.secret17 | Type your username into the 2.0 Vault | +| geometry.ach.secret18 | Destroy 750 icons on the main menu | +| geometry.ach.secret19 | Type 'finalboss' into the 2.0 Vault | | geometry.ach.v2.secret01 | Type 'brainpower' into the Vault of Secrets | | geometry.ach.v2.secret02 | Type 'cod3breaker' and the solution to the puzzle into the Vault of Secrets | | geometry.ach.v2.secret03 | Solve the 'glubfub' puzzle | @@ -276,11 +543,15 @@ Inside CCGameManager.dat, every achievement you have progress on can be found in | geometry.ach.v2.secret06 | Type 'seven' into the Vault of Secrets | | geometry.ach.v2.secret07 | Type 'gimmiethecolor' into the Vault of Secrets | | geometry.ach.v2.secret08 | Type 'thechickenisonfire' into the Vault of Secrets | +| geometry.ach.v2.secret09 | Type 'd4shg30me7ry' into the Vault of Secrets | +| geometry.ach.v2.secret10 | Type 'thechickenisready' into the Vault of Secrets | | geometry.ach.v3.secret01 | Type 'darkness' into the Chamber of Time | | geometry.ach.v3.secret02 | Type 'silence' into the Chamber of Time | | geometry.ach.v3.secret03 | Type 'river' into the Chamber of Time | | geometry.ach.v3.secret04 | Type 'hunger' into the Chamber of Time | | geometry.ach.v3.secret05 | Type 'volcano' into the Chamber of Time | +| geometry.ach.v3.secret06 | Type 'backontrack' into the Chamber of Time | +| geometry.ach.v3.secret07 | Type 'givemehelper' into the Chamber of Time | ## GD Meltdown Achievements | Internal name | How it's acquired | From 80b277e4a11fd7722a0fe88e4245fef6a314ee39 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 27 Dec 2023 10:46:37 +0200 Subject: [PATCH 019/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index da77f0354..6f60028f1 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -28,6 +28,12 @@ GS values contain Information regarding certain aspects of the game | 20 | Lava Shards | | 21 | Demon Keys| | 22 | Total Orbs Collected | +| 23 | Earth Shards | +| 24 | Blood Shards | +| 25 | Metal Shards | +| 26 | Light Shards | +| 27 | Soul Shards | +| 28 | Moons | | unique_{LevelID}_{Coins Collected} | The Coins Collected on the Official Levels ## GS_completed From 87e7bb39d94d3615b703c1e44a5c1a5c9271dd4d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 14:50:12 +0300 Subject: [PATCH 020/389] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6084a6230..5b81d589e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **GDDocs** is a project built to openly give advanced information and readable information for aspiring developers looking to interface with Geometry Dash. Primarily, we aim to create this as a website for people to learn more about the inner workings of geometry dash, along with it's data. -The GDDocs website can be found [here](https://docs.gdprogra.me/#/) +The GDDocs website can be found [here](https://wyliemaster.github.io/gddocs/#/) ## Running/Building **You will require Node.js `>=12` to debug and run this project.** From d47995fab68f64c82c0086f6a3ba043f2a0ef601 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:10:53 +0300 Subject: [PATCH 021/389] Update gjp.md --- docs/topics/gjp.md | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/docs/topics/gjp.md b/docs/topics/gjp.md index 47aab3bc6..e683c64c8 100644 --- a/docs/topics/gjp.md +++ b/docs/topics/gjp.md @@ -1,8 +1,28 @@ # GJP GJP is a parameter commonly sent as `gjp` in requests. It is used for account authentication, and commonly sent with the `accountID` parameter. +It was changed to `gjp2` in 2.2. -## Encoding/Decoding +## Generating GJP2 + +The GJP is your password, salted with "mI29fmAnxgTs" and hashed with SHA-1. + + + +### **Python** +```py +import base64 +import hashlib # sha1() lives there + + +def generate_gjp2(password: str = "", salt: str = "mI29fmAnxgTs") -> str: + password += salt + hash = hashlib.sha1(password.encode()).hexdigest() + + return hash +``` + +## Old GJP Encoding/Decoding The GJP is your account password XOR-encoded with key "37526", and then encoded with base64. @@ -22,8 +42,8 @@ def encode_gjp(password: str) -> str: encoded = xor_cipher(password, "37526") # encode the password to base64 encoded_base64 = base64.b64encode(encoded.encode()).decode() - encoded_base64 = encoded_base64.replace("+", "-") - encoded_base64 = encoded_base64.replace("/", "_") + encoded_base64 = encoded_base64.replace("+", "-") + encoded_base64 = encoded_base64.replace("/", "_") return encoded_base64 From 4891c324d11867196143e9ff4f1b477a12a3609c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:16:21 +0300 Subject: [PATCH 022/389] Update getGJLevels21.md --- docs/endpoints/levels/getGJLevels21.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index 988c93658..e3073672f 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -7,13 +7,14 @@ | Parameter | Description | Required | | ----------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------- | | `secret` | [Common secret](/reference/secrets.md) `Wmfd2893gb7` | Yes | -| `gameVersion` | [Game Version](#), 21 on 2.1 | | -| `binaryVersion` | [Binary Version](#), 35 on 2.113 | | +| `gameVersion` | [Game Version](#), 22 on 2.2 | | +| `binaryVersion` | [Binary Version](#), 40 on 2.204 | | | `type` | Search type, [see values](#type). Defaults to most liked | | | `str` | Search query, user ID or level list depending on `type` | Only on types 5 and 10 | | `page` | Which page to request, defaults to 0 | | | `total` | Currently unknown. Defaults to the amount of levels available up to 9999, but 0 or leaving it out also work. | | -| `gjp` | The [GJP](/topics/Algorithms/robtop-cipher.md) for the `accountID` | | +| `gjp` | The [GJP](/topics/encryption/gjp.md) for the `accountID`. Not present in 2.2 | | +| `gjp2` | The [GJP2](/topics/encryption/gjp.md) for the `accountID`. 2.2+ | | | `accountID` | The ID for the account which is doing the search. Only sent on types 8, 13 and 5 | | | `gdw` | Whether the request is for GD World, either 0 or 1 | | | `gauntlet` | The ID for the gauntlet being requested | | @@ -28,13 +29,16 @@ | `twoPlayer` | Two Player Mode filter, either 0 or 1 | | | `coins` | Coins filter, either 0 or 1 | | | `epic` | Epic filter, either 0 or 1 | | +| `legendary` | Legendary filter, either 0 or 1. Currently broken | | +| `mythic` | Mythic filter, either 0 or 1. Currently broken | | | `noStar` | Unrated filter, either 0 or 1 | | | `star` | Rated filter, either 0 or 1 | | | `song` | Official (or custom) song ID, not sent when off | | | `customSong` | Newgrounds song, 1 when on and uses `song` as the ID, not sent when off | | | `followed` | Comma separated list of the followed user IDs | Only on type 12 | | `local` | Whether to fetch "My Levels", either 0 or 1 | Only on type 5 | - +| `udid` | Your [UDID](/topics/encryption/id.md) | | +| `uuid` | Your [UUID](/topics/encryption/id.md) | |
type @@ -113,9 +117,9 @@ levels#creators#songs#page info#hash where: -- `levels` is a list of [Level Objects](#) separated by `|` +- `levels` is a list of [Level Objects](/resources/client/level-components/level-object.md) separated by `|` - `creators` is a list of creators separated by `|`, each in the format `userID:username:accountID` -- `songs` is a list of [Song Objects](#) separated by `~:~` +- `songs` is a list of [Song Objects](/resources/server/song.md) separated by `~:~` - `page info` is in the format `total:offset:amount` where: - `total` - total number of levels for the query - `offset` - offset from which the current page starts From 7ea527056a2a85a9633096e5b7d052f853a8d032 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 15:23:32 +0300 Subject: [PATCH 023/389] Update getGJLevels21.md --- docs/endpoints/levels/getGJLevels21.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index e3073672f..bec1f485b 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -53,7 +53,7 @@ | 6 | Featured | | 7 | Magic | | 8 | Moderator sent levels | -| 10 | Level list (used in map packs), uses `str` as a comma separated list of level IDs | +| 10 | List of levels (not to be confused with type 25, which is for in-game lists), uses `str` as a comma separated list of level IDs | | 11 | Awarded | | 12 | Followed (see `followed` parameter) | | 13 | Friends (login required) | @@ -63,6 +63,7 @@ | 18 | Unknown (always empty, perhaps robtop only?) | | 21 | Daily history | | 22 | Weekly history | +| 25 | Level list, uses `str` as the list ID |
From f2307d378937516d00c080203e3b99a73c387ab1 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 16:54:45 +0300 Subject: [PATCH 024/389] Create getGJLevelLists.php --- docs/endpoints/lists/getGJLevelLists.php | 142 +++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 docs/endpoints/lists/getGJLevelLists.php diff --git a/docs/endpoints/lists/getGJLevelLists.php b/docs/endpoints/lists/getGJLevelLists.php new file mode 100644 index 000000000..384ba6a65 --- /dev/null +++ b/docs/endpoints/lists/getGJLevelLists.php @@ -0,0 +1,142 @@ +# getGJLevelLists + +> This endpoint is used to search level listsb y name and / or filter + +## Parameters + +| Parameter | Description | Required | +| ----------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------- | +| `secret` | [Common secret](/reference/secrets.md) `Wmfd2893gb7` | Yes | +| `gameVersion` | [Game Version](#), 22 on 2.2 | | +| `binaryVersion` | [Binary Version](#), 40 on 2.204 | | +| `type` | Search type, [see values](#type). Defaults to most liked | | +| `str` | Search query, user ID or level list depending on `type` | Only on types 5 and 10 | +| `page` | Which page to request, defaults to 0 | | +| `gjp2` | The [GJP2](/topics/encryption/gjp.md) for the `accountID`. | | +| `accountID` | The ID for the account which is doing the search. Only sent on types 8, 13 and 5 | | +| `diff` | Difficulty filter, [see values](#diff) | | +| `demonFilter` | Selects which demon difficulty to search, [see values](#demonFilter). If not sent will search all demon types | | +| `star` | Rated filter, either 0 or 1 | | +| `followed` | Comma separated list of the followed user IDs | Only on type 12 | +| `udid` | Your [UDID](/topics/encryption/id.md) | | +| `uuid` | Your [UUID](/topics/encryption/id.md) | | +
+ type + +| Type | Description | +| :--: | --------------------------------------------------------------------------------- | +| 0 | Search query | +| 1 | Most downloaded | +| 2 | Most liked | +| 3 | Trending | +| 4 | Recent | +| 5 | User's lists, uses `str` as the **account ID** | +| 6 | Unknown (returns the same levels as Awarded but in a different order) | +| 7 | Magic (returns the same levels as most liked) | +| 11 | Awarded | +| 12 | Followed (see `followed` parameter) | +| 13 | Friends (login required) | +| 27 | Sent lists | + +
+ +
+ diff + +| diff | Description | +| :--: | ---------------------------------------------------------- | +| -1 | N/A | +| -2 | Demons (see `demonFilter` for specifying demon difficulty) | +| 1 | Easy | +| 2 | Normal | +| 3 | Hard | +| 4 | Harder | +| 5 | Insane | + +
+ +
+ demonFilter + +| demonFilter | Description | +| :---------: | ------------- | +| 1 | Easy demon | +| 2 | Medium demon | +| 3 | Hard demon | +| 4 | Insane demon | +| 5 | Extreme demon | + +
+ +
+ len + +| len | Value | +| :-: | ------ | +| 0 | Tiny | +| 1 | Short | +| 2 | Medium | +| 3 | Long | +| 4 | XL | + +
+ +## Response + +A successful level search will return the data in the format + +``` +levels#creators#songs#page info#hash +``` + +where: + +- `levels` is a list of [Level Objects](/resources/client/level-components/level-object.md) separated by `|` +- `creators` is a list of creators separated by `|`, each in the format `userID:username:accountID` +- `songs` is a list of [Song Objects](/resources/server/song.md) separated by `~:~` +- `page info` is in the format `total:offset:amount` where: + - `total` - total number of levels for the query + - `offset` - offset from which the current page starts + - `amount` - number of levels per page (always 10 for the gd servers) +- `hash` is a hash of every level, see [Hashes](#) + + +If the request is not successful, it will return `-1` + + + + +### **Python** + +```py +import requests + +headers = { + "User-Agent": "" +} + +data = { + "str": "my mcdonalds order", + "type": 0, + "secret": "Wmfd2893gb7", +} + +url = "http://www.boomlings.com/database/getGJLevelLists.php" + +req = requests.post(url=url, data=data, headers=headers) +print(req.text) +``` + +### **curl** + +```plain +curl http://www.boomlings.com/database/getGJLevelLists.php -A "" -d "str=my mcdonalds order&type=0&secret=Wmfd2893gb7" +``` + + + +### Output + +``` +1:10834:2:my mcdonalds order:3:aSB3YWxrZWQgdG8gbWNkb25hbGRz:5:1:49:6061424:50:tricipital:10:143479:7:10:14:5334:19::51:78111123,80840474,20556675,71480069,51008389,26108947,59604964,190626,53898587,72443435,47499900,89638158,43758774,90640638,96282081,86742812:55:0:56:0:28:1703082168:29:0|1:4406:2:my mcdonalds order:3:aW0gYXQgdGhlIGRyaXZlIHRocnUgLy8gcGFydCAyIG91dCBub3cgYXQgNzIxMTQ=:5:7:49:17062290:50:GD2G:10:90039:7:2:14:4457:19::51:25147297,82785965,11171792,30261946,31496121,71189946,19716898,14456417,4050125,79412478,1442329,67287373,61350256:55:0:56:0:28:1703048969:29:1703631457|1:22325:2:My McDonalds Order:3:YmFuZ2VyIGxpc3QgaWNs:5:1:49:10722530:50:Jexamania:10:8469:7:9:14:222:19::51:25147297,83671207,46104803,72867858,65500565,16683338,32666588,25717922,84904479,92727112,69043485,4846999,58038680,67287373:55:0:56:0:28:1703125026:29:0|1:72114:2:my mcdonalds order 2:3:aSB0aGluayBoZSBsaWVkIGFib3V0IHRoZSBtYWNoaW5lIGJlaW5nIGJyb2tlbiAvLyB0aGUgc2VxdWVsIG5vIG9uZSBhc2tlZCBmb3IgdG8gbXkgbWNkb25hbGRzIG9yZGVy:5:3:49:17062290:50:GD2G:10:4732:7:2:14:156:19::51:25147297,65037091,88758014,59604964,67993675,59966737,56102262,97933043,2056444,85312317,91482208,58038680,46160451,75940156,95959832,81466909,68064189,61350256:55:0:56:0:28:1703631267:29:1703638822|1:16619:2:my mcdonalds order:3:SSBLTk9XIElUJ1MgQkFELCBUSEVSRSBXRVJFTidUIE1BTlkgT1BUSU9OUyE=:5:1:49:14542509:50:ZohMyGoodnessGD:10:2652:7:6:14:44:19::51:47499900,57410100,57474996,84904479,38557238,59157328,87981410,60001202,77367261,41551990,67287373:55:0:56:0:28:1703101621:29:0|1:12460:2:My McDonalds Order:3:bWNkb25hbA==:5:1:49:4236858:50:tim55:10:1198:7:4:14:32:19::51:82931130,69309640,56455492,36619357,55320441:55:0:56:0:28:1703087812:29:0|1:29628:2:My mcdonalds order:3:YmFzZWQgb2ZmIGEgc3BvdGlmeSBwbGF5bGlzdCBvciBzb21ldGhpbmc=:5:3:49:10055542:50:RuSsiaNrobToP:10:1254:7:10:14:17:19::51:78111123,34889235,80840474,11171792,71480069,84904479,97589710,443669,4460853,72443435,97590104,13550658,2056444,86742812:55:0:56:0:28:1703180209:29:1703614964|1:45077:2:My McDonalds Order:3:UmVhbA==:5:1:49:1839061:50:CreatorFreeze:10:503:7:5:14:17:19::51:80840474,30963660,79412478,14456417,61293573,71971062,86929245,86742812,58038680:55:0:56:0:28:1703307069:29:0|1:33953:2:My mcdonalds order:3::5:3:49:14092610:50:RealGDVerse:10:347:7:2:14:16:19::51:82785965,11012303,38557238,18931295,11255719,61408958,26162113,72014001,42633903,13752832,69768064,49186967,77554979,22294605,70549760,66416136,50525701,89933948,37039661,58976282,6988127,86449162,3134009,87727825,82995551,73004601,57585857,82139948,95318968,69925593,1203245,69765381,50647963,67254591,14370474,96968200,93201502,92509265,65430141,56495221,76489404,91963243,41035356,62427241,68752244,69996378,26880009,7360312,79013891,65269818,76963460,88732322,11171792:55:0:56:0:28:1703206770:29:1703428545|1:68104:2:My McDonalds Order:3:TXkgcmVhbCBNY0RvbmFsZHMgb3JkZXIu:5:1:49:25642445:50:Anjixdude25z:10:393:7:9:14:12:19::51:78111123,59413153,12664426,97172976,87995257,85508683,89490621,72811779,10558915,9007089,84904479,27742076,61718673,27090448:55:0:56:0:28:1703571483:29:0#10532982:CreatorFreeze:1839061|14827098:tim55:4236858|15479163:tricipital:6061424|92900676:RuSsiaNrobToP:10055542|98535835:Jexamania:10722530|139957548:RealGDVerse:14092610|147859835:ZohMyGoodnessGD:14542509|25220930:GD2G:17062290|221186876:Anjixdude25z:25642445#9999:0:10#f5da5823d94bbe7208dd83a30ff427c7d88fdb99 +``` From 8f7b35b034a27f2c43250ec6bcc5e28ffb798c1b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 16:55:31 +0300 Subject: [PATCH 025/389] Update _sidebar.md --- docs/_sidebar.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index ff5cad10b..c70ddef97 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -66,6 +66,8 @@ - [suggestGJStars](/endpoints/levels/suggestGJStars.md) - [updateGJDesc20](/endpoints/levels/updateGJDesc20.md) - [uploadGJLevel21](/endpoints/levels/uploadGJLevel21.md) +**Lists** + - [getGJLevelLists](/endpoints/lists/getGJLevelLists.md) **Comments** - [deleteGJAccComment20](/endpoints/comments/deleteGJAccComment20.md) - [deleteGJComment20](/endpoints/comments/deleteGJComment20.md) From c9151c23e9324e191dfa5c02ca53ca07d2f110bf Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 17:04:34 +0300 Subject: [PATCH 026/389] Update songs.md --- docs/reference/songs.md | 65 +++++++++++++---------------------------- 1 file changed, 21 insertions(+), 44 deletions(-) diff --git a/docs/reference/songs.md b/docs/reference/songs.md index 12e9b47db..90e5942ca 100644 --- a/docs/reference/songs.md +++ b/docs/reference/songs.md @@ -7,11 +7,6 @@ > **Note**: *In the tables below, ID refers to the level ID the level would be if uploaded to the servers and the Server ID refers to an ID within the Song Enum.* - - - -### **Geometry Dash** - | ID | Server ID | Track Name | Track Author | |------|-----------|--------------------------|--------------| | - | -1 | Practice: Stay Inside Me | OcularNebula | @@ -36,40 +31,25 @@ | 19 | 18 | Geometrical Dominator | Waterflame | | 20 | 19 | Deadlocked | F-777 | | 21 | 20 | Fingerdash | MDK | - -### **Geometry Dash Meltdown** - -| ID | Server ID | Track Name | Track Author | -|------|-----------|--------------------------|--------------| -| 1001 | 21 | The Seven Seas | F-777 | -| 1002 | 22 | Viking Arena | F-777 | -| 1003 | 23 | Airborne Robots | F-777 | - -### **Geometry Dash World** - -| ID | Server ID | Track Name | Track Author | -|------|-----------|--------------------------|--------------| -| 3001 | 24 | The Challenge | RobTop | -| 2001 | 25 | Payload | Dex Arson | -| 2002 | 26 | Beast Mode | Dex Arson | -| 2003 | 27 | Machina | Dex Arson | -| 2004 | 28 | Years | Dex Arson | -| 2005 | 29 | Frontlines | Dex Arson | -| 2006 | 30 | Space Pirates | Waterflame | -| 2007 | 31 | Striker | Waterflame | -| 2008 | 32 | Embers | Dex Arson | -| 2009 | 33 | Round 1 | Dex Arson | -| 2010 | 34 | Monster Dance Off | F-777 | - -### **Geometry Dash Subzero** - -| ID | Server ID | Track Name | Track Author | -|------|-----------|--------------------------|--------------| -| 4001 | 35 | Press Start | MDK | -| 4002 | 36 | Nock Em | Bossfight | -| 4003 | 37 | Power Trip | Boom Kitty | - - +| 22 | 21 | Dash | MDK | +| 23 | 22 | Explorers | Hinkik | +| 1001 | 23 | The Seven Seas | F-777 | +| 1002 | 24 | Viking Arena | F-777 | +| 1003 | 25 | Airborne Robots | F-777 | +| 3001 | 26 | Secret | RobTop | +| 2001 | 27 | Payload | Dex Arson | +| 2002 | 28 | Beast Mode | Dex Arson | +| 2003 | 29 | Machina | Dex Arson | +| 2004 | 30 | Years | Dex Arson | +| 2005 | 31 | Frontlines | Dex Arson | +| 2006 | 32 | Space Pirates | Waterflame | +| 2007 | 33 | Striker | Waterflame | +| 2008 | 34 | Embers | Dex Arson | +| 2009 | 35 | Round 1 | Dex Arson | +| 2010 | 36 | Monster Dance Off | F-777 | +| 4001 | 37 | Press Start | MDK | +| 4002 | 38 | Nock Em | Bossfight | +| 4003 | 39 | Power Trip | Boom Kitty | ## Other Songs @@ -78,11 +58,8 @@
-**In 2019, Google removed various Geometry Dash clients from their playstore and RobTop accidentally uploaded a development build of update 2.2 when resolving the issue. In the game files, 2 new songs can be found.** -Explorers by Hinkik and Firebird by MDK +**In 2019, Google removed various Geometry Dash clients from their playstore and RobTop accidentally uploaded a development build of update 2.2 when resolving the issue. In the game files, 2 songs could be found, one of which isn't in the final release, that being Firebird by MDK, which, according to RobTop, was not meant to be a real level.** -*Firebird was confirmed by RobTop to be fake however, another MDK song was confirmed to be in the update with the codename: [Dash](https://www.youtube.com/watch?v=ipK7vQ8gEZw)* - -
\ No newline at end of file + From 8dececfde0b68400bc1879f73f57f9063f57ca71 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 19:54:02 +0300 Subject: [PATCH 027/389] Update level.md --- docs/resources/server/level.md | 42 ++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/docs/resources/server/level.md b/docs/resources/server/level.md index 78448fd49..fa49ea13d 100644 --- a/docs/resources/server/level.md +++ b/docs/resources/server/level.md @@ -2,7 +2,7 @@ ## Level -A level is a playable object in Geometry Dash, namely coming with data that explains on what it is, and the string that the client interprets, known as a [level string](/topics/levelstring_encoding_decoding). +A level is a playable object in Geometry Dash, namely coming with data that explains on what it is, and the string that the client interprets, known as a [level string](/topics/levelstring_encoding_decoding). It is also used for level lists. A typical level server response is structured with a `key:value:key:value` pairing and is then split with a `|` @@ -14,6 +14,11 @@ A typical level server response is structured with a `key:value:key:value` pairi ```md 1:6508283:2:ReTraY:3:VGhhbmtzIGZvciBwbGF5aW5nIEdlb21ldHJ5IERhc2g=:4:{levelString}:5:3:6:4993756:8:10:9:10:10:39431612:12:0:13:21:14:4125578:17::43:3:25::18:2:19:7730:42:0:45:20000:15:3:30:0:31:0:28:5 years:29:1 year:35:557117:36:0_733_0_0_0_0_574_716_0_0_352_78_729_0_42_0_833_68_0_347_0_38_240_205_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0:37:3:38:1:39:2:46:7729:47:13773:40:0:27:AwMABAYDBw==#eb541c03f8355c0709f8007a1d9a595ae5bedc5d#291568b26b08d70a198fca10a87c736a2823be0c ``` + +#### **List Example Response** +```md +1:4788:2:Progression Level 1:3:R0QgQmVnaW5uZXJzIExpc3QgbGV2ZWwgMSEgR29vZCBsaXN0IG9mIGxldmVscyB0byBpbnRyb2R1Y2UgZnJpZW5kcyB0byB0aGUgZ2FtZSE=:5:5:49:6061424:50:tricipital:10:1451689:7:1:14:61715:19:1:51:90752263,59760047,88982532,78743788,88022936,89413344,90994090,74542823,74612523,55037478:55:20:56:5:28:1703050435:29:1703402400#15479163:tricipital:6061424#9999:0:10#f5da5823d94bbe7208dd83a30ff427c7d88fdb99 +``` Each `key` is tied to a component within the client and the `value` sets data for the specific component. @@ -22,20 +27,22 @@ A list of all known keys can be found in the table below ### Level Object Keys indicated with an asterisk (\*) are only returned from the downloadGJLevel22 endpoint. +Keys indicated with a caret (^) are only used for lists. #### Level Structure | Key | Name/Value | Type | Description |-----|---------------------------|----------------------------------------------|-------------------------------------------------------------------------- -| 1 | levelID | **Integer** | The id of the level -| 2 | levelName | **String** | The name of the level -| 3 | description | **String** | The level description, encoded in [base64](/topics/encryption/base64.md) +| 1 | levelID | **Integer** | The id of the level / list +| 2 | levelName | **String** | The name of the level / list +| 3 | description | **String** | The level / list description, encoded in [base64](/topics/encryption/base64.md) | 4* | levelString | **[Level String](/topics/levelstring_encoding_decoding)**| All the data for the level -| 5 | version | **Integer** | The version of the level published -| 6 | playerID | **Integer** | The player ID of the level author +| 5 | version | **Integer** | The version of the level / list published +| 6 | playerID | **Integer** | The player ID of the level / list author +| 7^ | difficulty | **Integer** | The difficulty face for the list. -1 = N/A, 0 = Auto, 1 = Easy, 2 = Normal, 3 = Hard, 4 = Harder, 5 = Insane, 6 = Easy Demon, 7 = Medium Demon, 8 = Hard Demon, 9 = Insane Demon, 10 = Extreme Demon | 8 | difficultyDenominator | **Integer** | Returns 0 if the level is N/A, returns 10 if a difficulty is assigned. Historically used to be the amount of people who have voted on the difficulty. | 9 | difficultyNumerator | **Integer** | The nominator used for calculating the level difficulty. Divided by the denominator to get the difficulty icon. Nowadays just 0 = unrated, 10 = easy, 20 = normal, 30 = hard, 40 = harder, 50 = insane. Can be also used to determine the demon difficulty as a side-effect of the voting system. Historically used to be the sum of stars from all votes | -| 10 | downloads | **Integer** | The amount of times the level has been downloaded +| 10 | downloads | **Integer** | The amount of times the level / list has been downloaded | 11 | setCompletes | **Integer** | The Number of people who have completed a specific level removed in update 2.1 | 12 | officialSong | **Integer** | The official song number used by the level, if applicable | 13 | gameVersion | **Integer** | The GD version the level was uploaded in. Versions 1.0 to 1.6 use version numbers 1 to 7 respectively. Version 10 is 1.7. Otherwise, divide the version number by ten to get the correct number. @@ -48,8 +55,8 @@ Keys indicated with an asterisk (\*) are only returned from the downloadGJLevel2 | 25 | auto | **Bool** | If the level's difficulty is auto | 26 | recordString | **String** | appears in the [GJGameLevel parser](https://imgur.com/a/S2bWLCC) but is unused | 27* | password | **Encrypted String** | The password required to copy the level. It is XOR encrypted with a key of 26364 -| 28* | uploadDate | **String** | The approximate date the level was uploaded on -| 29* | updateDate | **String** | The approximate date the level was last updated on +| 28* | uploadDate | **String** | The approximate date the level was uploaded on. If it's a list, the value is the Unix timestamp in seconds +| 29* | updateDate | **String** | The approximate date the level was last updated on. If it's a list, the value is the Unix timestamp in seconds | 30 | copiedID | **Integer** | The ID the of the original level (if the level was copied) | 31 | twoPlayer | **Bool** | Whether the level uses two player mode | 35 | customSongID | **Integer** | The ID of the custom Newgrounds song used in the level @@ -59,19 +66,26 @@ Keys indicated with an asterisk (\*) are only returned from the downloadGJLevel2 | 39 | starsRequested | **Integer** | The star value requested for the level | 40* | lowDetailMode | **Bool** | If the level has a low detail checkbox | 41* | dailyNumber | **Integer** | Daily/weekly levels only. Returns which daily/weekly the level was (e.g. the 500th daily level). Subtract 100,000 if the level is weekly -| 42 | epic | **Integer** | If the level has an epic rating +| 42 | epic | **Integer** | The epic rating for the level. 0 = none, 1 = epic, 2 = legendary, 3 = mythic. | 43 | demon Difficulty | **Integer** | The difficulty of the demon rating. 3 = easy, 4 = medium, 0 = hard, 5 = insane, 6 = extreme. Can also be used to determine the level difficulty non-demons had before rating as a side-effect of the voting system. | 44 | isGauntlet | **Bool** | if the level is in a gauntlet | | 45 | objects | **Integer** | The amount of objects in the level, used to determine if the level is considered "large". It caps at 65535 | 46 | editorTime | **Integer** | the total number of seconds spend on the current copy of a level | 47 | editorTime(Copies) | **Integer** | The accumulative total of seconds spend on previous copies of the level -| 48 | settingsString [Unused] | **String** | It was found in early 2.1 coming from the servers and was removed shortly after. The `December 2019 2.2 Leaks` however have information regarding it showing that it is called `settingsString` but, there is no information regarding its usage | +| 48 | settingsString [Unused] | **String** | It was found in early 2.1 coming from the servers and was removed shortly after. The `December 2019 2.2 Leaks` however have information regarding it showing that it is called `settingsString` but, there is no information regarding its usage | +| 49^ | accountID | **Integer** | The account ID of the list author +| 50^ | username | **String** | The username of the list author +| 51^ | ids | **Comma-Separated List** | All IDs in the list, separated by commas +| 52 | songIDs | **Comma-Separated List** | The list of all song IDs in the level, separated by commas +| 53 | sfxIDs | **Comma-Separated List** | The list of all SFX IDs in the level, separated by commas +| 55^ | listReward | **Integer** | The amount of diamonds awarded upon beating the required amount of levels in the list +| 56^ | listRewardRequirement | **Integer** | The amount of levels needed to claim the list reward +| 57 | verificationTime | **Integer** | How long the level took to verify (in frames, assume 240 FPS) ### Trivia -- The getGJLevels endpoint returns the keys `46` and `47` however they aren't actually correct +- The getGJLevels endpoint returns the keys `46` and `47` however they aren't actually correct (as of 2.1) - key `45` caps at the 16-bit integer limit so any level with more objects won't be accurate -- Surprisingly, key `42` is classified as an `Integer` rather than a `Bool` - +- Key `57` caps at the 24-bit integer limit so any time longer than around 465 hours won't be accurate From ef901ae31e51105aad7c7c01e3ef69a6ddf0a396 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 19:55:15 +0300 Subject: [PATCH 028/389] Update level.md --- docs/resources/server/level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/level.md b/docs/resources/server/level.md index fa49ea13d..2898b6d80 100644 --- a/docs/resources/server/level.md +++ b/docs/resources/server/level.md @@ -51,7 +51,7 @@ Keys indicated with a caret (^) are only used for lists. | 16 | dislikes | **Integer** | dislikes - likes | | 17 | demon | **Bool** | If the level's difficulty is demon | 18 | stars | **Integer** | The amount of stars rewarded for completing the level -| 19 | featureScore | **Integer** | 0 if the level is not featured, otherwise a positive number. The higher it is, the higher the level appears on the featured levels list. +| 19 | featureScore | **Integer** | 0 if the level is not featured, otherwise a positive number. The higher it is, the higher the level appears on the featured levels list. Always returns either 0 or 1 for lists. | 25 | auto | **Bool** | If the level's difficulty is auto | 26 | recordString | **String** | appears in the [GJGameLevel parser](https://imgur.com/a/S2bWLCC) but is unused | 27* | password | **Encrypted String** | The password required to copy the level. It is XOR encrypted with a key of 26364 From 508e651aa8efbc74af58ff3b75a6e9d927676c9c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Apr 2024 23:09:51 +0300 Subject: [PATCH 029/389] Update songs.md --- docs/reference/songs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/songs.md b/docs/reference/songs.md index 90e5942ca..a598e1178 100644 --- a/docs/reference/songs.md +++ b/docs/reference/songs.md @@ -1,6 +1,6 @@ # Official Songs -> **As of Geometry Dash 2.113, there are 38 songs which are used by the game within official levels.** +> **As of Geometry Dash 2.205, there are 39 songs which are used by the game within official levels.** ## Table of Official Songs From 6dd2371c360effe46469e34c01af5144bf22baea Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 00:53:47 +0300 Subject: [PATCH 030/389] Update and rename getGJLevelLists.php to getGJLevelLists.md --- .../endpoints/lists/{getGJLevelLists.php => getGJLevelLists.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/endpoints/lists/{getGJLevelLists.php => getGJLevelLists.md} (99%) diff --git a/docs/endpoints/lists/getGJLevelLists.php b/docs/endpoints/lists/getGJLevelLists.md similarity index 99% rename from docs/endpoints/lists/getGJLevelLists.php rename to docs/endpoints/lists/getGJLevelLists.md index 384ba6a65..7dc8201ea 100644 --- a/docs/endpoints/lists/getGJLevelLists.php +++ b/docs/endpoints/lists/getGJLevelLists.md @@ -31,7 +31,7 @@ | 3 | Trending | | 4 | Recent | | 5 | User's lists, uses `str` as the **account ID** | -| 6 | Unknown (returns the same levels as Awarded but in a different order) | +| 6 | Lists button | | 7 | Magic (returns the same levels as most liked) | | 11 | Awarded | | 12 | Followed (see `followed` parameter) | From 4a432367e3d68a105b0200a37524b8272b41e574 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 01:01:10 +0300 Subject: [PATCH 031/389] Update generic.md --- docs/endpoints/generic.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/generic.md b/docs/endpoints/generic.md index 33801121a..c9794fe7c 100644 --- a/docs/endpoints/generic.md +++ b/docs/endpoints/generic.md @@ -24,7 +24,9 @@ In 99% of cases, Geometry Dash requires you to send `POST` request. The request - The parameters required will be detailed in their respective sections. **Rate Limits** \ -One thing to be mindful about is the number of requests you send at a given time. Sending too many requests will result in you becoming rate limited and not being able to send any more requests for a certain duration. As the number of requests required to start a rate limit changes, we are unable to provide exact numbers +One thing to be mindful about is the number of requests you send at a given time. Sending too many requests will result in you becoming rate limited and not being able to send any more requests for a certain duration. As the number of requests required to start a rate limit changes, we are unable to provide exact numbers, but as of November 3rd, 2023, they are roughly: +- 20x downloadGJLevel per minute, all other data-retrieval endpoints - 2 per second +However, there are some longer-term limits applied on top of that as well. ## **Alternative Method** > As of May 31st, 2023. An alternative method is using IPv6 to interact with the servers @@ -32,4 +34,4 @@ One thing to be mindful about is the number of requests you send at a given time ```py #>curl http://[2600:3c03::f03c:91ff:fe69:863b]/database/getGJLevels21.php -X POST -d secret=Wmfd2893gb7 1:6508283:2:ReTraY:5:3:6:4993756:8:10:9:10:10:71657392:12:0:13:21:14:6541047:17::43:3:25::18:2:19:7730:42:0:45:20000:3:VGhhbmtzIGZvciBwbGF5aW5nIEdlb21ldHJ5IERhc2g=:15:3:30:0:31:0:37:3:38:1:39:2:46:1:47:2:35:557117|... -``` \ No newline at end of file +``` From f88d9f1352220e28cf78411250e3ccc16ce1f7ac Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 01:01:21 +0300 Subject: [PATCH 032/389] Update generic.md --- docs/endpoints/generic.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/endpoints/generic.md b/docs/endpoints/generic.md index c9794fe7c..9d5d72f29 100644 --- a/docs/endpoints/generic.md +++ b/docs/endpoints/generic.md @@ -26,6 +26,7 @@ In 99% of cases, Geometry Dash requires you to send `POST` request. The request **Rate Limits** \ One thing to be mindful about is the number of requests you send at a given time. Sending too many requests will result in you becoming rate limited and not being able to send any more requests for a certain duration. As the number of requests required to start a rate limit changes, we are unable to provide exact numbers, but as of November 3rd, 2023, they are roughly: - 20x downloadGJLevel per minute, all other data-retrieval endpoints - 2 per second + However, there are some longer-term limits applied on top of that as well. ## **Alternative Method** From 55fbba4c08c1cfd661ea0f3c3efa3e85d9de4471 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 10:48:39 +0300 Subject: [PATCH 033/389] Update user.md --- docs/resources/server/user.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/resources/server/user.md b/docs/resources/server/user.md index 9fc247bf8..432cda1cf 100644 --- a/docs/resources/server/user.md +++ b/docs/resources/server/user.md @@ -27,8 +27,8 @@ A list of all known keys can be found in the table below | 7 | accountHighlight | **Integer** | The accountID of the player. Is used for highlighting the player on the leaderboards | | 8 | creatorpoints | **Integer** | The count of creatorpoints player have | | 9 | iconID | **Integer** | maybe... [link](https://github.com/gd-programming/gddocs/pull/16/files#r417926661) | -| 10 | playerColor | **Integer** | First color of the player use | -| 11 | playerColor2 | **Integer** | Second color of the player use | +| 10 | color | **Integer** | First color of the player use | +| 11 | color2 | **Integer** | Second color of the player use | | 13 | secretCoins | **Integer** | The count of coins player have | | 14 | iconType | **Integer** | The iconType of the player use | | 15 | special | **Integer** | The special number of the player use | @@ -60,6 +60,13 @@ A list of all known keys can be found in the table below | 48 | accExplosion | **Integer** | The explosion number of the player use | | 49 | modlevel | **Integer** | 0: None, 1: Normal Mod(yellow), 2: Elder Mod(orange) | | 50 | commentHistoryState | **Integer** | 0: All, 1: Only friends, 2: None | +| 51 | color3 | **Integer** | The ID of the player's glow color | +| 52 | moons | **Integer** | The amount of moons the player has | +| 53 | accSwing | **Integer** | The player's swing | +| 54 | accJetpack | **Integer** | The player's jetpack | +| 55 | demons | **String** | Breakdown of the player's demons, in the format {easy},{medium},{hard}.{insane},{extreme},{easyPlatformer},{mediumPlatformer},{hardPlatformer},{insanePlatformer},{extremePlatformer},{weekly},{gauntlet} +| 56 | classicLevels | **String** | Breakdown of the player's classic mode non-demons, in the format {auto},{easy},{normal},{hard},{harder},{insane},{daily},{gauntlet} +| 57 | platformerLevels | **String** | Breakdown of the player's platformer mode non-demons, in the format {auto},{easy},{normal},{hard},{harder},{insane} ### Trivia From a244c2b00dbfac0ce9b76dec74de4cb50fd47e18 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 10:53:56 +0300 Subject: [PATCH 034/389] Update user.md --- docs/resources/server/user.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/user.md b/docs/resources/server/user.md index 432cda1cf..fcdaf7cc3 100644 --- a/docs/resources/server/user.md +++ b/docs/resources/server/user.md @@ -10,7 +10,7 @@ A typical user server response is structured with a `key:value:key:value` pairin #### **User Example Response** ```md -1:TheWylieMaster:2:84696119:13:67:17:176:10:4:11:16:3:1725:46:2991:4:33:8:0:18:0:19:0:50:0:20:../watch?v=dQw4w9WgXcQ:21:31:22:10:23:30:24:1:25:35:26:23:28:1:43:11:48:1:30:0:16:9276649:31:0:44:TheWylieMaster:45::49:0:38:0:39:0:40:0:41:1:29:1 +1:TheWylieMaster:2:84696119:13:73:17:251:10:4:11:16:51:21:3:2441:52:80:46:4062:4:42:8:0:18:0:19:0:50:1:20:%%00:21:31:22:10:23:30:24:86:25:35:26:23:28:1:43:11:48:1:53:1:54:5:30:283041:16:9276649:31::44:TheWylieMaster:45:wyliemaster:49:0:55:32,4,2,0,0,0,0,0,0,0,4,0:56:134,109,93,101,49,13,32,45:57:0,1,4,9,3,0,0:29:1 ``` From 8c4bfd0373e0d3b2c32b0953358f93149f5078f1 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 10:54:19 +0300 Subject: [PATCH 035/389] Update user.md --- docs/resources/server/user.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/resources/server/user.md b/docs/resources/server/user.md index fcdaf7cc3..2f783c078 100644 --- a/docs/resources/server/user.md +++ b/docs/resources/server/user.md @@ -64,9 +64,9 @@ A list of all known keys can be found in the table below | 52 | moons | **Integer** | The amount of moons the player has | | 53 | accSwing | **Integer** | The player's swing | | 54 | accJetpack | **Integer** | The player's jetpack | -| 55 | demons | **String** | Breakdown of the player's demons, in the format {easy},{medium},{hard}.{insane},{extreme},{easyPlatformer},{mediumPlatformer},{hardPlatformer},{insanePlatformer},{extremePlatformer},{weekly},{gauntlet} -| 56 | classicLevels | **String** | Breakdown of the player's classic mode non-demons, in the format {auto},{easy},{normal},{hard},{harder},{insane},{daily},{gauntlet} -| 57 | platformerLevels | **String** | Breakdown of the player's platformer mode non-demons, in the format {auto},{easy},{normal},{hard},{harder},{insane} +| 55 | demons | **String** | Breakdown of the player's demons, in the format `{easy},{medium},{hard}.{insane},{extreme},{easyPlatformer},{mediumPlatformer},{hardPlatformer},{insanePlatformer},{extremePlatformer},{weekly},{gauntlet}` +| 56 | classicLevels | **String** | Breakdown of the player's classic mode non-demons, in the format `{auto},{easy},{normal},{hard},{harder},{insane},{daily},{gauntlet}` +| 57 | platformerLevels | **String** | Breakdown of the player's platformer mode non-demons, in the format `{auto},{easy},{normal},{hard},{harder},{insane}` ### Trivia From dd970d3bf43aba285f457db9a75107a0ac2b9d19 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:01:05 +0300 Subject: [PATCH 036/389] Update level.md --- docs/resources/server/level.md | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/docs/resources/server/level.md b/docs/resources/server/level.md index 2898b6d80..0f8bae36e 100644 --- a/docs/resources/server/level.md +++ b/docs/resources/server/level.md @@ -2,8 +2,7 @@ ## Level -A level is a playable object in Geometry Dash, namely coming with data that explains on what it is, and the string that the client interprets, known as a [level string](/topics/levelstring_encoding_decoding). It is also used for level lists. - +A level is a playable object in Geometry Dash, namely coming with data that explains on what it is, and the string that the client interprets, known as a [level string](/topics/levelstring_encoding_decoding). A typical level server response is structured with a `key:value:key:value` pairing and is then split with a `|` @@ -14,11 +13,6 @@ A typical level server response is structured with a `key:value:key:value` pairi ```md 1:6508283:2:ReTraY:3:VGhhbmtzIGZvciBwbGF5aW5nIEdlb21ldHJ5IERhc2g=:4:{levelString}:5:3:6:4993756:8:10:9:10:10:39431612:12:0:13:21:14:4125578:17::43:3:25::18:2:19:7730:42:0:45:20000:15:3:30:0:31:0:28:5 years:29:1 year:35:557117:36:0_733_0_0_0_0_574_716_0_0_352_78_729_0_42_0_833_68_0_347_0_38_240_205_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0_0:37:3:38:1:39:2:46:7729:47:13773:40:0:27:AwMABAYDBw==#eb541c03f8355c0709f8007a1d9a595ae5bedc5d#291568b26b08d70a198fca10a87c736a2823be0c ``` - -#### **List Example Response** -```md -1:4788:2:Progression Level 1:3:R0QgQmVnaW5uZXJzIExpc3QgbGV2ZWwgMSEgR29vZCBsaXN0IG9mIGxldmVscyB0byBpbnRyb2R1Y2UgZnJpZW5kcyB0byB0aGUgZ2FtZSE=:5:5:49:6061424:50:tricipital:10:1451689:7:1:14:61715:19:1:51:90752263,59760047,88982532,78743788,88022936,89413344,90994090,74542823,74612523,55037478:55:20:56:5:28:1703050435:29:1703402400#15479163:tricipital:6061424#9999:0:10#f5da5823d94bbe7208dd83a30ff427c7d88fdb99 -``` Each `key` is tied to a component within the client and the `value` sets data for the specific component. @@ -27,22 +21,20 @@ A list of all known keys can be found in the table below ### Level Object Keys indicated with an asterisk (\*) are only returned from the downloadGJLevel22 endpoint. -Keys indicated with a caret (^) are only used for lists. #### Level Structure | Key | Name/Value | Type | Description |-----|---------------------------|----------------------------------------------|-------------------------------------------------------------------------- -| 1 | levelID | **Integer** | The id of the level / list -| 2 | levelName | **String** | The name of the level / list -| 3 | description | **String** | The level / list description, encoded in [base64](/topics/encryption/base64.md) +| 1 | levelID | **Integer** | The id of the level +| 2 | levelName | **String** | The name of the level +| 3 | description | **String** | The level description, encoded in [base64](/topics/encryption/base64.md) | 4* | levelString | **[Level String](/topics/levelstring_encoding_decoding)**| All the data for the level -| 5 | version | **Integer** | The version of the level / list published -| 6 | playerID | **Integer** | The player ID of the level / list author -| 7^ | difficulty | **Integer** | The difficulty face for the list. -1 = N/A, 0 = Auto, 1 = Easy, 2 = Normal, 3 = Hard, 4 = Harder, 5 = Insane, 6 = Easy Demon, 7 = Medium Demon, 8 = Hard Demon, 9 = Insane Demon, 10 = Extreme Demon +| 5 | version | **Integer** | The version of the level published +| 6 | playerID | **Integer** | The player ID of the level author | 8 | difficultyDenominator | **Integer** | Returns 0 if the level is N/A, returns 10 if a difficulty is assigned. Historically used to be the amount of people who have voted on the difficulty. | 9 | difficultyNumerator | **Integer** | The nominator used for calculating the level difficulty. Divided by the denominator to get the difficulty icon. Nowadays just 0 = unrated, 10 = easy, 20 = normal, 30 = hard, 40 = harder, 50 = insane. Can be also used to determine the demon difficulty as a side-effect of the voting system. Historically used to be the sum of stars from all votes | -| 10 | downloads | **Integer** | The amount of times the level / list has been downloaded +| 10 | downloads | **Integer** | The amount of times the level has been downloaded | 11 | setCompletes | **Integer** | The Number of people who have completed a specific level removed in update 2.1 | 12 | officialSong | **Integer** | The official song number used by the level, if applicable | 13 | gameVersion | **Integer** | The GD version the level was uploaded in. Versions 1.0 to 1.6 use version numbers 1 to 7 respectively. Version 10 is 1.7. Otherwise, divide the version number by ten to get the correct number. @@ -51,12 +43,12 @@ Keys indicated with a caret (^) are only used for lists. | 16 | dislikes | **Integer** | dislikes - likes | | 17 | demon | **Bool** | If the level's difficulty is demon | 18 | stars | **Integer** | The amount of stars rewarded for completing the level -| 19 | featureScore | **Integer** | 0 if the level is not featured, otherwise a positive number. The higher it is, the higher the level appears on the featured levels list. Always returns either 0 or 1 for lists. +| 19 | featureScore | **Integer** | 0 if the level is not featured, otherwise a positive number. The higher it is, the higher the level appears on the featured levels list. | 25 | auto | **Bool** | If the level's difficulty is auto | 26 | recordString | **String** | appears in the [GJGameLevel parser](https://imgur.com/a/S2bWLCC) but is unused | 27* | password | **Encrypted String** | The password required to copy the level. It is XOR encrypted with a key of 26364 -| 28* | uploadDate | **String** | The approximate date the level was uploaded on. If it's a list, the value is the Unix timestamp in seconds -| 29* | updateDate | **String** | The approximate date the level was last updated on. If it's a list, the value is the Unix timestamp in seconds +| 28* | uploadDate | **String** | The approximate date the level was uploaded on +| 29* | updateDate | **String** | The approximate date the level was last updated on | 30 | copiedID | **Integer** | The ID the of the original level (if the level was copied) | 31 | twoPlayer | **Bool** | Whether the level uses two player mode | 35 | customSongID | **Integer** | The ID of the custom Newgrounds song used in the level @@ -73,13 +65,8 @@ Keys indicated with a caret (^) are only used for lists. | 46 | editorTime | **Integer** | the total number of seconds spend on the current copy of a level | 47 | editorTime(Copies) | **Integer** | The accumulative total of seconds spend on previous copies of the level | 48 | settingsString [Unused] | **String** | It was found in early 2.1 coming from the servers and was removed shortly after. The `December 2019 2.2 Leaks` however have information regarding it showing that it is called `settingsString` but, there is no information regarding its usage | -| 49^ | accountID | **Integer** | The account ID of the list author -| 50^ | username | **String** | The username of the list author -| 51^ | ids | **Comma-Separated List** | All IDs in the list, separated by commas | 52 | songIDs | **Comma-Separated List** | The list of all song IDs in the level, separated by commas | 53 | sfxIDs | **Comma-Separated List** | The list of all SFX IDs in the level, separated by commas -| 55^ | listReward | **Integer** | The amount of diamonds awarded upon beating the required amount of levels in the list -| 56^ | listRewardRequirement | **Integer** | The amount of levels needed to claim the list reward | 57 | verificationTime | **Integer** | How long the level took to verify (in frames, assume 240 FPS) ### Trivia From 4591400c8daa3ef06d850ef220fbec4abd5089fe Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:06:12 +0300 Subject: [PATCH 037/389] Create list.md --- docs/resources/server/list.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 docs/resources/server/list.md diff --git a/docs/resources/server/list.md b/docs/resources/server/list.md new file mode 100644 index 000000000..c4cc3a618 --- /dev/null +++ b/docs/resources/server/list.md @@ -0,0 +1,30 @@ +# List Object +A level list is a list of levels - playable objects in Geometry Dash. + +A typical list server response is structured with a key:value:key:value pairing and is then split with a | +#### **List Example Response** +```md +1:4788:2:Progression Level 1:3:R0QgQmVnaW5uZXJzIExpc3QgbGV2ZWwgMSEgR29vZCBsaXN0IG9mIGxldmVscyB0byBpbnRyb2R1Y2UgZnJpZW5kcyB0byB0aGUgZ2FtZSE=:5:5:49:6061424:50:tricipital:10:1451689:7:1:14:61715:19:1:51:90752263,59760047,88982532,78743788,88022936,89413344,90994090,74542823,74612523,55037478:55:20:56:5:28:1703050435:29:1703402400#15479163:tricipital:6061424#9999:0:10#f5da5823d94bbe7208dd83a30ff427c7d88fdb99 +``` + +Each `key` is tied to a component within the client and the `value` sets data for the specific component. +A list of all known keys can be found in the table below + +#### List Structure +| Key | Name/Value | Type | Description +|-----|---------------------------|----------------------------------------------|-------------------------------------------------------------------------- +| 1 | levelID | **Integer** | The id of the list +| 2 | levelName | **String** | The name of the list +| 3 | description | **String** | The list description, encoded in [base64](/topics/encryption/base64.md) +| 5 | version | **Integer** | The version of the list published +| 7 | difficulty | **Integer** | The difficulty face for the list. -1 = N/A, 0 = Auto, 1 = Easy, 2 = Normal, 3 = Hard, 4 = Harder, 5 = Insane, 6 = Easy Demon, 7 = Medium Demon, 8 = Hard Demon, 9 = Insane Demon, 10 = Extreme Demon +| 10 | downloads | **Integer** | The amount of times the list has been downloaded +| 14 | likes | **Integer** | likes - dislikes | +| 19 | rated | **Bool** | If the list is rated or not +| 28 | uploadDate | **String** | The Unix timestamp of when the list was uploaded +| 29 | updateDate | **String** | The Unix timestamp of when the list was last updated +| 49 | accountID | **Integer** | The account ID of the list author +| 50 | username | **String** | The username of the list author +| 51 | ids | **Comma-Separated List** | All level IDs in the list, separated by commas +| 55 | listReward | **Integer** | The amount of diamonds awarded upon beating the required amount of levels in the list +| 56 | listRewardRequirement | **Integer** | The amount of levels needed to claim the list reward From 219bc115ebfed8cada27a5628bcb3a50bb2e5a94 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:06:31 +0300 Subject: [PATCH 038/389] Update list.md --- docs/resources/server/list.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/list.md b/docs/resources/server/list.md index c4cc3a618..b6bd365ec 100644 --- a/docs/resources/server/list.md +++ b/docs/resources/server/list.md @@ -1,7 +1,7 @@ # List Object A level list is a list of levels - playable objects in Geometry Dash. -A typical list server response is structured with a key:value:key:value pairing and is then split with a | +A typical list server response is structured with a `key:value:key:value` pairing and is then split with a `|` #### **List Example Response** ```md 1:4788:2:Progression Level 1:3:R0QgQmVnaW5uZXJzIExpc3QgbGV2ZWwgMSEgR29vZCBsaXN0IG9mIGxldmVscyB0byBpbnRyb2R1Y2UgZnJpZW5kcyB0byB0aGUgZ2FtZSE=:5:5:49:6061424:50:tricipital:10:1451689:7:1:14:61715:19:1:51:90752263,59760047,88982532,78743788,88022936,89413344,90994090,74542823,74612523,55037478:55:20:56:5:28:1703050435:29:1703402400#15479163:tricipital:6061424#9999:0:10#f5da5823d94bbe7208dd83a30ff427c7d88fdb99 From 1ffbf606fa57543d7fb0ae3ee543f9cedd77082c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:07:05 +0300 Subject: [PATCH 039/389] Update list.md --- docs/resources/server/list.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/server/list.md b/docs/resources/server/list.md index b6bd365ec..ea6d56ba4 100644 --- a/docs/resources/server/list.md +++ b/docs/resources/server/list.md @@ -13,8 +13,8 @@ A list of all known keys can be found in the table below #### List Structure | Key | Name/Value | Type | Description |-----|---------------------------|----------------------------------------------|-------------------------------------------------------------------------- -| 1 | levelID | **Integer** | The id of the list -| 2 | levelName | **String** | The name of the list +| 1 | listID | **Integer** | The id of the list +| 2 | listName | **String** | The name of the list | 3 | description | **String** | The list description, encoded in [base64](/topics/encryption/base64.md) | 5 | version | **Integer** | The version of the list published | 7 | difficulty | **Integer** | The difficulty face for the list. -1 = N/A, 0 = Auto, 1 = Easy, 2 = Normal, 3 = Hard, 4 = Harder, 5 = Insane, 6 = Easy Demon, 7 = Medium Demon, 8 = Hard Demon, 9 = Insane Demon, 10 = Extreme Demon From 3299ee366c9d09e34ca1201b8f97005f514040db Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:07:28 +0300 Subject: [PATCH 040/389] Update list.md --- docs/resources/server/list.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/list.md b/docs/resources/server/list.md index ea6d56ba4..8688379cc 100644 --- a/docs/resources/server/list.md +++ b/docs/resources/server/list.md @@ -25,6 +25,6 @@ A list of all known keys can be found in the table below | 29 | updateDate | **String** | The Unix timestamp of when the list was last updated | 49 | accountID | **Integer** | The account ID of the list author | 50 | username | **String** | The username of the list author -| 51 | ids | **Comma-Separated List** | All level IDs in the list, separated by commas +| 51 | levelIDs | **Comma-Separated List** | All level IDs in the list, separated by commas | 55 | listReward | **Integer** | The amount of diamonds awarded upon beating the required amount of levels in the list | 56 | listRewardRequirement | **Integer** | The amount of levels needed to claim the list reward From d61cda029dd7263ac6e83387ab0e7fb0a18cd22f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:10:01 +0300 Subject: [PATCH 041/389] Update list.md --- docs/resources/server/list.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/resources/server/list.md b/docs/resources/server/list.md index 8688379cc..ff86d3670 100644 --- a/docs/resources/server/list.md +++ b/docs/resources/server/list.md @@ -1,4 +1,6 @@ -# List Object +# Server List Resource + +## List Object A level list is a list of levels - playable objects in Geometry Dash. A typical list server response is structured with a `key:value:key:value` pairing and is then split with a `|` From 91d6830de32b650cce53957332140c33966a0f21 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:15:31 +0300 Subject: [PATCH 042/389] Update gauntlet.md --- docs/resources/server/gauntlet.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index 3b4292a4c..a68b81446 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -4,10 +4,8 @@ Gauntlets are a collection of themed levels created by the users of Geometry Dash which were hand-picked by RobTop. - - As of Geometry Dash 2.11, There are `15 gauntlets` - - - According to the [December 2019 2.2 leaks](https://www.reddit.com/r/geometrydash/comments/e9b0y6/update_22_leaks_megathread/), 2.2 will include `44 Gauntlets` - - **A list of the Gauntlet Names can be found [here](/resources/server/gauntlet?id=gauntlet-names)**
*Keep in mind that these are subject to change* + - As of Geometry Dash 2.205, there are `23 gauntlets` + - **A list of the Gauntlet Names can be found [here](/resources/server/gauntlet?id=gauntlet-names)**
*Keep in mind that these are subject to change* A typical gauntlet server response is structured with a `key:value:key:value` pairing and is then split with a `|` @@ -80,7 +78,11 @@ Here is a table which shows which `gauntletID` corresponds to a specific gauntle | 42| Castle| | 43| Grave| | 44| Temple| - + | 46| World| + | 47| Galaxy| + | 48| Universe| + | 49| Discord| + | 50| Split| ### Trivia -- Gauntlets use the same response parser as [MapPacks](/resources/server/mappack) but they do not share the full range of features mappacks have \ No newline at end of file +- Gauntlets use the same response parser as [MapPacks](/resources/server/mappack) but they do not share the full range of features mappacks have From 59a7938b47ca3d6d4f803f9ccf54f3d3d300a835 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:17:08 +0300 Subject: [PATCH 043/389] Update gauntlet.md --- docs/resources/server/gauntlet.md | 46 +++++++++++++++---------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index a68b81446..3781c3a16 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -34,27 +34,27 @@ Here is a table which shows which `gauntletID` corresponds to a specific gauntle | ID ⠀| Name | |:---|:-----| - | 1| Fire| - | 2| Ice| - | 3| Poison| - | 4| Shadow| - | 5| Lava| - | 6| Bonus| - | 7| Chaos| - | 8| Demon| - | 9| Time| - | 10| Crystal| - | 11| Magic| - | 12| spike| - | 13| Monster| - | 14| Doom| - | 15| Death| + | 1| **Fire**| + | 2| **Ice**| + | 3| **Poison**| + | 4| **Shadow**| + | 5| **Lava**| + | 6| **Bonus**| + | 7| **Chaos**| + | 8| **Demon**| + | 9| **Time**| + | 10| **Crystal**| + | 11| **Magic**| + | 12| **spike**| + | 13| **Monster**| + | 14| **Doom**| + | 15| **Death**| | 16| Forest| | 17| Rune| | 18| Force| | 19| Spooky| | 20| Dragon| - | 21| Water| + | 21| **Water**| | 22| Haunted| | 23| Acid| | 24| Witch| @@ -67,7 +67,7 @@ Here is a table which shows which `gauntletID` corresponds to a specific gauntle | 31| Ghost| | 32| Gem| | 33| Inferno| - | 34| Portal| + | 34| **Portal**| | 35| Strange| | 36| Fantasy| | 37| Christmas| @@ -75,14 +75,14 @@ Here is a table which shows which `gauntletID` corresponds to a specific gauntle | 39| Mystery| | 40| Cursed| | 41| Cyborg| - | 42| Castle| + | 42| **Castle**| | 43| Grave| | 44| Temple| - | 46| World| - | 47| Galaxy| - | 48| Universe| - | 49| Discord| - | 50| Split| + | 46| **World**| + | 47| **Galaxy**| + | 48| **Universe**| + | 49| **Discord**| + | 50| **Split**| ### Trivia - Gauntlets use the same response parser as [MapPacks](/resources/server/mappack) but they do not share the full range of features mappacks have From bb3dd8a89a89ab36e756fff553b3909a2569a3a7 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:17:34 +0300 Subject: [PATCH 044/389] Update gauntlet.md --- docs/resources/server/gauntlet.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index 3781c3a16..240af11d6 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -31,6 +31,7 @@ A list of all known keys can be found in the table below Here is a table which shows which `gauntletID` corresponds to a specific gauntlet +Note: Bolded gauntlet names are the ones that are added in-game | ID ⠀| Name | |:---|:-----| From 27d644e4eee9c2b2d91d3d3f04131be45d29d08a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:26:04 +0300 Subject: [PATCH 045/389] Update getGJLevelLists.md --- docs/endpoints/lists/getGJLevelLists.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/lists/getGJLevelLists.md b/docs/endpoints/lists/getGJLevelLists.md index 7dc8201ea..76fa05442 100644 --- a/docs/endpoints/lists/getGJLevelLists.md +++ b/docs/endpoints/lists/getGJLevelLists.md @@ -1,6 +1,6 @@ # getGJLevelLists -> This endpoint is used to search level listsb y name and / or filter +> This endpoint is used to search level lists by name and / or filter ## Parameters From c76cd1dcdbdebe3f825958aca80584555b59a07a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:29:37 +0300 Subject: [PATCH 046/389] Update leaderboardscore.md --- docs/resources/server/leaderboardscore.md | 40 ++++++++++++++++++----- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/docs/resources/server/leaderboardscore.md b/docs/resources/server/leaderboardscore.md index 4f7dc05cb..f9df9b1f3 100644 --- a/docs/resources/server/leaderboardscore.md +++ b/docs/resources/server/leaderboardscore.md @@ -22,10 +22,15 @@ A typical leaderboard server response is structured with a `key:value:key:value` 1:TheWylieMaster:2:84696119:9:1:10:4:11:16:14:3:15:2:16:9276649:3:34:6:1:13:0:42:1 second ``` +### **Platformer Level Leaderboard Example** +```md +1:nebularius:2:245629812:9:24:10:17:11:3:14:5:15:2:16:28102632:3:750:6:1:42:21 hours +``` + ### **Top Leaderboard Example** ```md -1:xMiguel007:2:2866103:13:149:17:7219:6:1:9:37:10:35:11:3:14:0:15:2:16:70846:3:65710:8:0:46:12879:4:1073 +1:Smiffy777:2:7708568:13:164:17:57051:6:1:9:115:10:29:11:14:14:0:15:2:16:1413859:3:273000:52:4684:8:0:46:204136:4:7018 ``` @@ -33,25 +38,44 @@ A typical leaderboard server response is structured with a `key:value:key:value` Each `key` is tied to a component within the client and the `value` sets data for the specific component. A list of all known keys can be found in the table below -### Leaderboard Score Structure - -**Note:** keys marked by a `*` are only used for level leaderboards +### Level Leaderboard Score Structure | Key | Name/Value | Type | Description |-----|---------------------------|----------------------------------------------|-------------------------------------------------------------------------- | 1 | userName | **String** | The username of the user | 2 | playerID | **Integer** | The player ID of the user. **This is different than the account ID** -| 3 | percentage* | **Integer** | Percentage the user has on the level +| 3 | percentage | **Integer** | Percentage the user has on the level. If the level is platformer, this is the time in milliseconds instead | 6 | ranking | **Integer** | What rank they are (e.g. Viprin would have 1 in the creating leaderboard) | 9 | Icon | **Integer** | Which icon the user is using, starting with 1 as the first icon | 10 | playerColor | **Integer** | The user's primary player color, presumably ordered cronologically from left to right per update | 11 | playerColor2 | **Integer** | The user's secondary player color, presumably ordered cronologically from left to right per update -| 13 | coins | **Integer** | Secret coins/number of usercoins you get on a level* -| 14 | iconType | **Integer** | The user's icon type indexing an array of `icon, ship, ball, ufo, wave, robot, spider` +| 13 | coins | **Integer** | Number of usercoins you get on a level +| 14 | iconType | **Integer** | The user's icon type indexing an array of `icon, ship, ball, ufo, wave, robot, spider, swing, jetpack` | 15 | special | **Integer** | functions the same as glow however it returns a 2 rather than a 1 | 16 | accountID | **Integer** | The user's account ID. **This is different than the player ID** | 42 | age | **String** | How long ago the score was set (e.g. "2 months") +### Top Leaderboard Score Structure + +| Key | Name/Value | Type | Description +|-----|---------------------------|----------------------------------------------|-------------------------------------------------------------------------- +| 1 | userName | **String** | The username of the user +| 2 | playerID | **Integer** | The player ID of the user. **This is different than the account ID** +| 3 | stars | **Integer** | The amount of stars the player has +| 4 | demons | **integer** | The amount of demons the player has +| 6 | ranking | **Integer** | What rank they are (e.g. Viprin would have 1 in the creating leaderboard) +| 8 | creatorPoints | **Integer** | The amount of creator points the player has +| 9 | Icon | **Integer** | Which icon the user is using, starting with 1 as the first icon +| 10 | playerColor | **Integer** | The user's primary player color, presumably ordered cronologically from left to right per update +| 11 | playerColor2 | **Integer** | The user's secondary player color, presumably ordered cronologically from left to right per update +| 13 | coins | **Integer** | Secret coins +| 14 | iconType | **Integer** | The user's icon type indexing an array of `icon, ship, ball, ufo, wave, robot, spider, swing, jetpack` +| 15 | special | **Integer** | functions the same as glow however it returns a 2 rather than a 1 +| 16 | accountID | **Integer** | The user's account ID. **This is different than the player ID** +| 17 | userCoins | **Integer** | The amount of user coins the player has +| 46 | diamonds | **Integer** | The amount of diamonds the player has +| 52 | moons | **Integer** | The amount of moons the player has + ### Trivia -- The key structure that leaderboards follow are exactly the same as the structure used for [Player Profiles](/resources/server/user.md) \ No newline at end of file +- The key structure that leaderboards follow are exactly the same as the structure used for [Player Profiles](/resources/server/user.md) From b3e0cb1a505b4af7bf8027368d788c3a6220eafa Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:32:33 +0300 Subject: [PATCH 047/389] Update restore.md --- docs/resources/server/restore.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/restore.md b/docs/resources/server/restore.md index 24088bf5b..4b056265f 100644 --- a/docs/resources/server/restore.md +++ b/docs/resources/server/restore.md @@ -2,7 +2,7 @@ ## RestoreGJItems -`Restore` was a feature used in Geometry dash from versions `1.7 - 2.0` and it was used as an alternative to the [Account System](/topics/accounts.md) that is currently used as of 2.11 +`Restore` was a feature used in Geometry dash from versions `1.7 - 2.0` and it was used as an alternative to the [Account System](/topics/accounts.md) that is currently used as of 2.205 A typical Gauntlet Server response is structured with a `key:value:key:value` pairing *Official Levels behave a bit differently as you will find out further into his page* From 7e9e714f135fadca65f27c9a438e76b5ae24c868 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 11:34:28 +0300 Subject: [PATCH 048/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index c70ddef97..a0f378e0d 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -17,6 +17,7 @@ - [Gauntlet](/resources/server/gauntlet.md) - [Leaderboard Score](/resources/server/leaderboardscore.md) - [Level](/resources/server/level.md) + - [List](/resources/server/list.md) - [Map Pack](/resources/server/mappack.md) - [Message](/resources/server/message.md) - [Song](/resources/server/song.md) From af55f647b7c87182e551f0a183f7684c6d35988e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 12:27:28 +0300 Subject: [PATCH 049/389] Update getGJLevels21.md --- docs/endpoints/levels/getGJLevels21.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index bec1f485b..aee96ec10 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -61,6 +61,7 @@ | 16 | Hall of fame | | 17 | Featured in GD World | | 18 | Unknown (always empty, perhaps robtop only?) | +| 19 | Unknown (same as map packs but this type has pagination and no star rate filter) | | 21 | Daily history | | 22 | Weekly history | | 25 | Level list, uses `str` as the list ID | From 64e3f8ea8dbbac89349dad19dc0dc7d42c648ca5 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 15:13:33 +0300 Subject: [PATCH 050/389] Update uploadGJLevel21.md --- docs/endpoints/levels/uploadGJLevel21.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/levels/uploadGJLevel21.md b/docs/endpoints/levels/uploadGJLevel21.md index 8aced6e98..f9dba03ed 100644 --- a/docs/endpoints/levels/uploadGJLevel21.md +++ b/docs/endpoints/levels/uploadGJLevel21.md @@ -6,7 +6,7 @@ Uploads a created level to the servers. ### Required Parameters -**gameVersion** - The game version. Currently 21 +**gameVersion** - The game version. Currently 22 **accountID** - The uploader's account ID @@ -22,7 +22,7 @@ Uploads a created level to the servers. **levelVersion** - The version number of the level -**levelLength** - The length of the level as a number, where 0 is tiny and 4 is XL +**levelLength** - The length of the level as a number, where 0 is tiny, 4 is XL and 5 is Platformer **audioTrack** - The [official song number](./reference.md) used in the level. Set to 0 if a newgrounds song is used @@ -64,7 +64,7 @@ Uploads a created level to the servers. **levelInfo** - A random gzip compressed string -**binaryVersion** - 35 +**binaryVersion** - 37 on Mac, 40 on Windows, 41 on Mobile **gdw** - 0 From 8613e2660609776ed0d28906c5058485716fab48 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 4 Apr 2024 23:05:21 +0300 Subject: [PATCH 051/389] Update level.md --- docs/resources/server/level.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/resources/server/level.md b/docs/resources/server/level.md index 0f8bae36e..2ab762dc3 100644 --- a/docs/resources/server/level.md +++ b/docs/resources/server/level.md @@ -65,9 +65,9 @@ Keys indicated with an asterisk (\*) are only returned from the downloadGJLevel2 | 46 | editorTime | **Integer** | the total number of seconds spend on the current copy of a level | 47 | editorTime(Copies) | **Integer** | The accumulative total of seconds spend on previous copies of the level | 48 | settingsString [Unused] | **String** | It was found in early 2.1 coming from the servers and was removed shortly after. The `December 2019 2.2 Leaks` however have information regarding it showing that it is called `settingsString` but, there is no information regarding its usage | -| 52 | songIDs | **Comma-Separated List** | The list of all song IDs in the level, separated by commas -| 53 | sfxIDs | **Comma-Separated List** | The list of all SFX IDs in the level, separated by commas -| 57 | verificationTime | **Integer** | How long the level took to verify (in frames, assume 240 FPS) +| 52* | songIDs | **Comma-Separated List** | The list of all song IDs in the level, separated by commas +| 53* | sfxIDs | **Comma-Separated List** | The list of all SFX IDs in the level, separated by commas +| 57* | verificationTime | **Integer** | How long the level took to verify (in frames, assume 240 FPS) ### Trivia From 0b03a29238e969ef9f1ae4bf5d57a232e76ab473 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 1 Jun 2024 11:36:01 +0300 Subject: [PATCH 052/389] Update getGJLevels21.md --- docs/endpoints/levels/getGJLevels21.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index aee96ec10..ed2e43fb1 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -29,8 +29,8 @@ | `twoPlayer` | Two Player Mode filter, either 0 or 1 | | | `coins` | Coins filter, either 0 or 1 | | | `epic` | Epic filter, either 0 or 1 | | -| `legendary` | Legendary filter, either 0 or 1. Currently broken | | -| `mythic` | Mythic filter, either 0 or 1. Currently broken | | +| `legendary` | Legendary filter, either 0 or 1. | | +| `mythic` | Mythic filter, either 0 or 1. | | | `noStar` | Unrated filter, either 0 or 1 | | | `star` | Rated filter, either 0 or 1 | | | `song` | Official (or custom) song ID, not sent when off | | From 4c352486bb1f8a9baa81ad328600f2e1d4219148 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 7 Jun 2024 14:14:39 +0300 Subject: [PATCH 053/389] Update inner-level-string.md --- docs/resources/client/level-components/inner-level-string.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/level-components/inner-level-string.md b/docs/resources/client/level-components/inner-level-string.md index 800dad35d..322e37837 100644 --- a/docs/resources/client/level-components/inner-level-string.md +++ b/docs/resources/client/level-components/inner-level-string.md @@ -18,7 +18,8 @@ The level start object is still an object and formated exactly like a normal [le | kA1 | AudioTrack | **Integer** | The audio track which the level uses | | kA2 | Gamemode | **[Gamemode](enumerations.md)** | the gamemode the player starts with | | kA3 | Mini Mode | **bool** | determines whether the player starts off as mini Mode | -| kA4 | Speed | **[Speed](enumerations.md)** | the speed of the level at the starts | +| kA4 | Speed | **[Speed](enumerations.md)** | the speed of the level at the start | +| kA5 | Obj-2 Blending | **bool** | (deprecated since 1.9) Whether Object-2 (color channel 1) uses blending or not | | kA6 | Background Texture ID | **integer** | the ID of the background texture that is being used in the level
(enumerated in the same order as appears) | | kA7 | Ground Texture ID | **integer** | the ID of the ground texture that is being used in the level
(enumerated in the same order as appears) | | kA8 | Dual Mode | **bool** | determines whether the player starts off in dual Mode | From c8bc910087db147327f401c96a205f0f9a4dc55a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 14 Jun 2024 02:44:19 +0300 Subject: [PATCH 054/389] Update getGJLevels21.md --- docs/endpoints/levels/getGJLevels21.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index ed2e43fb1..a96528cdc 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -8,7 +8,7 @@ | ----------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------- | | `secret` | [Common secret](/reference/secrets.md) `Wmfd2893gb7` | Yes | | `gameVersion` | [Game Version](#), 22 on 2.2 | | -| `binaryVersion` | [Binary Version](#), 40 on 2.204 | | +| `binaryVersion` | [Binary Version](#), 42 on 2.206 | | | `type` | Search type, [see values](#type). Defaults to most liked | | | `str` | Search query, user ID or level list depending on `type` | Only on types 5 and 10 | | `page` | Which page to request, defaults to 0 | | From 6d5e97826e4b14720e693dae8d3e94fed87227ea Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 00:10:36 +0300 Subject: [PATCH 055/389] Update songs.md --- docs/reference/songs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/songs.md b/docs/reference/songs.md index a598e1178..417b84865 100644 --- a/docs/reference/songs.md +++ b/docs/reference/songs.md @@ -1,6 +1,6 @@ # Official Songs -> **As of Geometry Dash 2.205, there are 39 songs which are used by the game within official levels.** +> **As of Geometry Dash 2.206, there are 39 songs which are used by the game within official levels.** ## Table of Official Songs From 8f3bf9385eba79a014ebf752d914333b64d76f48 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 00:20:13 +0300 Subject: [PATCH 056/389] Update song.md --- docs/resources/server/song.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/resources/server/song.md b/docs/resources/server/song.md index d8ffc899b..587c52d7d 100644 --- a/docs/resources/server/song.md +++ b/docs/resources/server/song.md @@ -38,4 +38,9 @@ A list of all known keys can be found in the table below | 8 | isVerified | **Bool** | if the song artist is scouted on newgrounds | 9 | songPriority | **Integer** | priority over the song list | 10 | link | **String** | Link to the song's mp3 +| 11 | nongEnum | **Integer** | Type of NONG. 0 for none, 1 for NCS. +| 12 | extraArtistIDs | **Array\[Integer]** | IDs of extra artists, separated by `.` +| 13 | new | **Boolean** | Whether the NEW icon shows up or not +| 14 | newType | **Integer** | Type of NEW icon. 0 for Yellow, 1 for Blue +| 15 | extraArtistNames | **Array** | Seems to be an array of extra artist names, but seems to be unused. From 3d4d54adcf7fc38ff9e09813a2087a46298fbdf4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 00:20:55 +0300 Subject: [PATCH 057/389] Update song.md --- docs/resources/server/song.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/server/song.md b/docs/resources/server/song.md index 587c52d7d..89f877f41 100644 --- a/docs/resources/server/song.md +++ b/docs/resources/server/song.md @@ -24,6 +24,8 @@ A typical song server response is structured with a `key~|~value~|~key~|~value` Each `key` is tied to a component within the client and the `value` sets data for the specific component. A list of all known keys can be found in the table below +The IDs for Music Library songs start at 10,000,000 + #### Song Structure | Key | Name/Value | Type | Description From f73b65f91348330ac444f8f3540bad4aab8b9d06 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 00:22:23 +0300 Subject: [PATCH 058/389] Update restore.md --- docs/resources/server/restore.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/restore.md b/docs/resources/server/restore.md index 4b056265f..54839becd 100644 --- a/docs/resources/server/restore.md +++ b/docs/resources/server/restore.md @@ -2,7 +2,7 @@ ## RestoreGJItems -`Restore` was a feature used in Geometry dash from versions `1.7 - 2.0` and it was used as an alternative to the [Account System](/topics/accounts.md) that is currently used as of 2.205 +`Restore` was a feature used in Geometry dash from versions `1.7 - 2.0` and it was used as an alternative to the [Account System](/topics/accounts.md) that is currently used as of 2.206 A typical Gauntlet Server response is structured with a `key:value:key:value` pairing *Official Levels behave a bit differently as you will find out further into his page* From 482c068b48ae8913ff39a325eac3bf7cce83eba4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 00:26:35 +0300 Subject: [PATCH 059/389] Update getGJLevelLists.md --- docs/endpoints/lists/getGJLevelLists.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/lists/getGJLevelLists.md b/docs/endpoints/lists/getGJLevelLists.md index 76fa05442..d7a3688fb 100644 --- a/docs/endpoints/lists/getGJLevelLists.md +++ b/docs/endpoints/lists/getGJLevelLists.md @@ -8,7 +8,7 @@ | ----------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------- | | `secret` | [Common secret](/reference/secrets.md) `Wmfd2893gb7` | Yes | | `gameVersion` | [Game Version](#), 22 on 2.2 | | -| `binaryVersion` | [Binary Version](#), 40 on 2.204 | | +| `binaryVersion` | [Binary Version](#), 42 on 2.206 | | | `type` | Search type, [see values](#type). Defaults to most liked | | | `str` | Search query, user ID or level list depending on `type` | Only on types 5 and 10 | | `page` | Which page to request, defaults to 0 | | From ad922b03131c03c2cf6174e299519aacb306d1a9 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:15:09 +0300 Subject: [PATCH 060/389] Create uploadGJLevelList.md (WIP) TODO: include seed2 information --- docs/endpoints/lists/uploadGJLevelList.md | 94 +++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 docs/endpoints/lists/uploadGJLevelList.md diff --git a/docs/endpoints/lists/uploadGJLevelList.md b/docs/endpoints/lists/uploadGJLevelList.md new file mode 100644 index 000000000..70aacb608 --- /dev/null +++ b/docs/endpoints/lists/uploadGJLevelList.md @@ -0,0 +1,94 @@ +# uploadGJLevel21.php + +Uploads a created level to the servers. + +## Parameters + +### Required Parameters + +**gameVersion** - The game version. Currently 22 + +**accountID** - The uploader's account ID + +**gjp2** - The uploader's [GJP2](./topics/encryption/gjp.md) + +**listID** - The ID of the list if updating to a newer version, otherwise 0 + +**listName** - The name of the list, in plain text + +**listDesc** - The description of the list, in [URL-safe base64](./topics/encryption/base64.md) + +**listVersion** - The version number of the level + +**original** - The ID of the original list if the list was copied, otherwise 0 + +**difficulty** - The list's difficulty face. -1 is N/A, and then it's 0-10 where 0 is Auto and 10 is Extreme Demon + +**unlisted** - Set to 2 if the list should be unlisted, and to 1 if the list should be unlisted and only viewable by friends + +**listLevels** - All level IDs included in the list. Each ID is separated by `,` + +**seed** - A mandatory [chk value](./topics/encryption/chk.md) generated from the first 50 characters of the listLevels parameter, followed by the accountID. TODO!!! + +**seed2** - 5 randomly generated characters from \[A-Za-z0-9] + +**secret** - Wmfd2893gb7 + +### Optional Parameters + +**binaryVersion** - Currently 42 as of 2.206 + +## Response + +Returns the ID of the uploaded list, or `-1` if the request was rejected. + +## Example + + + +### **Python** + +```py +import requests +import random +from string import ascii_letters, digits # so we don't have to type [A-Za-z0-9] by hand + +possible_letters = ascii_letters + digits +seed = ("").join(random.choices(possible_letters, k=5)) + +data = { + "gameVersion": 22, + "accountID": 173831, # This is DevExit's account ID + "gjp": "*******", # This would be DevExit's password encoded with GJP encryption + "listLevels": "128,132,133,134,136", # These are the IDs of the levels in the list + "listID": 0, + "listName": "First Levels", # This is the list name + "listDesc": "QSB0ZXN0IGxpc3QgZm9yIHRoZSBHRCBEb2NzIQ==", # "A test list for the GD Docs!" + "listVersion": 0, + "original": 0, + "difficulty": 3, # This indicates a Hard difficulty face + "unlisted": 2, # This list is unlisted, but does exist! + "levelString": levelString, # The level string for the level described above + "seed": seed, + "seed2": '', # TODO, + "secret": "Wmfd2893gb7" +} + +headers = { + "User-Agent": "" +} + +url = "https://www.boomlings.com/database/uploadGJLevelList.php" + +req = requests.post(url=url, data=data, headers=headers) +print(req.text) +``` + + + +**Response** + +```plain +297650 +``` + From 0470d0f8e8bb2b61d87f63ed4d19a64d93cf0a71 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:15:41 +0300 Subject: [PATCH 061/389] Add uploadGJLevelList to sidebar --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index a0f378e0d..56e2ce30a 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -69,6 +69,7 @@ - [uploadGJLevel21](/endpoints/levels/uploadGJLevel21.md) **Lists** - [getGJLevelLists](/endpoints/lists/getGJLevelLists.md) + - [uploadGJLevelList](/endpoints/lists/uploadGJLevelList.md) **Comments** - [deleteGJAccComment20](/endpoints/comments/deleteGJAccComment20.md) - [deleteGJComment20](/endpoints/comments/deleteGJComment20.md) From 90e3567885bd4afb437d5a765488ae91e06540f8 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:16:44 +0300 Subject: [PATCH 062/389] Update versions in deleteGJLevelUser20.md --- docs/endpoints/levels/deleteGJLevelUser20.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/levels/deleteGJLevelUser20.md b/docs/endpoints/levels/deleteGJLevelUser20.md index ed1791316..640530d79 100644 --- a/docs/endpoints/levels/deleteGJLevelUser20.md +++ b/docs/endpoints/levels/deleteGJLevelUser20.md @@ -16,9 +16,9 @@ Deletes a level from the server. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 From 2caf330ea06e5f9aed7c90daf31058fcc75d0ccf Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:18:19 +0300 Subject: [PATCH 063/389] Create deleteGJLevelList --- docs/endpoints/lists/deleteGJLevelList | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 docs/endpoints/lists/deleteGJLevelList diff --git a/docs/endpoints/lists/deleteGJLevelList b/docs/endpoints/lists/deleteGJLevelList new file mode 100644 index 000000000..6c9a3b4a1 --- /dev/null +++ b/docs/endpoints/lists/deleteGJLevelList @@ -0,0 +1,58 @@ +# deleteGJLevelUser20.php + +Deletes a level from the server. + +## Parameters + +### Required Parameters + +**accountID** - The list author's account ID + +**udid** - The list author's UDID + +**uuid** - The list author's UUID + +**gjp2** - The level author's [GJP2](/topics/encryption/gjp.md) + +**listID** - The ID of the level being deleted + +**secret** - Wmfv2898gc9 + +### Optional Parameters + +**gameVersion** - 22 + +**binaryVersion** - 42 + +## Response + +Returns 1 if deleted, -1 if it failed or the list does not exist. + +## Example + + + +### **Python** + +```py +import requests + +# With this code, DevExit is deleting the list with ID 414808 + +data = { + "accountID": 173831, # DevExit's account ID + "gjp2": "********", # This would be DevExit's password encoded with GJP2 encryption + "levelID": 414808, + "secret": "Wmfv2898gc9" +} + +req = requests.post("http://boomlings.com/database/deleteGJLevelUser20.php", data=data) +print(req.text) +``` + +**Response** +```py +1 +``` + + From c24f40b9b6cd3b9b99be1e22dfb0a9e73fa146d9 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:18:29 +0300 Subject: [PATCH 064/389] Rename deleteGJLevelList to deleteGJLevelList.md --- docs/endpoints/lists/{deleteGJLevelList => deleteGJLevelList.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/endpoints/lists/{deleteGJLevelList => deleteGJLevelList.md} (100%) diff --git a/docs/endpoints/lists/deleteGJLevelList b/docs/endpoints/lists/deleteGJLevelList.md similarity index 100% rename from docs/endpoints/lists/deleteGJLevelList rename to docs/endpoints/lists/deleteGJLevelList.md From 7bf69b850e9044dc9207410256638fc9493016df Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:18:59 +0300 Subject: [PATCH 065/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 56e2ce30a..f7ad05d9c 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -68,6 +68,7 @@ - [updateGJDesc20](/endpoints/levels/updateGJDesc20.md) - [uploadGJLevel21](/endpoints/levels/uploadGJLevel21.md) **Lists** + - [deleteGJLevelList](/endpoints/lists/deleteGJLevelList.md) - [getGJLevelLists](/endpoints/lists/getGJLevelLists.md) - [uploadGJLevelList](/endpoints/lists/uploadGJLevelList.md) **Comments** From cd9d910ba6a1f66c10bdac17b0055834eb8c95cc Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:31:58 +0300 Subject: [PATCH 066/389] Added new vault codes --- docs/topics/vault_codes.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/topics/vault_codes.md b/docs/topics/vault_codes.md index 5375d8fc2..d0306ff24 100644 --- a/docs/topics/vault_codes.md +++ b/docs/topics/vault_codes.md @@ -1,6 +1,6 @@ # Vault Codes -In Geometry Dash 2.1 there are three different vaults you can access. The Vault, Vault of Secrets and the Chamber of Time. Each vault has a select number of passwords that you can enter to unlock icons and colors. +In Geometry Dash 2.2 there are three different vaults you can access. The Vault, Vault of Secrets and the Chamber of Time. Each vault has a select number of passwords that you can enter to unlock icons and colors. ## Vault Code Encryption @@ -23,6 +23,7 @@ Vault of Secrets and Chamber of time: [VaultCode] + ask2fpcaqCQ2 -> Xor with a k | The Vault | robotop | robot | The Vault | gandalfpotter | trail | The Vault | sparky | coin +| The Vault | finalboss | swing | Vault of Secrets | your star count | cube | Vault of Secrets | CodeBreaker | cube | you are given a sequence of numbers you have to subtract the numbers from each other and the code is all the numbers subtracted combined if the numbers were 1,2,4,8,16,32 then you would do 2-1, 4-2, 8-4, 16-8, 32-16 and the code would then be 124816 | Vault of Secrets | brainpower | cube @@ -31,8 +32,12 @@ Vault of Secrets and Chamber of time: [VaultCode] + ask2fpcaqCQ2 -> Xor with a k | Vault of Secrets | thechickenisonfire | colour2 | Vault of Secrets | gimmethecolor | color1 | Vault of Secrets | glubflub | coin +| Vault of Secrets | d4shg30me7ry | cube +| Vault of Secrets | thechickenisready | ship | Chamber Of Time | silence | cube | Chamber Of Time | hunger | cube | Chamber Of Time | darkness | cube | Chamber Of Time | volcano | wave | 'a volcano' also works | Chamber Of Time | river | color2 | 'a river' also works +| Chamber Of Time | backontrack | spider +| Chamber Of Time | givemehelper | robot From 7e1d010860896c25d820316fdfecf7329fc9c620 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:32:49 +0300 Subject: [PATCH 067/389] fix cod3breaker --- docs/topics/vault_codes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/vault_codes.md b/docs/topics/vault_codes.md index d0306ff24..e7971e9af 100644 --- a/docs/topics/vault_codes.md +++ b/docs/topics/vault_codes.md @@ -25,7 +25,7 @@ Vault of Secrets and Chamber of time: [VaultCode] + ask2fpcaqCQ2 -> Xor with a k | The Vault | sparky | coin | The Vault | finalboss | swing | Vault of Secrets | your star count | cube -| Vault of Secrets | CodeBreaker | cube | you are given a sequence of numbers you have to subtract the numbers from each other and the code is all the numbers subtracted combined if the numbers were 1,2,4,8,16,32 then you would do 2-1, 4-2, 8-4, 16-8, 32-16 and the code would then be 124816 +| Vault of Secrets | cod3breaker | cube | you are given a sequence of numbers you have to subtract the numbers from each other and the code is all the numbers subtracted combined if the numbers were 1,2,4,8,16,32 then you would do 2-1, 4-2, 8-4, 16-8, 32-16 and the code would then be 124816 | Vault of Secrets | brainpower | cube | Vault of Secrets | octocube | cube | Vault of Secrets | seven | cube From e91364131f54c298357cb2bb1be96a5807f90c6a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:35:17 +0300 Subject: [PATCH 068/389] local files clarification --- docs/topics/localfiles_encrypt_decrypt.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/topics/localfiles_encrypt_decrypt.md b/docs/topics/localfiles_encrypt_decrypt.md index b3c7a3223..75a1a5d18 100644 --- a/docs/topics/localfiles_encrypt_decrypt.md +++ b/docs/topics/localfiles_encrypt_decrypt.md @@ -97,6 +97,8 @@ def mac_decrypt(data: bytes) -> str: ## Encryption +Note that you don't actually need to reencrypt the save file in order for the game to accept it. + ### Windows Encryption is done pretty much the same way but with opposite operations and order. So the sequence for encrypting can be defined as: [gzip](https://zlib.net) compress/deflate -> [Base64](topics/encryption/base64) encode -> XOR using `0xb` (`11`) as a key. From 05896e8c269f13a0f194cb832feb196d22c90e9f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 01:48:07 +0300 Subject: [PATCH 069/389] Update tags.md --- docs/topics/tags.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 72d5550f5..7109c74a8 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -43,8 +43,8 @@ ## Notes -- Failing to add an end tag for Colour tags and Instant tags will result in the game crashing +- In 2.1, failing to add an end tag for Colour tags and Instant tags would result in the game crashing, but this was fixed in 2.2 - Only Colour tags are usable without modifying the client - via level descriptions and comment bans -- The tags are defined within the `MultilineBitmapFont` class and are sometimes disabled within the create method using a bool \ No newline at end of file +- The tags are defined within the `MultilineBitmapFont` class and are sometimes disabled within the create method using a bool From 6047cdd422446d78ddadd19a3f4df810ff417e58 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:22:58 +0300 Subject: [PATCH 070/389] Add info about upload list seed --- docs/topics/encryption/chk.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/topics/encryption/chk.md b/docs/topics/encryption/chk.md index d2184bcb2..d95d2d483 100644 --- a/docs/topics/encryption/chk.md +++ b/docs/topics/encryption/chk.md @@ -84,6 +84,12 @@ def generate_upload_seed(data: str, chars: int = 50) -> str: +## Upload list + +- seed + +Seed is generated by taking the listLevel and obtaining 50 characters the same way as for uploading a level, then appending your account ID to it, then taking a SHA-1 hash of that, then XOR encrypting with the randomly generated `seed2` value and Base64 URL-Safe encoding it. + ## Comment - Username From 6fb5b0ea8971f3db77c56c14f5aa8294299e6b3d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:23:24 +0300 Subject: [PATCH 071/389] Update chk.md --- docs/topics/encryption/chk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/encryption/chk.md b/docs/topics/encryption/chk.md index d95d2d483..dcc7510fd 100644 --- a/docs/topics/encryption/chk.md +++ b/docs/topics/encryption/chk.md @@ -88,7 +88,7 @@ def generate_upload_seed(data: str, chars: int = 50) -> str: - seed -Seed is generated by taking the listLevel and obtaining 50 characters the same way as for uploading a level, then appending your account ID to it, then taking a SHA-1 hash of that, then XOR encrypting with the randomly generated `seed2` value and Base64 URL-Safe encoding it. +Seed is generated by taking the listLevel and obtaining 50 characters the same way as for uploading a level (see above), then appending your account ID to it, then taking a SHA-1 hash of that, then XOR encrypting with the randomly generated `seed2` value and Base64 URL-Safe encoding it. ## Comment From bc41e210587b935223eec0aeff26db646955093e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:51:59 +0300 Subject: [PATCH 072/389] 2.2 start object properties --- .../level-components/inner-level-string.md | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/level-components/inner-level-string.md b/docs/resources/client/level-components/inner-level-string.md index 322e37837..3fb58efe6 100644 --- a/docs/resources/client/level-components/inner-level-string.md +++ b/docs/resources/client/level-components/inner-level-string.md @@ -26,13 +26,32 @@ The level start object is still an object and formated exactly like a normal [le | kA9 | Level/Start Pos Object | **bool** | determines whether this object represents a Level Start or a Start Pos object (true for the latter) | | kA10 | 2-Player Mode | **bool** | determines whether 2-Player Mode is toggled on for this level | | kA11 | Flip Gravity | **bool** | determines whether the player starts off in flipped Gravity | +| kA12 | Color3 Blending (UNUSED)| **bool** | Unused, apparently meant to determine whether color channel 3 is blending or not | | kA13 | Song Offset | **float** | the song offset in seconds from which the level begins | | kA14 | Guidelines | **[Guideline String](guideline-string.md)** | the editor song guidelines of the level | | kA15 | Fade In | **bool** | determines whether the song will fade in as soon as the level starts | | kA16 | Fade Out | **bool** | determines whether the song will fade in as soon as the level ends | | kA17 | Ground Line | **integer** | the ID of the ground line that is being used in the level | | kA18 | Font | **integer** | the ID of the font that is being used in the level | -| kA22 | Platformer Mode | **Bool** | If platformer Mode is toggled on or off (currently only available in the December 2019 2.2 leaks) | +| kA20 | Reverse Gameplay | **bool** | Whether gameplay is reversed at the start | +| kA22 | Platformer Mode | **Bool** | If the level is in Classic Mode (0) or Platformer Mode (1) | +| kA25 | Middleground Texture ID| **integer** | the ID of the middleground texture that is being used in the level
(enumerated in the same order as appears)| +| kA27 | Allow Multi-Rotation | **bool** | (Compatibility setting) Whether you can run multiple rotation actions on the same target group or not | +| kA28 | Mirror Mode | **bool** | Whether the screen is mirrored at the start | +| kA29 | Rotate Gameplay | **bool** | Whether gameplay is rotated at the start | +| kA31 | Enable Player Squeeze | **bool** | (Compatibility setting) Whether the player can be killed by being squeezed between 2 objects | +| kA32 | Fix Gravity Bug | **bool** | (Compatibility setting) Whether the bug where flipped gravity behaves differently from normal is fixed | +| kA33 | Fix Negative Scale | **bool** | (Compatibility setting) Whether negatively scaled objects have correct hitboxes (1) or not (0) | +| kA34 | Fix Robot Jump | **bool** | (Compatibility setting) Whether the robot can jump very high with a pad (0) or not (1) | +| kA36 | Spawn Group | **integer** | The group at which the player spawns | +| kA37 | Dynamic Level Height | **bool** | (Compatiblity setting) Whether the level ceiling is affected by higher objects | +| kA38 | Sort Groups | **bool** | (Compatibility setting) Whether groups are spawn triggered left to right or not | +| kA39 | Fix Radius Collision | **bool** | (Compatibility setting) Whether the player's hitbox has a circle for circular hazard collision or not | +| kA40 | Enable 2.2 Changes | **bool** | (Compatibility setting) Whether miscellaneous 2.2 changes are enabled or not | +| kA41 | Allow Static-Rotate | **bool** | (Compatibility setting) Whether static objects can be rotated or not | +| kA42 | Reverse Sync | **bool** | (Compatibility setting) Whether the player's speed is changed when reversing to preserve music sync | +| kA43 | No Time Penalty | **bool** | Whether you get a point penalty for time (0) or not (1) in platformer | +| kA45 | Decrease Boost Slide | **bool** | (Compatibility setting) Whether the player receives a lesser boost in Platformer when boosted by dash orb or moving platforms| | kS38 | Colors | **[Color String](color-string.md)** | the color channels that are being used in this level | | kS39 | Color Page | **integer** | the color page which was last displayed in the color channel display window | @@ -78,7 +97,7 @@ Keys `kS16`-`kS20` used to determine the player color that was being used and th | 2 | Player Color 2 | ### Start Pos Object -The Start Pos object has the same special properties the level start object has, with a few not working. `kA9` must be set to `1` in the case that the object is indeed a Start Pos. +The Start Pos object has the same special properties the level start object has, with a few not working and with a few exclusive ones, listed at the bottom. `kA9` must be set to `1` in the case that the object is indeed a Start Pos. Specifically, the only functional properties in a Start Pos object are the ones involving gameplay state, thus excluding visual-related ones (BG/ground textures, font, colors, etc.) @@ -86,6 +105,7 @@ Confirmed properties that do not work in the Start Pos: | Key | |:-----| +| kA5 | | kA6 | | kA7 | | kA10 | @@ -95,3 +115,12 @@ Confirmed properties that do not work in the Start Pos: | kA16 | | kA18 | | kS* | + +Since 2.2, the Start Pos object has its own unique properties that do not work in the Level Start object. This is a table of all of them: + +| Key | Name | Type | Description | +|:-----|:-----------------------|:--------------------------------------------|:---------------------------------------------------------------------------------------------------------------| +| kA19 | Target Order | **Integer** | The Target Order property of the Start Pos | +| kA21 | Disable | **bool** | Whether the Start Pos is disabled | +| kA26 | Target Order | **Integer** | The Target Channel property of the Start Pos | +| kA35 | Reset Camera | **bool** | Whether the camera is reset when playing from this Start Pos | From 2d03ad46814ccefe05f4cce5ae77208e26d1ccf6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:10:56 +0300 Subject: [PATCH 073/389] Update level-object.md --- .../client/level-components/level-object.md | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/resources/client/level-components/level-object.md b/docs/resources/client/level-components/level-object.md index e68ca8687..93ec650cc 100644 --- a/docs/resources/client/level-components/level-object.md +++ b/docs/resources/client/level-components/level-object.md @@ -44,6 +44,8 @@ Property keys reflect the keys found in the following table, whereas property va ### Level Object Data **Level Object Structure** +2.2 adds a ton of new object properties. Most of the object properties can be found [here](https://flowvix.github.io/gd-info-explorer/). You can access the old table of object properties (with all 2.1 properties and a few 2.2 properties) below if you need it for whatever reason. + | Key | Name/Value | Type | Description | |:----|:-------------------------------------|:------------------------------------------------|:-----------------------------------------------------------------------------------| | 1 | Object ID | **integer** | the ID of the object | @@ -55,7 +57,7 @@ Property keys reflect the keys found in the following table, whereas property va | 7 | Red | **integer** | the Red component of the color in a trigger | | 8 | Green | **integer** | the Green component of the color in a trigger | | 9 | Blue | **integer** | the Blue component of the color in a trigger | -| 10 | Duration | **float** | the duration of an effect in a trigger | +| 10 | Duration | **float** | the duration of an effect in a trigger. In the random trigger, this is the chance instead| | 11 | Touch Triggered | **bool** | the Touch Triggered property of a trigger | | 12 | Secret Coin ID | **integer** | the ID of a Secret Coin | | 13 | Special Object Checked | **bool** | the checked property of some special objects (gamemode, speed, dual portals, etc.) | @@ -133,16 +135,31 @@ Property keys reflect the keys found in the following table, whereas property va | 96 | Disable Glow | **bool** | the Disable Glow property of the object | | 97 | Custom Rotation Speed | **float** | the Custom Rotation Speed property of the rotating object in degrees per second | | 98 | Disable Rotation | **bool** | the Disable Rotation property of the rotating object | -| 99 | Multi Activate (Orbs) | **bool** | the Multi Activate property of Orbs | +| 99 | Multi Activate (Orbs) | **bool** | the Multi Activate property of Orbs | | 100 | Enable Use Target | **bool** | the Enable Use Target property of the Move trigger | | 101 | Target Pos Coordinates | **[Target Pos Coordinates](enumerations.md)** | the Target Pos Coordinates property of the Move trigger | | 102 | Editor Disable | **bool** | the Editor Disable property of the Spawn trigger | | 103 | High Detail | **bool** | the High Detail property of the object | -| 104 | Multi Activate (Triggers) | **bool** | The Multi Activate Property of Triggers | +| 104 | Multi Activate (Triggers) | **bool** | The Multi Activate Property of Triggers | | 105 | Max Speed | **float** | the Max Speed property of the Follow Player Y trigger | | 106 | Randomize Start | **bool** | the Randomize Start property of the animated object | | 107 | Animation Speed | **float** | the Animation Speed property of the animated object | | 108 | Linked Group ID | **integer** | the Linked Group ID property of the object | +| 110 | Exit Static | **bool** | the Exit Static property of the Static Camera trigger | +| 111 | Free Mode | **bool** | the Free Mode property of the Camera Mode trigger or portal | +| 112 | Edit Camera Settings | **bool** | the Edit Camera Settings property of the Camera Mode trigger or portal | +| 113 | Easing (Free Mode) | **integer** | the Easing property in a Camera Mode trigger or portal | +| 114 | Padding | **float** | the Paddding property in a Camera Mode trigger or portal | +| 115 | ord | **integer** | the Ord property of the object | +| 116 | No Effects | **bool** | Whether the object doesn't emit any special effects (e.g. portal flash) | +| 117 | Reverse | **bool** | Whether the orb/pad reverses your direction | +| 120 | Time Mod | **float** | The time modifier in the Time Warp trigger | +| 121 | No Touch | **bool** | Whether the object has no hitbox | +| 128 | Scale X | **float** | The X Scale of the object | +| 128 | Scale X | **float** | The X Scale of the object | +| 131 | Warp Y angle | **float** | The Y angle warp value of the object | +| 132 | Warp X angle | **float** | The X angle warp value of the object | + ***Undiscovered Existing Features*** @@ -152,6 +169,8 @@ The following features are discovered in current local save files, however their |:----|:------------|:---------------------------------------------------------------------------------------------------| | 36 | **bool** | suspected to be handling whether an object's X position is locked and unaffected by a Move trigger | | 74 | **bool**(?) | only found in the Follow Player Y trigger | +| 155 | **integer** | Suspected to be something related to optimizing colors. Appears on all objects | +| 156 | **integer** | Same as 155 | ***Potentially Discarded Features*** From b174071b0fefed717eb2170f13271e787f7eb75f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:18:37 +0300 Subject: [PATCH 074/389] Create enumerations.md --- .../client/level-components/enumerations.md | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 docs/resources/client/level-components/enumerations.md diff --git a/docs/resources/client/level-components/enumerations.md b/docs/resources/client/level-components/enumerations.md new file mode 100644 index 000000000..a18ce78d3 --- /dev/null +++ b/docs/resources/client/level-components/enumerations.md @@ -0,0 +1,26 @@ +# Enumerations (Enums) + +Here you will find the enumerations that are related to the level string. + +## Gamemode + +| Key | Name | +|:-----|:-------| +| 0 | Cube | +| 1 | Ship | +| 2 | Ball | +| 3 | UFO | +| 4 | Wave | +| 5 | Robot | +| 6 | Spider | +| 7 | Swing | + +## Speed + +| Key | Name | Actual Speed (in Units/s) | +|:-----|:-------|:--------------------------| +| 0 | 1x | 251.16 | +| 1 | 0.5x | 311.58 | +| 2 | 2x | 387.42 | +| 3 | 3x | 468.00 | +| 4 | 4x | 576.00 | From 6ef7bdfe9151651b52b3e777118b35208bada2b4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:24:46 +0300 Subject: [PATCH 075/389] Easing enum --- .../client/level-components/enumerations.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docs/resources/client/level-components/enumerations.md b/docs/resources/client/level-components/enumerations.md index a18ce78d3..3d21ce7da 100644 --- a/docs/resources/client/level-components/enumerations.md +++ b/docs/resources/client/level-components/enumerations.md @@ -24,3 +24,27 @@ Here you will find the enumerations that are related to the level string. | 2 | 2x | 387.42 | | 3 | 3x | 468.00 | | 4 | 4x | 576.00 | + +## Easing + +| Key | Name | +|:-----|:--------------------| +| 0 | None | +| 1 | Ease In Out | +| 2 | Ease In | +| 3 | Ease Out | +| 4 | Elastic In Out | +| 5 | Elastic In | +| 6 | Elastic Out | +| 7 | Bounce In Out | +| 8 | Bounce In | +| 9 | Bounce Out | +| 10 | Exponential In Out | +| 11 | Exponential In | +| 12 | Exponential Out | +| 13 | Sine In Out | +| 14 | Sine In | +| 15 | Sine Out | +| 16 | Back In Out | +| 17 | Back In | +| 18 | Back Out | From a69aab7087cebe4ddd283b752bb37ee12293fd3d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:25:09 +0300 Subject: [PATCH 076/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index f7ad05d9c..cef92b67b 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -35,6 +35,7 @@ - [Level](/resources/client/level.md) - [Capacity String](/resources/client/level-components/capacity-string.md) + - [Enumerations](/resources/client/level-components/enumerations.md) - [Level Colors](/resources/client/level-components/level-colors.md) - [Inner Level String](/resources/client/level-components/inner-level-string.md) - [Level Object](/resources/client/level-components/level-object.md) From 33a7bb58f6a38c2b865ecd0573f1a452bb8b227a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:28:48 +0300 Subject: [PATCH 077/389] 2.2 colors --- .../client/level-components/level-colors.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/resources/client/level-components/level-colors.md b/docs/resources/client/level-components/level-colors.md index 019e0e7d2..4d841fe2c 100644 --- a/docs/resources/client/level-components/level-colors.md +++ b/docs/resources/client/level-components/level-colors.md @@ -64,18 +64,19 @@ Here are all of the different color id's: | `1 - 999` | **Custom colors** | These are the colors that are avalible for the creator to use | | `1000` | **BG** | This is the color of the background | | `1001` | **G1** | This is the primary color of the ground | -| `1002` | **LINE** | This is the color of the ground line | +| `1002` | **Line** | This is the color of the ground line | | `1003` | **3DL** | This is the color of the 3D line objects | -| `1004` | **OBJ** | This is the OBJ color | +| `1004` | **Obj** | This is the OBJ color | | `1005` | **P1** | This is the static color channel refering to the primary color of the player's icon | | `1006` | **P2** | This is the static color channel refering to the secondary color of the player's icon | | `1007` | **LBG** | This is the static color channel that is a lighter version of `BG` | | `1009` | **G2** | This is the secondary color of the ground | -| `1010` | **BLACK** | This is the static color channel which is always `r: 0, g: 0, b: 0`. Used in saws that are black by default | +| `1010` | **Black** | This is the static color channel which is always `r: 0, g: 0, b: 0`. Used in saws that are black by default | +| `1011` | **White** | This is the static color channel which is always `r: 255, g: 255, b: 255`. | +| `1012` | **Lighter** | A lighter version of the primary color in objects. Used in the white small blocks found in `build tab 2 on page 6`. | +| `1013` | **MG** | This is the primary color of the middleground | +| `1014` | **MG2** | This is the secondary color of the middleground | -### Undiscovered color channel IDs -`WHITE`: Static color that is always `r: 255, g: 255, b: 255` -`LIGHTER`: A lighter version of the primary color in objects. Used in the white small blocks found in `build tab 2 on page 6`. ### 1.9 color channel ID's GD's 1.9 version used a different ID scheme to identify color channels. In 2.0+, these IDs are still present, but only used in the legacy `1.9 Color Channel ID` property of 1.9 objects. They are as follows: From 60d098c89d2bc98bb7300cf30831db36ae7a0c8d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:30:52 +0300 Subject: [PATCH 078/389] Add Pulse Mode --- docs/resources/client/level-components/enumerations.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/resources/client/level-components/enumerations.md b/docs/resources/client/level-components/enumerations.md index 3d21ce7da..6be204e92 100644 --- a/docs/resources/client/level-components/enumerations.md +++ b/docs/resources/client/level-components/enumerations.md @@ -48,3 +48,10 @@ Here you will find the enumerations that are related to the level string. | 16 | Back In Out | | 17 | Back In | | 18 | Back Out | + +## Pulse Mode + +| Key | Name | +|:-----|:-------| +| 0 | Color | +| 1 | HSV | From a3b11a4e5d80c1f75a4c0ee4a8ee218485d1da96 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:35:22 +0300 Subject: [PATCH 079/389] more 2.1 enums --- .../client/level-components/enumerations.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/resources/client/level-components/enumerations.md b/docs/resources/client/level-components/enumerations.md index 6be204e92..1471ad570 100644 --- a/docs/resources/client/level-components/enumerations.md +++ b/docs/resources/client/level-components/enumerations.md @@ -55,3 +55,28 @@ Here you will find the enumerations that are related to the level string. |:-----|:-------| | 0 | Color | | 1 | HSV | + +## Pulse Target Type + +| Key | Name | +|:-----|:---------| +| 0 | Channel | +| 1 | Group | + +## Touch Toggle Mode + +| Key | Name | +|:-----|:-----------| +| 0 | None | +| 1 | Toggle On | +| 2 | Toggle Off | + +## Instant Count Comparison + +| Key | Name | +|:-----|:-----------| +| 0 | Equals | +| 1 | Larger | +| 2 | Smaller | + + From 75c16a26863644ed26cd5b3feeee9cbfe035d7ec Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:40:37 +0300 Subject: [PATCH 080/389] Update uploadGJLevel21.md --- docs/endpoints/levels/uploadGJLevel21.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/levels/uploadGJLevel21.md b/docs/endpoints/levels/uploadGJLevel21.md index f9dba03ed..25cc8cf5b 100644 --- a/docs/endpoints/levels/uploadGJLevel21.md +++ b/docs/endpoints/levels/uploadGJLevel21.md @@ -10,7 +10,7 @@ Uploads a created level to the servers. **accountID** - The uploader's account ID -**gjp** - The uploader's [GJP](./topics/encryption/gjp.md) +**gjp2** - The uploader's [GJP2](./topics/encryption/gjp.md) **userName** - The uploader's username @@ -42,7 +42,7 @@ Uploads a created level to the servers. **requestedStars** - The requested star rating for the level. The number is not limited to 10 -**unlisted** - Set to 1 if the level should be unlisted and only viewable by friends +**unlisted** - Set to 2 if the level should be unlisted and to 1 if the level should be only viewable by friends **ldm** - Set to 1 if the level should have a low detail checkbox From 5142ce94cc434acb185945fe28d60880b6dc5cde Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:41:47 +0300 Subject: [PATCH 081/389] Update uploadGJMessage20.md --- docs/endpoints/socials/uploadGJMessage20.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/socials/uploadGJMessage20.md b/docs/endpoints/socials/uploadGJMessage20.md index eb1687936..03cb21b70 100644 --- a/docs/endpoints/socials/uploadGJMessage20.md +++ b/docs/endpoints/socials/uploadGJMessage20.md @@ -8,7 +8,7 @@ Sends a message to a user **accountID** - Account ID of the user sending the message -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user sending the message +**gjp2** - The [GJP2](/topics/encryption/gjp.md) of the user sending the message **toAccountID** - Account ID of the user retrieving the message @@ -20,9 +20,9 @@ Sends a message to a user ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -60,4 +60,4 @@ print(req.text) 1 ``` - \ No newline at end of file + From ae065ec345a28da0ce5e776d12a8dd54d6c56560 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:43:20 +0300 Subject: [PATCH 082/389] Update uploadGJComment21.md --- docs/endpoints/comments/uploadGJComment21.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/comments/uploadGJComment21.md b/docs/endpoints/comments/uploadGJComment21.md index 743f97572..956ea8058 100644 --- a/docs/endpoints/comments/uploadGJComment21.md +++ b/docs/endpoints/comments/uploadGJComment21.md @@ -8,7 +8,7 @@ Uploads a comment to a user level. **accountID** - The commenter's account ID -**gjp** - The commenter's [GJP](/topics/encryption/gjp.md) +**gjp** - The commenter's [GJP2](/topics/encryption/gjp.md) **userName** - The commenter's username @@ -16,7 +16,7 @@ Uploads a comment to a user level. **secret** - Wmfd2893gb7 -**levelID** - The ID of the level to comment on +**levelID** - The ID of the level to comment on. If commenting on a list, the ID should be negative **percent** - The level percentage shown on the comment @@ -24,9 +24,9 @@ Uploads a comment to a user level. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 From 2f8ab845446dcafd0b5b34489b0ce2f96b4ecfaa Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:43:30 +0300 Subject: [PATCH 083/389] Update uploadGJComment21.md --- docs/endpoints/comments/uploadGJComment21.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/comments/uploadGJComment21.md b/docs/endpoints/comments/uploadGJComment21.md index 956ea8058..f481976a8 100644 --- a/docs/endpoints/comments/uploadGJComment21.md +++ b/docs/endpoints/comments/uploadGJComment21.md @@ -8,7 +8,7 @@ Uploads a comment to a user level. **accountID** - The commenter's account ID -**gjp** - The commenter's [GJP2](/topics/encryption/gjp.md) +**gjp2** - The commenter's [GJP2](/topics/encryption/gjp.md) **userName** - The commenter's username From 012a32c6ef51481acd3f0e0ab54a9f79b7aebee0 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:46:37 +0300 Subject: [PATCH 084/389] Update uploadGJAccComment20.md --- docs/endpoints/comments/uploadGJAccComment20.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/comments/uploadGJAccComment20.md b/docs/endpoints/comments/uploadGJAccComment20.md index fd2e9e9a4..b9a5ec0b7 100644 --- a/docs/endpoints/comments/uploadGJAccComment20.md +++ b/docs/endpoints/comments/uploadGJAccComment20.md @@ -8,7 +8,7 @@ Posts an account comment **accountID** - Account ID of the user posting the comment -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user posting the comment +**gjp2** - The [GJP2](/topics/encryption/gjp.md) of the user posting the comment **comment** - The comment's text, converted to [URL-safe base64](/topics/encryption/base64). @@ -16,9 +16,9 @@ Posts an account comment ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 From ed3d758657a3b06f311b8120fb99a36fe38c343e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:47:54 +0300 Subject: [PATCH 085/389] Update uploadFriendRequest20.md --- docs/endpoints/socials/uploadFriendRequest20.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/endpoints/socials/uploadFriendRequest20.md b/docs/endpoints/socials/uploadFriendRequest20.md index 33c6ab44b..b4983e3a4 100644 --- a/docs/endpoints/socials/uploadFriendRequest20.md +++ b/docs/endpoints/socials/uploadFriendRequest20.md @@ -1,4 +1,4 @@ -# UploadFriendRequest +# uploadFriendRequest20 > This endpont is used to send a friend request to other players @@ -6,12 +6,12 @@ | Parameter | Explanation | Optional | | :-------------- | :----------------------------------------------------------------- | -------- | -| `gameVersion` | The Game Version the player is playing on | `True` | -| `binaryVersion` | The current build the player playing on | `True` | +| `gameVersion` | The Game Version the player is playing on. 22 for 2.2 | `True` | +| `binaryVersion` | The current build the player playing on. 42 for 2.206 | `True` | | `gdw` | If the player is using Geometry Dash World | `True` | | `accountID` | The player's account ID | `False` | | `toAccountID` | The account which the player is trying to send a friend request to | `False` | -| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `gjp2` | The player's [GJP2](/topics/encryption/gjp.md) | `False` | | `secret` | The common secret: `Wmfd2893gb7` | `False` | ## Response @@ -26,4 +26,4 @@ ```py -1 -``` \ No newline at end of file +``` From b3b4c3e1c0e90d5b63e622baa7ae5fe8a9cc5531 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:49:47 +0300 Subject: [PATCH 086/389] Update blockGJUser20.md --- docs/endpoints/socials/blockGJUser20.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/socials/blockGJUser20.md b/docs/endpoints/socials/blockGJUser20.md index 6ae93f424..53431fc8e 100644 --- a/docs/endpoints/socials/blockGJUser20.md +++ b/docs/endpoints/socials/blockGJUser20.md @@ -8,7 +8,7 @@ Blocks a user. **accountID** - The blocking person's account ID -**gjp** - The blocking person's [GJP](/topics/encryption/gjp.md) +**gjp2** - The blocking person's [GJP2](/topics/encryption/gjp.md) **targetAccountID** - The account ID of the person being blocked @@ -16,9 +16,9 @@ Blocks a user. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -53,4 +53,4 @@ print(req.text) 1 ``` - \ No newline at end of file + From d760de2a924bfa0a4d0481e3690435976653d4c4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:54:45 +0300 Subject: [PATCH 087/389] Update unblockGJUser20.md --- docs/endpoints/socials/unblockGJUser20.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/socials/unblockGJUser20.md b/docs/endpoints/socials/unblockGJUser20.md index b5b833647..f4cb8334e 100644 --- a/docs/endpoints/socials/unblockGJUser20.md +++ b/docs/endpoints/socials/unblockGJUser20.md @@ -8,7 +8,7 @@ Unblocks a user. **accountID** - The unblocking person's account ID -**gjp** - The unblocking person's [GJP](/topics/encryption/gjp.md) +**gjp2** - The unblocking person's [GJP2](/topics/encryption/gjp.md) **targetAccountID** - The account ID of the person getting unblocked @@ -16,9 +16,9 @@ Unblocks a user. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -54,4 +54,4 @@ print(req.text) 1 ``` - \ No newline at end of file + From 4f8d70b0982e301f6305dd8b35a094133aa2cf0a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:55:41 +0300 Subject: [PATCH 088/389] Update readGJFriendRequest20.md --- docs/endpoints/socials/readGJFriendRequest20.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/socials/readGJFriendRequest20.md b/docs/endpoints/socials/readGJFriendRequest20.md index c168f9a42..fd3aa437f 100644 --- a/docs/endpoints/socials/readGJFriendRequest20.md +++ b/docs/endpoints/socials/readGJFriendRequest20.md @@ -6,11 +6,11 @@ | Parameter | Explanation | Optional | | :-------------- | :--------------------------------------------------------- | -------- | -| `gameVersion` | The Game Version the player is playing on | `True` | -| `binaryVersion` | The current build the player playing on | `True` | +| `gameVersion` | The Game Version the player is playing on. 22 for 2.2 | `True` | +| `binaryVersion` | The current build the player is playing on. 42 for 2.206 | `True` | | `gdw` | If the player is using Geometry Dash World | `True` | | `accountID` | The player's account ID | `False` | -| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `gjp2` | The player's [GJP2](/topics/encryption/gjp.md) | `False` | | `requestID` | The ID for the friend request recieved | `False` | | `secret` | The common secret: `Wmfd2893gb7` | `False` | @@ -26,4 +26,4 @@ ```py -1 -``` \ No newline at end of file +``` From f19eb5c67a8bc21790b4dd770797fd6c35c50942 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:57:26 +0300 Subject: [PATCH 089/389] Update getGJUserList20.md --- docs/endpoints/socials/getGJUserList20.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/endpoints/socials/getGJUserList20.md b/docs/endpoints/socials/getGJUserList20.md index 25744e97b..fd07f5208 100644 --- a/docs/endpoints/socials/getGJUserList20.md +++ b/docs/endpoints/socials/getGJUserList20.md @@ -8,15 +8,15 @@ Gets either your friend list or your blocked list **accountID** - The account ID of the user you want to get the friends/blocklist of -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user you want to get the friends/blocklist of +**gjp2** - The [GJP2](/topics/encryption/gjp.md) of the user you want to get the friends/blocklist of **secret** - Wmfd2893gb7 ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -37,7 +37,7 @@ import requests data = { "accountID": 173831, # DevExit's account ID - "gjp": "********", # This would be DevExit's password encoded with GJP encryption + "gjp2": "********", # This would be DevExit's password encoded with GJP2 encryption "secret": "Wmfd2893gb7" } @@ -50,4 +50,4 @@ print(req.text) 1:absolllute:2:18411307:9:11:10:15:11:15:14:0:15:2:16:5391343:18:2:41:|1:AdriRoPi:2:9502327:9:127:10:17:11:29:14:0:15:2:16:1636042:18:0:41:|1:AmorAltra:2:7006921:9:12:10:11:11:4:14:0:15:2:16:1046810:18:0:41:|1:anisk:2:3996991:9:10:10:18:11:37:14:5:15:0:16:90613:18:1:41:|1:AUG0D:2:14975931:9:51:10:33:11:12:14:1:15:0:16:6278067:18:1:41:|1:augii:2:19983031:9:30:10:18:11:11:14:0:15:2:16:5782085:18:0:41:|1:Auradium:2:127356083:9:35:10:1:11:3:14:0:15:2:16:13337396:18:0:41:|1:biapuffy:2:89994953:9:21:10:8:11:40:14:0:15:2:16:12042014:18:0:41:|1:BitZaruU:2:3648180:9:1:10:0:11:3:14:5:15:0:16:2750303:18:0:41:|1:BramYT:2:5806701:9:43:10:21:11:0:14:0:15:2:16:450273:18:0:41:|1:BugBoy:2:6655666:9:15:10:18:11:10:14:6:15:0:16:932726:18:1:41:|1:ChatNoir5:2:17160067:9:22:10:15:11:1:14:1:15:0:16:5769039:18:0:41:|1:ChiChirik:2:2946652:9:46:10:3:11:7:14:0:15:2:16:44549:18:0:41:|1:Cinny:2:99010452:9:23:10:12:11:12:14:1:15:2:16:10605101:18:0:41:|1:colebowl:2:3303760:9:1:10:0:11:3:14:0:15:0:16:22704:18:1:41:|1:COLON:2:4136576:9:60:10:18:11:10:14:0:15:2:16:106255:18:0:41:|1:CR Creebay :2:4136203:9:97:10:12:11:3:14:0:15:2:16:187918:18:1:41:|1:Creator cd:2:4208553:9:35:10:15:11:12:14:0:15:0:16:1827120:18:1:41:|1:CreatorForce:2:11798163:9:37:10:4:11:16:14:0:15:2:16:2563970:18:0:41:|1:CreatorPig:2:6309884:9:8:10:22:11:34:14:6:15:2:16:931102:18:0:41:|1:DarkEmper0r:2:667356:9:20:10:12:11:12:14:3:15:0:16:2661:18:1:41:|1:deadk3v:2:44065476:9:38:10:17:11:3:14:1:15:2:16:7249929:18:0:41:|1:denisukrrus:2:111481197:9:28:10:18:11:12:14:1:15:0:16:11283964:18:0:41:|1:Dragonfire178:2:3788247:9:15:10:15:11:11:14:1:15:2:16:1279201:18:0:41:|1:DrallumGC:2:4494564:9:10:10:22:11:9:14:6:15:2:16:295655:18:0:41:|1:Dyad:2:80155356:9:111:10:3:11:0:14:0:15:0:16:8777883:18:1:41:|1:EliteSG:2:20959785:9:96:10:17:11:12:14:0:15:2:16:6261100:18:0:41:|1:endevvor:2:87464728:9:120:10:4:11:21:14:0:15:0:16:9631328:18:0:41:|1:ErenGD:2:43587008:9:11:10:8:11:40:14:1:15:2:16:7235260:18:1:41:|1:foundmyball:2:15976456:9:24:10:11:11:16:14:5:15:2:16:5056324:18:0:41:|1:Fus1oN:2:18900874:9:98:10:0:11:3:14:0:15:0:16:5508218:18:0:41:|1:GatoFresa:2:6323741:9:1:10:7:11:8:14:6:15:0:16:1245627:18:1:41:|1:GDDD:2:5548469:9:119:10:40:11:41:14:0:15:2:16:4958525:18:0:41:|1:GeDeXy:2:4755134:9:30:10:12:11:5:14:0:15:0:16:3420678:18:0:41:|1:ggeoo:2:118630583:9:102:10:7:11:3:14:0:15:0:16:11725961:18:1:41:|1:Gorshh:2:7628148:9:9:10:25:11:3:14:5:15:2:16:1803304:18:0:41:|1:Griffin28:2:13924338:9:30:10:18:11:3:14:4:15:0:16:3911716:18:1:41:|1:Hackram:2:3314056:9:5:10:18:11:25:14:5:15:0:16:359647:18:0:41:|1:hdmeltdown:2:16436096:9:13:10:18:11:3:14:5:15:2:16:5082253:18:0:41:|1:hola1234:2:17945025:9:1:10:1:11:3:14:0:15:0:16:5320224:18:2:41:|1:Hunnidew:2:3504822:9:60:10:17:11:12:14:0:15:2:16:122675:18:1:41:|1:ICN:2:30727064:9:18:10:37:11:12:14:2:15:2:16:6370227:18:0:41:|1:iIAdezioIi:2:5544596:9:1:10:0:11:3:14:0:15:0:16:354077:18:0:41:|1:IiILevelsIiI:2:11893766:9:21:10:11:11:3:14:2:15:2:16:2690209:18:0:41:|1:IiISwiftIiI:2:4240755:9:15:10:39:11:22:14:6:15:0:16:372921:18:0:41:|1:ItsJustAnotherP:2:21306452:9:98:10:29:11:2:14:0:15:2:16:6088967:18:0:41:|1:ItsNutty:2:29688055:9:21:10:17:11:3:14:5:15:2:16:6314603:18:0:41:|1:JapanChinaHax:2:37589794:9:1:10:0:11:3:14:0:15:0:16:6775461:18:1:41:|1:JaxmanDaBoss:2:11517233:9:25:10:15:11:2:14:1:15:2:16:2879159:18:1:41:|1:jmsaints12:2:4986011:9:17:10:13:11:11:14:1:15:2:16:818108:18:1:41:|1:Juanger YT:2:14711732:9:128:10:0:11:1:14:0:15:0:16:4282353:18:0:41:|1:KittyKit:2:38493936:9:98:10:14:11:12:14:0:15:0:16:6906586:18:1:41:|1:KrazyGFX:2:12182416:9:2:10:12:11:15:14:6:15:0:16:2971696:18:0:41:|1:Krysolite:2:42833795:9:4:10:40:11:37:14:5:15:2:16:7400547:18:0:41:|1:LegeNdiuM:2:3820413:9:128:10:36:11:41:14:0:15:2:16:5013339:18:0:41:|1:Luckyyy:2:11809502:9:3:10:12:11:12:14:4:15:2:16:2674059:18:0:41:|1:mbed:2:7381956:9:110:10:3:11:12:14:0:15:2:16:1403996:18:0:41:|1:moisescrack20:2:5881933:9:16:10:0:11:3:14:0:15:0:16:2707555:18:1:41:|1:mrcreeperington:2:6084355:9:119:10:37:11:40:14:0:15:2:16:603371:18:0:41:|1:Mzt3rz:2:3381641:9:38:10:17:11:12:14:2:15:0:16:610833:18:0:41:|1:N3LY:2:52850644:9:18:10:10:11:3:14:3:15:2:16:11857536:18:0:41:|1:NeKitDS:2:17876467:9:133:10:6:11:3:14:0:15:2:16:5509312:18:0:41:|1:Nighthawk8:2:5332789:9:25:10:10:11:26:14:0:15:0:16:1683204:18:1:41:|1:NioHcreator:2:78104709:9:1:10:18:11:12:14:2:15:2:16:9379353:18:0:41:|1:Nyvanish:2:9274883:9:8:10:1:11:12:14:6:15:2:16:1422516:18:1:41:|1:PasswordFinders:2:17787971:9:63:10:0:11:3:14:0:15:0:16:5317656:18:2:41:|1:pbbbfe:2:13870008:9:129:10:18:11:3:14:0:15:0:16:3794318:18:1:41:|1:Plaxen:2:8649263:9:1:10:0:11:3:14:0:15:0:16:1243033:18:0:41:|1:PlexyGlass:2:98636479:9:133:10:4:11:12:14:0:15:2:16:10561660:18:1:41:|1:Pokima:2:122214721:9:33:10:12:11:41:14:1:15:0:16:12043291:18:0:41:|1:poopybobby:2:14711367:9:18:10:12:11:5:14:3:15:0:16:4884369:18:0:41:|1:PowerGW:2:9920667:9:92:10:21:11:15:14:0:15:2:16:1558318:18:0:41:|1:rexzyy:2:37023496:9:10:10:15:11:11:14:2:15:0:16:6744103:18:0:41:|1:RiGtZ:2:11392286:9:50:10:40:11:3:14:0:15:0:16:2721325:18:0:41:|1:Rippin17:2:7969254:9:47:10:0:11:3:14:0:15:0:16:1114978:18:0:41:|1:ShadowFlare:2:10175886:9:98:10:18:11:12:14:0:15:0:16:1634186:18:0:41:|1:skullforever:2:5471285:9:1:10:2:11:3:14:0:15:0:16:383010:18:1:41:|1:SniDer:2:15142239:9:9:10:12:11:21:14:6:15:0:16:5097653:18:0:41:|1:SpuffyGD:2:5224502:9:32:10:15:11:1:14:0:15:0:16:1562647:18:0:41:|1:Steven0604:2:13104437:9:28:10:9:11:12:14:0:15:0:16:121568:18:0:41:|1:Thaizik:2:5250445:9:126:10:17:11:14:14:0:15:2:16:1667608:18:0:41:|1:Thatdograscal:2:5785477:9:3:10:15:11:5:14:6:15:0:16:438738:18:0:41:|1:thedash8282:2:50843361:9:36:10:41:11:12:14:0:15:2:16:7761927:18:0:41:|1:TheManMadeGoril:2:8697851:9:1:10:0:11:3:14:0:15:0:16:1288840:18:0:41:|1:TheRealRoman:2:13141389:9:1:10:0:11:3:14:0:15:0:16:3459603:18:1:41:|1:TheRealZero:2:5446355:9:47:10:25:11:25:14:0:15:2:16:324047:18:0:41:|1:TheS1:2:1813006:9:22:10:20:11:12:14:0:15:0:16:2426734:18:0:41:|1:ThroShade:2:6918339:9:37:10:18:11:12:14:0:15:2:16:988999:18:0:41:|1:Toxjc47:2:7628745:9:29:10:12:11:25:14:0:15:0:16:1054055:18:0:41:|1:TritheDoge:2:85831492:9:11:10:20:11:38:14:3:15:0:16:9399037:18:1:41:|1:TrueW33D:2:3354630:9:107:10:15:11:12:14:0:15:2:16:1029:18:0:41:|1:TurboDashGD:2:11262496:9:22:10:15:11:15:14:1:15:2:16:3319009:18:1:41:|1:TwilightLink:2:13979575:9:1:10:0:11:3:14:0:15:0:16:4739798:18:0:41:|1:ViuteX :2:20423414:9:18:10:3:11:13:14:0:15:0:16:5891721:18:1:41:|1:WhiteRecycling:2:10200743:9:84:10:12:11:12:14:0:15:0:16:1623259:18:0:41:|1:WitFaithGaming:2:7250600:9:5:10:25:11:3:14:5:15:2:16:1153639:18:0:41:|1:xxeriickgdxx:2:18833528:9:21:10:1:11:3:14:4:15:0:16:5496439:18:0:41:|1:XxmishiroxX:2:4885470:9:11:10:12:11:0:14:0:15:2:16:513390:18:0:41:|1:XxsaulxX902:2:10842216:9:6:10:0:11:12:14:5:15:2:16:2138304:18:1:41:|1:YannickBakFiets:2:9786350:9:17:10:7:11:11:14:1:15:0:16:1536281:18:0:41:|1:Zadik:2:6082346:9:4:10:0:11:3:14:0:15:0:16:807053:18:0:41:|1:Zod1ac:2:5259869:9:35:10:6:11:3:14:2:15:2:16:2499318:18:0:41: ``` - \ No newline at end of file + From 06645922bdfb60f4ddbc1c109df1d36afc808436 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:57:59 +0300 Subject: [PATCH 090/389] Update getGJMessages20.md --- docs/endpoints/socials/getGJMessages20.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/endpoints/socials/getGJMessages20.md b/docs/endpoints/socials/getGJMessages20.md index ce1ca24f1..9670be9be 100644 --- a/docs/endpoints/socials/getGJMessages20.md +++ b/docs/endpoints/socials/getGJMessages20.md @@ -8,15 +8,15 @@ Gets a user's DMs. **accountID** - The user's account ID -**gjp** - The user's [GJP](/topics/encryption/gjp.md) +**gjp2** - The user's [GJP2](/topics/encryption/gjp.md) **secret** - Wmfd2893gb7 ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -43,7 +43,7 @@ import requests data = { "accountID": 173831, # DevExit's account ID - "gjp": "********", # This would be DevExit's password encoded with GJP encryption + "gjp2": "********", # This would be DevExit's password encoded with GJP2 encryption "secret": "Wmfd2893gb7" } @@ -56,4 +56,4 @@ print(req.text) 6:PasswordFinders:3:17787971:2:5317656:1:52029708:4:Z2FnZw==:8:1:9:0:7:8 minutes|6:denisukrrus:3:111481197:2:11283964:1:50272016:4:UmU6IHdoeQ==:8:1:9:0:7:1 month|6:denisukrrus:3:111481197:2:11283964:1:50246431:4:UmU6IHdoeQ==:8:1:9:0:7:2 months|6:denisukrrus:3:111481197:2:11283964:1:50164382:4:d2h5:8:1:9:0:7:2 months|6:denisukrrus:3:111481197:2:11283964:1:50080479:4:UmU6IGhlcmUgc29tZSB0ZXh0:8:1:9:0:7:2 months|6:denisukrrus:3:111481197:2:11283964:1:49776472:4:aGVyZSBzb21lIHRleHQ=:8:1:9:0:7:2 months|6:denisukrrus:3:111481197:2:11283964:1:49374506:4:c29tZSB0ZXh0:8:1:9:0:7:3 months|6:GDBotAI:3:118270198:2:11676872:1:48319722:4:UmU6IHRlc3Q=:8:1:9:0:7:4 months|6:GDBotAI:3:118270198:2:11676872:1:48319704:4:UmU6IHc=:8:1:9:0:7:4 months|6:GDBotAI:3:118270198:2:11676872:1:48319544:4:UmU6IGRqZGpqZWpldWR1cg==:8:1:9:0:7:4 months|6:poopybobby:3:14711367:2:4884369:1:47666534:4:bG1hbw==:8:1:9:0:7:6 months|6:poopybobby:3:14711367:2:4884369:1:40030444:4:UmU6IFBsZWFzZSBJIGFtIGJpZyBmYW4=:8:1:9:0:7:1 year|6:mbed:3:7381956:2:1403996:1:37193331:4:ZWF0IG1l:8:1:9:0:7:1 year|6:Thatdograscal:3:5785477:2:438738:1:36479601:4:ZQ==:8:1:9:0:7:2 years|6:Destrom:3:53436248:2:7943837:1:33937410:4:SGV5:8:1:9:0:7:2 years|6:Jmoney2638:3:43797799:2:7170197:1:33310194:4:VHJhZGU=:8:1:9:0:7:2 years|6:xxgaruxx:3:42742570:2:7101156:1:31781647:4:aGVsbG8=:8:1:9:0:7:2 years|6:Thekilou13:3:4123328:2:2261538:1:31729107:4:UmU6IEkgbmVlZCBoZWxwLg==:8:1:9:0:7:2 years|6:Thekilou13:3:4123328:2:2261538:1:31718964:4:SSBuZWVkIGhlbHAu:8:1:9:0:7:2 years|6:SpuffyGD:3:5224502:2:1562647:1:31667629:4:cmVzcG9uZA==:8:1:9:0:7:2 years|6:ItsAdvyStlyes:3:13149198:2:3432452:1:31241029:4:SGV5:8:1:9:0:7:2 years|6:kittenspit:3:8254313:2:5249664:1:30287396:4:UmU6IGJhbm5lZCA=:8:1:9:0:7:2 years|6:Krysolite:3:42833795:2:7400547:1:28621608:4:SG9sYS4uLi4uLi4gPSk=:8:1:9:0:7:2 years|6:deadk3v:3:44065476:2:7249929:1:28599619:4:bXkgZnJpZW5k:8:1:9:0:7:2 years|6:BramYT:3:5806701:2:450273:1:27957196:4:TmVjcm9wb2xpWA==:8:1:9:0:7:2 years|6:WhiteRecycling:3:10200743:2:1623259:1:26307526:4:UmU6IExvdyBEZXRhaWwgTW9kZSBHbGl0Y2g_:8:1:9:0:7:3 years|6:AnonIIExt:3:1869127:2:885411:1:25162374:4:UmU6IEknbSBjb25mdXNlZC4uLg==:8:1:9:0:7:3 years|6:Rahmun1122:3:42600801:2:7164807:1:25010114:4:b21mZw==:8:1:9:0:7:3 years|6:Rahmun1122:3:42600801:2:7164807:1:25000287:4:UmU6IExpa2UgQm90:8:1:9:0:7:3 years|6:Rahmun1122:3:42600801:2:7164807:1:25000254:4:UmU6IExpa2UgQm90:8:1:9:0:7:3 years|6:TruKaveKiller:3:11066105:2:2152020:1:23254724:4:UmU6IEhlIGRpZG4ndCBoYWNr:8:1:9:0:7:3 years|6:CreatorBluey:3:6235047:2:3611307:1:21180833:4:UmU6IHd1dA==:8:1:9:0:7:3 years|6:CreatorBluey:3:6235047:2:3611307:1:21144322:4:UmU6IHd1dA==:8:1:9:0:7:3 years|6:GB RubRub Lover:3:2422340:2:2320:1:19707464:4:VGhlIGxldmVsIFVkZSBtYWRl:8:1:9:0:7:3 years|6:Infernos666:3:19144134:2:5570820:1:19035973:4:ag==:8:1:9:0:7:3 years|6:gravefruit:3:20099347:2:5827112:1:18622677:4:UmU6IEZ1Y2tpbmcgSGFja2Vy:8:1:9:0:7:3 years|6:mannewil:3:7866980:2:1088921:1:18433123:4:Z2F5:8:1:9:0:7:3 years|6:ICN:3:30727064:2:6370227:1:17198774:4:aGk=:8:1:9:0:7:3 years|6:NytromityGames:3:18307996:2:5742004:1:16667453:4:UmU6IEZpbm5nZXJiYW5nIGJldGE=:8:1:9:0:7:3 years|6:Acidscarecrow:3:18696064:2:5463621:1:16473096:4:UmU6IGhhY2tlcg==:8:1:9:0:7:3 years|6:NytromityGames:3:18307996:2:5742004:1:16159044:4:UmU6IEZpbm5nZXJiYW5nIGJldGE=:8:1:9:0:7:3 years|6:Acidscarecrow:3:18696064:2:5463621:1:16033619:4:aGFja2Vy:8:1:9:0:7:3 years|6:anisk:3:3996991:2:90613:1:15924087:4:UmU6IFdoeS4uLg==:8:1:9:0:7:3 years|6:TadokiariGD:3:12275930:2:2953169:1:14435552:4:UmU6IEdyYWNpYXM=:8:1:9:0:7:3 years|6:GThom:3:18259928:2:5961642:1:14277244:4:UmU6IERvbid0:8:1:9:0:7:3 years|6:TadokiariGD:3:12275930:2:2953169:1:13447638:4:QW1pZ29z:8:1:9:0:7:3 years|6:TadokiariGD:3:12275930:2:2953169:1:13233338:4:bWllcmRhIGRlIG5pdmVs:8:1:9:0:7:3 years|6:kittenspit:3:8254313:2:5249664:1:13228700:4:cm9idHJvbGwuLi4=:8:1:9:0:7:3 years|6:kittenspit:3:8254313:2:5249664:1:13203838:4:YmFubmVkIA==:8:1:9:0:7:3 years|6:StarFeGD:3:9790502:2:1537139:1:13105832:4:Yg==:8:1:9:0:7:3 years#74:0:50 ``` - \ No newline at end of file + From a637da8cac7f56ef31fdb6409f11a300c4bef473 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:58:33 +0300 Subject: [PATCH 091/389] Update getGJFriendRequests20.md --- docs/endpoints/socials/getGJFriendRequests20.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/socials/getGJFriendRequests20.md b/docs/endpoints/socials/getGJFriendRequests20.md index 706617a9d..5a2e12c76 100644 --- a/docs/endpoints/socials/getGJFriendRequests20.md +++ b/docs/endpoints/socials/getGJFriendRequests20.md @@ -6,14 +6,14 @@ | Parameter | Explanation | Optional | | :-------------- | :--------------------------------------------------------- | -------- | -| `gameVersion` | The Game Version the player is playing on | `True` | -| `binaryVersion` | The current build the player playing on | `True` | +| `gameVersion` | The Game Version the player is playing on. 22 for 2.2 | `True` | +| `binaryVersion` | The current build the player playing on. 42 for 2.206 | `True` | | `gdw` | If the player is using Geometry Dash World | `True` | | `page` | The page currently being viewed | `True` | | `total` | The total friend requests recieved | `True` | | `getSent` | If the server should fetch requests sent by the player | `True` | | `accountID` | The player's account ID | `False` | -| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `gjp2` | The player's [GJP2](/topics/encryption/gjp.md) | `False` | | `secret` | The common secret: `Wmfd2893gb7` | `False` | ## Response From af48f9d7cfcf016861780ee230d219eac6d416b8 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:58:49 +0300 Subject: [PATCH 092/389] Update downloadGJMessage20.md --- docs/endpoints/socials/downloadGJMessage20.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/socials/downloadGJMessage20.md b/docs/endpoints/socials/downloadGJMessage20.md index c90b35b31..4838b3c30 100644 --- a/docs/endpoints/socials/downloadGJMessage20.md +++ b/docs/endpoints/socials/downloadGJMessage20.md @@ -8,7 +8,7 @@ Download a message. **accountID** - The person's account ID -**gjp** - The blocking person's [GJP](/topics/encryption/gjp.md) +**gjp2** - The person's [GJP2](/topics/encryption/gjp.md) **messageID** - The ID of the message to read @@ -16,9 +16,9 @@ Download a message. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 From 977055b8e4f2562bc6f89932e5e135b53af13f5c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:02:27 +0300 Subject: [PATCH 093/389] Update comment.md --- docs/resources/server/comment.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/server/comment.md b/docs/resources/server/comment.md index 05d7801e3..f103144f5 100644 --- a/docs/resources/server/comment.md +++ b/docs/resources/server/comment.md @@ -40,7 +40,7 @@ A list of all known keys can be found in the table below | Key | Name/Value | Type | Description |-----|---------------------------|----------------------------------------------|-------------------------------------------------------------------------- -| 1 | levelID | **Integer** | The levelID linked to the comment +| 1 | levelID | **Integer** | The levelID linked to the comment. This ID is negative if the comment is on a list | 2 | comment | **String** | The comment left by the user, encoded in [base64](/topics/encryption/base64.md) | 3 | authorPlayerID | **Integer** | The player ID of the comment author | | 4 | likes | **Integer** | The amount of likes the comment has @@ -49,7 +49,7 @@ A list of all known keys can be found in the table below | 7 | spam | **Bool** | If a comment has been flagged as spam | 8 | authorAccountID | **Integer** | The accountID of the comment author | | 9 | age | **String** | How long ago the comment was posted (e.g. "2 months") -| 10 | percent* | **Integer** | The percent the player put in their comment +| 10 | percent* | **Integer** | The percent the player put in their comment. Also doesn't apply to List Comments | 11 | modBadge* | **Integer** | The Mod Badge of a moderator commenting | 12 | moderatorChatColor* | **String** | Comma separated list of the RGB values of the moderator's chat color - only appears if the players `modBadge > 0` From 37fa612c38cc94ae4c2ebf91e657632594bcbdd6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:03:25 +0300 Subject: [PATCH 094/389] Update gauntlet.md --- docs/resources/server/gauntlet.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index 240af11d6..55486ae89 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -31,7 +31,7 @@ A list of all known keys can be found in the table below Here is a table which shows which `gauntletID` corresponds to a specific gauntlet -Note: Bolded gauntlet names are the ones that are added in-game +Note: Bolded gauntlet names are the ones that are added in-game, and the rest are yet to be added | ID ⠀| Name | |:---|:-----| @@ -69,12 +69,12 @@ Note: Bolded gauntlet names are the ones that are added in-game | 32| Gem| | 33| Inferno| | 34| **Portal**| - | 35| Strange| - | 36| Fantasy| + | 35| **Strange**| + | 36| **Fantasy**| | 37| Christmas| | 38| Surprise| - | 39| Mystery| - | 40| Cursed| + | 39| **Mystery**| + | 40| **Cursed**| | 41| Cyborg| | 42| **Castle**| | 43| Grave| From 99f99e0432c0ebbd40617ff7e72ff43e4b5c1685 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:04:27 +0300 Subject: [PATCH 095/389] Update gauntlet.md --- docs/resources/server/gauntlet.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index 55486ae89..ffc0fabad 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -46,7 +46,8 @@ Note: Bolded gauntlet names are the ones that are added in-game, and the rest ar | 9| **Time**| | 10| **Crystal**| | 11| **Magic**| - | 12| **spike**| + + | 12| **Spike**| | 13| **Monster**| | 14| **Doom**| | 15| **Death**| @@ -87,3 +88,4 @@ Note: Bolded gauntlet names are the ones that are added in-game, and the rest ar ### Trivia - Gauntlets use the same response parser as [MapPacks](/resources/server/mappack) but they do not share the full range of features mappacks have +- The **Spike Gauntlet** used to be improperly capitalized in 2.1 as `spike` gauntlet From 1904159c4880ca6fbff860094284093efaa6374c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:04:49 +0300 Subject: [PATCH 096/389] Update gauntlet.md --- docs/resources/server/gauntlet.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index ffc0fabad..cab0924ff 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -46,7 +46,6 @@ Note: Bolded gauntlet names are the ones that are added in-game, and the rest ar | 9| **Time**| | 10| **Crystal**| | 11| **Magic**| - | 12| **Spike**| | 13| **Monster**| | 14| **Doom**| From 9792772d915e38081278b636735f8aa7ddfed80e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:05:15 +0300 Subject: [PATCH 097/389] god i suck at this --- docs/resources/server/gauntlet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index cab0924ff..55a3dd703 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -4,7 +4,7 @@ Gauntlets are a collection of themed levels created by the users of Geometry Dash which were hand-picked by RobTop. - - As of Geometry Dash 2.205, there are `23 gauntlets` + - As of Geometry Dash 2.206, there are `27 gauntlets` - **A list of the Gauntlet Names can be found [here](/resources/server/gauntlet?id=gauntlet-names)**
*Keep in mind that these are subject to change* A typical gauntlet server response is structured with a `key:value:key:value` pairing and is then split with a `|` From 85a0a791bc4d63fa72075f777882b98276370051 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:06:20 +0300 Subject: [PATCH 098/389] Update guideline-string.md --- .../client/level-components/guideline-string.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/resources/client/level-components/guideline-string.md b/docs/resources/client/level-components/guideline-string.md index 99821541c..da3bcbae4 100644 --- a/docs/resources/client/level-components/guideline-string.md +++ b/docs/resources/client/level-components/guideline-string.md @@ -9,11 +9,11 @@ The guideline string is the linearized string format of the guidelines of a leve E.g.: -`0.5~0.8~0.7~0.9~1~1` represents the following guidelines: +`0.5~0~0.7~0.9~1~1` represents the following guidelines: -- Guideline (`0.5~0.8`) +- Guideline (`0.5~0`) - Timestamp: 0.5 - - Color value: 0.8 (orange) + - Color value: 0 (orange) - Guideline (`0.7~0.9`) - Timestamp: 0.7 - Color value: 0.9 (yellow) @@ -26,13 +26,13 @@ The valid supported color values are the following: | Value | Color | |:------|:-------| -| 0.8 | orange | +| 0 | orange | | 0.9 | yellow | | 1.0 | green | ***Unexpected Behavior Information*** -- A color value of 0 will result in an orange guideline. +- A color value of 0.8 will result in an orange guideline. - Color values less than 0.8 will result in a transparent guideline. - Color values above 0.8 that do not match the yellow or the green guideline color values will result in an orange guideline. From 7d088519b7a2e9e8edb21645de8e0774c70834ad Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:08:37 +0300 Subject: [PATCH 099/389] Update requestUserAccess.md --- docs/endpoints/misc/requestUserAccess.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/misc/requestUserAccess.md b/docs/endpoints/misc/requestUserAccess.md index f61a23830..05e0f1814 100644 --- a/docs/endpoints/misc/requestUserAccess.md +++ b/docs/endpoints/misc/requestUserAccess.md @@ -8,15 +8,15 @@ Requests moderator access **accountID** - The accountID of the user requesting mod access -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user requesting mod access +**gjp2** - The [GJP2](/topics/encryption/gjp.md) of the user requesting mod access **secret** - Wmfd2893gb7 ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -49,4 +49,4 @@ print(req.text) -1 ``` - \ No newline at end of file + From fa26954a8e5ad83c85001084f88fa52a5d6fed30 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:12:06 +0300 Subject: [PATCH 100/389] Update deleteGJFriendRequests20.md --- docs/endpoints/socials/deleteGJFriendRequests20.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/socials/deleteGJFriendRequests20.md b/docs/endpoints/socials/deleteGJFriendRequests20.md index 052dc8ed7..f69c985bf 100644 --- a/docs/endpoints/socials/deleteGJFriendRequests20.md +++ b/docs/endpoints/socials/deleteGJFriendRequests20.md @@ -6,11 +6,11 @@ | Parameter | Explanation | Optional | | :---------------- | :---------------------------------------------------------------------------------- | -------- | -| `gameVersion` | The Game Version the player is playing on | `True` | -| `binaryVersion` | The current build the player playing on | `True` | +| `gameVersion` | The Game Version the player is playing on. 22 for 2.2 | `True` | +| `binaryVersion` | The current build the player playing on. 42 for 2.206 | `True` | | `gdw` | If the player is using Geometry Dash World | `True` | | `accountID` | The player's account ID | `False` | -| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `gjp2` | The player's [GJP2](/topics/encryption/gjp.md) | `False` | | `targetAccountID` | The accountID of the player you are declining the friend request | `False` | | `accounts` | Account IDs seperated by `,` for users the player is declining friend requests from | `True` | | `isSender` | If the player is the sender of this friend request | `True` | From 7a2bd777b70704ebbc4560fba2de5cd903b7a04d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:12:34 +0300 Subject: [PATCH 101/389] Update deleteGJMessages20.md --- docs/endpoints/socials/deleteGJMessages20.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/socials/deleteGJMessages20.md b/docs/endpoints/socials/deleteGJMessages20.md index 5a37fff0e..6e510fad8 100644 --- a/docs/endpoints/socials/deleteGJMessages20.md +++ b/docs/endpoints/socials/deleteGJMessages20.md @@ -8,7 +8,7 @@ Deletes a message between two users. **accountID** - The account ID of the user who is deleting the message -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user who is deleting the message +**gjp2** - The [GJP2](/topics/encryption/gjp.md) of the user who is deleting the message **messageID** - ID of the message being deleted @@ -18,9 +18,9 @@ Deletes a message between two users. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -58,4 +58,4 @@ print(req.text) 1 ``` - \ No newline at end of file + From 946106ccc637985c07641dc5e9cf69beabd7aaa3 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:13:19 +0300 Subject: [PATCH 102/389] Update acceptGJFriendRequest20.md --- docs/endpoints/socials/acceptGJFriendRequest20.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/socials/acceptGJFriendRequest20.md b/docs/endpoints/socials/acceptGJFriendRequest20.md index 237064b93..f080a0423 100644 --- a/docs/endpoints/socials/acceptGJFriendRequest20.md +++ b/docs/endpoints/socials/acceptGJFriendRequest20.md @@ -6,13 +6,13 @@ | Parameter | Explanation | Optional | | :---------------- | :----------------------------------------------------------------- | -------- | -| `gameVersion` | The Game Version the player is playing on | `True` | -| `binaryVersion` | The current build the player playing on | `True` | +| `gameVersion` | The Game Version the player is playing on. 22 for 2.2 | `True` | +| `binaryVersion` | The current build the player playing on. 42 for 2.206 | `True` | | `gdw` | If the player is using Geometry Dash World | `True` | | `requestID` | The ID of the friend request being accepted | `True` | | `accountID` | The player's account ID | `False` | | `targetAccountID` | The account which the player is trying to send a friend request to | `False` | -| `gjp` | The player's password encrypted with xor cipher and base64 | `False` | +| `gj2p` | The player's [GJP2](/topics/encryption/gjp.md) | `False` | | `secret` | The common secret: `Wmfd2893gb7` | `False` | ## Response From c3443b5978793989c8c0f2d83d79ecc59edae0cb Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:13:48 +0300 Subject: [PATCH 103/389] Update getGJChallenges.md --- docs/endpoints/rewards/getGJChallenges.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/rewards/getGJChallenges.md b/docs/endpoints/rewards/getGJChallenges.md index 726998013..3c2522604 100644 --- a/docs/endpoints/rewards/getGJChallenges.md +++ b/docs/endpoints/rewards/getGJChallenges.md @@ -14,15 +14,15 @@ Gets a user's quests. ### Optional Parameters -**gameVersion** - 20 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 **accountID** - Account ID of the user -**gjp** - The user's [GJP](/topics/encryption/gjp.md) +**gjp2** - The user's [GJP2](/topics/encryption/gjp.md) **uuid** - Seemingly a random number also used for identifying someone @@ -72,4 +72,4 @@ print(req.text) uFpntVWhadWMLCAsADwgLCwwCCw8BAAUBA3EUVFBXGERCRRl6ZxdZXEpRDQEDAAYHAgMJGAUdCxQBG3JWUVoXd1BWUFJDAwkYBB0ICBgGARVrQFZDGXtbW11cW0BYQwMJGAYdCAgEBx0IDRh4Q1sYeVZCTV1G|00bb89e2d55fc22fb9b60b9f41f1d6e5663b3036 ``` - \ No newline at end of file + From 021c6afff243e51787ab1f7ee85484c9fbe364ca Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:20:36 +0300 Subject: [PATCH 104/389] Update gamesave.md --- docs/resources/client/gamesave.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 32366307d..49747bba5 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -103,13 +103,9 @@ Your CCGameManager.dat File contains a lot of information regarding your account | Key | Value| | :-- |:-----------| | GJA_001 | Username| -| GJA_002 | Password (in plaintext)| +| GJA_002 | Password (in plaintext) (2.1 and below)| | GJA_003 | AccountID | - -#### GDL22 GJA -| Key | Value| -| :-- |:-----------| -| GJA_004 | SessionID | +| GJA_004 | Your password with GJP2 Encryption| ### LLM From d3d9b4251654fe6f310a507f8c1c89243ea9fae6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:25:16 +0300 Subject: [PATCH 105/389] save file 2.2 stuff part 1 --- docs/resources/client/gamesave.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 49747bba5..69cebfb52 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -20,10 +20,12 @@ Your CCGameManager.dat File contains a lot of information regarding your account | playerDart| [Icon](enumerations.md)| The ID of the player Wave | | playerRobot| [Icon](enumerations.md)| The ID of the player Robot | | playerSpider| [Icon](enumerations.md)| The ID of the player Spider | +| playerSwing| [Icon](enumerations.md)| The ID of the player Swing | | playerColor| [Icon](enumerations.md)| The ID of the player Color | | playerColor2| [Icon](enumerations.md)| The ID of the player Color2 | | playerStreak| [Icon](enumerations.md)| The ID of the player Trail | | playerDeathEffect| [Icon](enumerations.md)| The ID of the player Death Effect | +| playerJetpack| [Icon](enumerations.md)| The ID of the player Jetpack | | playerIconType| [Icon](enumerations.md)| The Index of the player's IconType | | playerGlow| Bool| if Glow is enabled or not | | secretNumber| Integer| the answer to `cod3breaker` in the vault of secrets | @@ -105,7 +107,8 @@ Your CCGameManager.dat File contains a lot of information regarding your account | GJA_001 | Username| | GJA_002 | Password (in plaintext) (2.1 and below)| | GJA_003 | AccountID | -| GJA_004 | Your password with GJP2 Encryption| +| GJA_004 | Session ID (unused) | +| GJA_005 | Your password with GJP2 Encryption| ### LLM From 7624186a77ec88a86cecb6c2bf5536009a2ab7ae Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:36:22 +0300 Subject: [PATCH 106/389] Update gamesave.md --- docs/resources/client/gamesave.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 69cebfb52..e59cc0abe 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -47,6 +47,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account | resolution| integer | The games resolution? | | texQuality| integer | how high the text quality is | | timeOffset| integer | music offset in milliseconds | +| customFPSTarget| float | the FPS target value ### GLM @@ -99,6 +100,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account | [GS_23](/resources/client/gamesave/GS_Value?id=gs_23)| Gauntlet Level Progress `{levelID}{percentage}` | | [GS_24](/resources/client/gamesave/GS_Value?id=gs_24)| Daily/Weekly Percentage | | [GS_25](/resources/client/gamesave/GS_Value#GS_25)| All the rewards from completed weekly Demons | +| [GS_27](/resources/client/gamesave/GS_Value#GS_27)| All the list rewards | ### GJA From ff448540c81d82c88a42afa3af9b556131f9d1a3 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:37:12 +0300 Subject: [PATCH 107/389] GS_27 --- docs/resources/client/gamesave/GS_Value.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 6f60028f1..9c5724376 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -250,3 +250,13 @@ GS_25 Contains the reward data for every weekly demon you have completed | `d100{number}` | The Timely ID of the weekly Demon you have beaten | | `k_{number}` | RewardItems -> the number corresponds to how many RewardItems the player will recieve | | `kCEK` | The [encoder keys](/resources/client/gamesave/kCEK?id=kcek-8-and-9-structure) | + + +## GS_27 + +GS_27 contains the List Rewards you have acquired + +| Structure | +|:----------| +|`lr_{listID}{diamonds}`| + From 79413e314d976224eb665cd1a1f8e0b8494b2f69 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:42:06 +0300 Subject: [PATCH 108/389] GS_value :heart_eyes: --- docs/resources/client/gamesave/GS_Value.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 9c5724376..9659794ff 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -34,6 +34,19 @@ GS values contain Information regarding certain aspects of the game | 26 | Light Shards | | 27 | Soul Shards | | 28 | Moons | +| 29 | Diamond Shards | +| 30 | Fire Path Progress | +| 31 | Ice Path Progress | +| 32 | Poison Path Progress | +| 33 | Shadow Path Progress | +| 34 | Lava Path Progress | +| 35 | Earth Path Progress | +| 36 | Blood Path Progress | +| 37 | Metal Path Progress | +| 38 | Light Path Progress | +| 39 | Soul Path Progress | +| 40 | Amount of Completed Gauntlets | +| 41 | List Rewards | | unique_{LevelID}_{Coins Collected} | The Coins Collected on the Official Levels ## GS_completed From 9a57694e08c0bf5e385ab80b79eb53719d7d28be Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:05:19 +0300 Subject: [PATCH 109/389] Update level.md --- docs/resources/client/level.md | 82 +++++++++++++++++++--------------- 1 file changed, 46 insertions(+), 36 deletions(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 0ffb5c189..2821726b5 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -9,37 +9,37 @@ A level is a playable object in Geometry Dash, namely coming with data that expl **Level Structure** | Key | Name/Value | Type | Description | -| :-- | :----------------------------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------------- | -| k1 | Level ID | **integer** | the id of the level | -| k2 | Level Name | **string** | the name of the level | -| k3 | Description | **string** | the level description, encoded in [base64](https://en.wikipedia.org/wiki/Base64) | -| k4 | Inner Level String | **[inner level string](/resources/client/level-components/inner-level-string.md)** | the inner level string, or the playable level | -| k5 | Creator | **[user](./user.md)Name** | the name of the level creator | -| k6 | UserID | **integer** | The UserID of the level Creator | -| k7 | level difficulty | **integer** | the difficulty the level has | -| k8 | Official Song ID | **[Audio Track](/reference?id=audio-track)** | the official Song ID (if used) | -| k9 | Rating | **integer** | The rating a level has | -| k10 | RatingSum | **integer** | the sum of all the ratings a level has | -| k11 | Downloads | **integer** | the amount of times the level's been downloaded | -| k12 | setCompletes | **integer** | level completions for that particular level | -| k13 | isEditable | **Bool** | used to stop people editing online and Official levels | -| k14 | Verified | **bool** | whether the level is verified or not | -| k15 | Uploaded | **bool** | whether the level is uploaded to the server or not | -| k16 | Level Version | **integer** | the version of the level | -| k17 | Game Version | **integer** | The Games Version | -| k18 | Attempts | **integer** | the number of attempts that are made to this level | -| k19 | Normal Mode Percentage | **integer** | the max percentage that has been achieved in normal mode in this level | -| k20 | Practice Mode Percentage | **integer** | the max percentage that has been achieved in practice mode in this level | -| k21 | levelType | **Integer** | The Level Type (1 = Official, 2 = Local, 3 = Saved, 4 = Online) | -| k22 | Like Rating | **integer** | the level's like rating (`likes - dislikes`) | -| k23 | Length | **[Length](enumerations.md)** | the level's length | -| k24 | Dislikes | **integer** | how many dislikes a level has (unused) | -| k25 | isDemon | **Bool** | if the level is demon or not | -| k26 | Stars | **integer** | the stars the level is worth | -| k27 | FeatureScore | **integer** | A featured levels Feature Score | -| k33 | Auto | **Bool** | If the level is auto | -| k34 | Replay Data | **[Gziped String](/topics/encryption/zip.md)** | Contains a Gzipped String which contains replay data for levels | -| k35 | isPlayable? | **Bool** | if the level is downloaded (honestly not much is known about this) | +| :--- | :----------------------------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------------- | +| k1 | Level ID | **integer** | the id of the level | +| k2 | Level Name | **string** | the name of the level | +| k3 | Description | **string** | the level description, encoded in [base64](https://en.wikipedia.org/wiki/Base64) | +| k4 | Inner Level String | **[inner level string](/resources/client/level-components/inner-level-string.md)** | the inner level string, or the playable level | +| k5 | Creator | **[user](./user.md)Name** | the name of the level creator | +| k6 | UserID | **integer** | The UserID of the level Creator | +| k7 | level difficulty | **integer** | the difficulty the level has | +| k8 | Official Song ID | **[Audio Track](/reference?id=audio-track)** | the official Song ID (if used) | +| k9 | Rating | **integer** | The rating a level has | +| k10 | RatingSum | **integer** | the sum of all the ratings a level has | +| k11 | Downloads | **integer** | the amount of times the level's been downloaded | +| k12 | setCompletes | **integer** | level completions for that particular level | +| k13 | isEditable | **Bool** | used to stop people editing online and Official levels | +| k14 | Verified | **bool** | whether the level is verified or not | +| k15 | Uploaded | **bool** | whether the level is uploaded to the server or not | +| k16 | Level Version | **integer** | the version of the level | +| k17 | Game Version | **integer** | The Games Version | +| k18 | Attempts | **integer** | the number of attempts that are made to this level | +| k19 | Normal Mode Percentage | **integer** | the max percentage that has been achieved in normal mode in this level | +| k20 | Practice Mode Percentage | **integer** | the max percentage that has been achieved in practice mode in this level | +| k21 | levelType | **Integer** | The Level Type (1 = Official, 2 = Local, 3 = Saved, 4 = Online) | +| k22 | Like Rating | **integer** | the level's like rating (`likes - dislikes`) | +| k23 | Length | **[Length](enumerations.md)** | the level's length | +| k24 | Dislikes | **integer** | how many dislikes a level has (unused) | +| k25 | isDemon | **Bool** | if the level is demon or not | +| k26 | Stars | **integer** | the stars the level is worth | +| k27 | FeatureScore | **integer** | A featured levels Feature Score | +| k33 | Auto | **Bool** | If the level is auto | +| k34 | Replay Data | **[Gziped String](/topics/encryption/zip.md)** | Contains a Gzipped String which contains replay data for levels | +| k35 | isPlayable? | **Bool** | if the level is downloaded (honestly not much is known about this) | | k36 | Jumps | **integer** | total Jumps on a level | | k37 | required coins | **Integer** | coins required to unlock an official level | | k38 | isUnlocked | **Bool** | is Official level Unlocked | @@ -62,12 +62,12 @@ A level is a playable object in Geometry Dash, namely coming with data that expl | k62 | Second Coin Acquired | **bool** | whether the second coin is acquired during verification | | k63 | Third Coin Acquired | **bool** | whether the third coin is acquired during verification | | k64 | Total Coins | **Integer** | How many Coins the level has | -| k65 | areCoinsVerified | **Bool** | denotes if the coins are verified or not | +| k65 | areCoinsVerified | **Bool** | denotes if the coins are verified or not | | k66 | Requested Stars | **integer** | the requested stars during publication of the level | -| k67 | [Capacity String](/resources/client/level-components/capacity-string.md) | **String** | Contains batch information about levels | +| k67 | [Capacity String](/resources/client/level-components/capacity-string.md)| **String** | Contains batch information about levels | | k68 | triggeredAntiCheat | **Bool** | if you trigger the anticheat when beating demons | | k69 | High Object Count | **Bool** | If a level has a high object count | -| k71 | Mana Orb Percentage | **integer** | the percentage up until the orb reward has been granted | +| k71 | Mana Orb Percentage | **integer** | the percentage up until the orb reward has been granted | | k72 | hasLowDetailMode | **Bool** | If a level has LDM | | k73 | toggleLDM | **Bool** | If a LDM is Enabled | | k74 | timelyID | **integer** | the timelyID for a level | @@ -85,8 +85,16 @@ A level is a playable object in Geometry Dash, namely coming with data that expl | k86 | Player Time | **integer** | the amount of time on a players best attempt | | k87 | level Seed | **[LevelScoreSeed](/topics/encryption/chk?id=level-leaderboard)**| Contains info to verify the integrity of levelScores | | k88 | Level Progress | **String** | Contains a list of high score differences seperated by a `,` | -| k89 | vfDChk | **Bool** | used to check for level completion | -| k90 | Leaderboard percentage | **integer** | Contains the percentage for level Leaderboards | +| k89 | vfDChk | **Bool** | used to check for level completion | +| k90 | Leaderboard percentage | **integer** | Contains the percentage for level Leaderboards | +| k95 | Verification Time | **integer** | Verification time in physics steps (240 steps per second) | +| k104 | Songs | **string** | List of song IDs separated by `,` | +| k105 | SFX | **string** | List of SFX IDs separated by `,` | +| k107 | Best Time | **integer** | Your best time on the level in milliseconds | +| k108 | Best Points | **integer** | Your point highscore on the level | +| k109 | Local Best Times | **integer** | List of your best times on the level in milliseconds, separated by `,` | +| k110 | Local Best Points | **integer** | List of your point highscores on the level, separated by `,` | +| k112 | No Shake | **bool** | Whether the player has disabled shake for this level | **Last Editor State Key/Value Pairs** @@ -118,3 +126,5 @@ The build tab page is 5, and the button settings are 6x2 (default), meaning the | k92 | **integer** | | | k93 | **Bool** | unlimited Objects? | | k94 | **Bool** | Platformer? | +| k101 | **string** | seems to only appear on local levels and always seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +| k111 | **integer** | always seems to be 5 digits and seems to be platformer-exclusive | From 389d70c9c912dd8cdb06be871f89c7535acca98f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:06:52 +0300 Subject: [PATCH 110/389] Update level.md --- docs/resources/client/level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 2821726b5..6acbba111 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -126,5 +126,5 @@ The build tab page is 5, and the button settings are 6x2 (default), meaning the | k92 | **integer** | | | k93 | **Bool** | unlimited Objects? | | k94 | **Bool** | Platformer? | -| k101 | **string** | seems to only appear on local levels and always seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +| k101 | **string** | seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | | k111 | **integer** | always seems to be 5 digits and seems to be platformer-exclusive | From 5afb5f160c387b86b1bf7ab288474f74ad6df5a9 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:08:13 +0300 Subject: [PATCH 111/389] Update level.md --- docs/resources/client/level.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 6acbba111..9946ddabd 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -88,8 +88,8 @@ A level is a playable object in Geometry Dash, namely coming with data that expl | k89 | vfDChk | **Bool** | used to check for level completion | | k90 | Leaderboard percentage | **integer** | Contains the percentage for level Leaderboards | | k95 | Verification Time | **integer** | Verification time in physics steps (240 steps per second) | -| k104 | Songs | **string** | List of song IDs separated by `,` | -| k105 | SFX | **string** | List of SFX IDs separated by `,` | +| k104 | Song list | **string** | List of song IDs separated by `,` | +| k105 | SFX list | **string** | List of SFX IDs separated by `,` | | k107 | Best Time | **integer** | Your best time on the level in milliseconds | | k108 | Best Points | **integer** | Your point highscore on the level | | k109 | Local Best Times | **integer** | List of your best times on the level in milliseconds, separated by `,` | From 576a96f1e9ea0f1ef2ec06a1430288ea37132d82 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 17:09:50 +0300 Subject: [PATCH 112/389] Update level.md --- docs/resources/client/level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 9946ddabd..8fcc39276 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -127,4 +127,4 @@ The build tab page is 5, and the button settings are 6x2 (default), meaning the | k93 | **Bool** | unlimited Objects? | | k94 | **Bool** | Platformer? | | k101 | **string** | seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | -| k111 | **integer** | always seems to be 5 digits and seems to be platformer-exclusive | +| k111 | **integer** | seems to be 4 or 5 digits and seems to be platformer-exclusive | From 156a64294cac0d8edd8a716f5a38193ac1120116 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 18:29:49 +0300 Subject: [PATCH 113/389] Update level.md --- docs/resources/server/level.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/server/level.md b/docs/resources/server/level.md index 2ab762dc3..2022b2fb2 100644 --- a/docs/resources/server/level.md +++ b/docs/resources/server/level.md @@ -73,6 +73,8 @@ Keys indicated with an asterisk (\*) are only returned from the downloadGJLevel2 - The getGJLevels endpoint returns the keys `46` and `47` however they aren't actually correct (as of 2.1) +- Keys `46` and `47` are also capped at the 24-bit integer limit so any time longer than around 4660 hours won't be accurate + - key `45` caps at the 16-bit integer limit so any level with more objects won't be accurate - Key `57` caps at the 24-bit integer limit so any time longer than around 465 hours won't be accurate From d9b7ddec3d5381307898fd3ec8da4e658e0bf1f2 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:19:01 +0300 Subject: [PATCH 114/389] Create sfxlibrary.md --- docs/endpoints/songs/sfxlibrary.md | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/endpoints/songs/sfxlibrary.md diff --git a/docs/endpoints/songs/sfxlibrary.md b/docs/endpoints/songs/sfxlibrary.md new file mode 100644 index 000000000..69c2e2ba0 --- /dev/null +++ b/docs/endpoints/songs/sfxlibrary.md @@ -0,0 +1,37 @@ +## sfxlibrary.dat format +The SFX library is split into 2 parts: + +``` +{files}|{credits} +``` + +## Files & folders + +`{files}` is a list of files and folders, separated with semicolons. The file format is as follows: + +`{id},{name},{isFolder},{parentFolder},{filesize},{duration}` + +| Key | Type | Description | +| :----------- | :-------- | :--------------------------------------------------------------- | +| id | `integer` | The sound effect/folder ID | +| name | `string` | The sound effect/folder name | +| isFolder | `boolean` | Whether this is a sound effect or folder | +| parentFolder | `integer` | The parent folder | +| filesize | `integer` | The sound effect file size in bytes | +| duration | `integer` | The duration of the sound effect, in `seconds * 100` | + +The first "folder" is a special case: it has an ID of 1 and its name corresponds to the SFX library version. + +## Credits + +The `{credits}` part is very simple. It's a list of all the companies/people from which RobTop has licensed the sound effects, in this format: + +`{name},{link};{name},{link}...` + +where `name` is the name of the company and `link` is a link to their website. + +Example (SFX library version **95**): + +``` +Epic Stock Media,https://epicstockmedia.com;Cyberwave Orchestra,https://cyberwaveorchestra.com;Fusehive,http://fusehive.com;SoundMorph,https://www.soundmorph.com;Stormwave Audio,https://stormwave-audio.com;David Dumais,https://www.daviddumaisaudio.com;Sharks,https://www.sharkstunes.com; +``` From 7e8b6ba8b5094698bc5bef82386db90d16398c97 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:24:49 +0300 Subject: [PATCH 115/389] Create sfxlibrary.md --- docs/resources/client/sfxlibrary.md | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/resources/client/sfxlibrary.md diff --git a/docs/resources/client/sfxlibrary.md b/docs/resources/client/sfxlibrary.md new file mode 100644 index 000000000..9abb6949b --- /dev/null +++ b/docs/resources/client/sfxlibrary.md @@ -0,0 +1,38 @@ +# SFX Library format + +The SFX library is split into 2 parts: + +``` +{files}|{credits} +``` + +## Files & folders + +`{files}` is a list of files and folders, separated with semicolons. The file format is as follows: + +`{id},{name},{isFolder},{parentFolder},{filesize},{duration}` + +| Key | Type | Description | +| :----------- | :-------- | :--------------------------------------------------------------- | +| id | `integer` | The sound effect/folder ID | +| name | `string` | The sound effect/folder name | +| isFolder | `boolean` | Whether this is a sound effect or folder | +| parentFolder | `integer` | The parent folder | +| filesize | `integer` | The sound effect file size in bytes | +| duration | `integer` | The duration of the sound effect, in `seconds * 100` | + +The first "folder" is a special case: it has an ID of 1 and its name corresponds to the SFX library version. + +## Credits + +The `{credits}` part is very simple. It's a list of all the companies/people from which RobTop has licensed the sound effects, in this format: + +`{name},{link};{name},{link}...` + +where `name` is the name of the company and `link` is a link to their website. + +Example (SFX library version **95**): + +``` +Epic Stock Media,https://epicstockmedia.com;Cyberwave Orchestra,https://cyberwaveorchestra.com;Fusehive,http://fusehive.com;SoundMorph,https://www.soundmorph.com;Stormwave Audio,https://stormwave-audio.com;David Dumais,https://www.daviddumaisaudio.com;Sharks,https://www.sharkstunes.com; +``` From 1e616d745820db68c29b13a243a21c8eb9172a0c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:25:21 +0300 Subject: [PATCH 116/389] Update sfxlibrary.md --- docs/endpoints/songs/sfxlibrary.md | 38 +++++------------------------- 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/docs/endpoints/songs/sfxlibrary.md b/docs/endpoints/songs/sfxlibrary.md index 69c2e2ba0..3ee886895 100644 --- a/docs/endpoints/songs/sfxlibrary.md +++ b/docs/endpoints/songs/sfxlibrary.md @@ -1,37 +1,11 @@ -## sfxlibrary.dat format -The SFX library is split into 2 parts: +# sfxlibrary.dat -``` -{files}|{credits} -``` +## Requests -## Files & folders +In Geometry Dash 2.2, the Sound Effect library has been added. The library can be fetched via a GET request to `https://geometrydashfiles.b-cdn.net/sfx/sfxlibrary.dat`. -`{files}` is a list of files and folders, separated with semicolons. The file format is as follows: +You can also fetch the latest version of the SFX Library by sending a GET request to `https://geometrydashfiles.b-cdn.net/sfx/sfxlibrary_version.txt`. -`{id},{name},{isFolder},{parentFolder},{filesize},{duration}` +You can download a sound effect by sending a GET request to `https://geometrydashfiles.b-cdn.net/sfx/s{id}.ogg`. -| Key | Type | Description | -| :----------- | :-------- | :--------------------------------------------------------------- | -| id | `integer` | The sound effect/folder ID | -| name | `string` | The sound effect/folder name | -| isFolder | `boolean` | Whether this is a sound effect or folder | -| parentFolder | `integer` | The parent folder | -| filesize | `integer` | The sound effect file size in bytes | -| duration | `integer` | The duration of the sound effect, in `seconds * 100` | - -The first "folder" is a special case: it has an ID of 1 and its name corresponds to the SFX library version. - -## Credits - -The `{credits}` part is very simple. It's a list of all the companies/people from which RobTop has licensed the sound effects, in this format: - -`{name},{link};{name},{link}...` - -where `name` is the name of the company and `link` is a link to their website. - -Example (SFX library version **95**): - -``` -Epic Stock Media,https://epicstockmedia.com;Cyberwave Orchestra,https://cyberwaveorchestra.com;Fusehive,http://fusehive.com;SoundMorph,https://www.soundmorph.com;Stormwave Audio,https://stormwave-audio.com;David Dumais,https://www.daviddumaisaudio.com;Sharks,https://www.sharkstunes.com; -``` +The SFX library format is covered [here](/resources/client/sfxlibrary.md). From 89e58b3d7a88c47042277bc41f7454bb475f8803 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:26:43 +0300 Subject: [PATCH 117/389] Update sfxlibrary.md --- docs/resources/client/sfxlibrary.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/sfxlibrary.md b/docs/resources/client/sfxlibrary.md index 9abb6949b..050ed13c1 100644 --- a/docs/resources/client/sfxlibrary.md +++ b/docs/resources/client/sfxlibrary.md @@ -1,5 +1,7 @@ # SFX Library format +To decode sfxlibrary.dat, you need to Base64 URL-Safe decode it and Zlib inflate it. + The SFX library is split into 2 parts: ``` From a8c36a4397b9138f465e8976d680b327fc2f6276 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:27:21 +0300 Subject: [PATCH 118/389] Update sfxlibrary.md --- docs/resources/client/sfxlibrary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/sfxlibrary.md b/docs/resources/client/sfxlibrary.md index 050ed13c1..41431553e 100644 --- a/docs/resources/client/sfxlibrary.md +++ b/docs/resources/client/sfxlibrary.md @@ -1,6 +1,6 @@ # SFX Library format -To decode sfxlibrary.dat, you need to Base64 URL-Safe decode it and Zlib inflate it. +To decode sfxlibrary.dat, you need to [Base64](/topics/encryption/base64.md) URL-Safe decode it and [Zlib](/topics/encryption/zip.md) inflate it. The SFX library is split into 2 parts: From 57ef75e1ca95c5c7e860cf5bc538695af95731e6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:30:03 +0300 Subject: [PATCH 119/389] Update _sidebar.md --- docs/_sidebar.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index cef92b67b..2cd0959b6 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -41,6 +41,8 @@ - [Level Object](/resources/client/level-components/level-object.md) - [Color String](/resources/client/level-components/color-string.md) - [Guideline String](/resources/client/level-components/guideline-string.md) + + - [SFX Library](/resources/client/sfxlibrary.md) **Endpoints** **Accounts** @@ -101,6 +103,7 @@ - [getGJSongInfo](/endpoints/songs/getGJSongInfo.md) - [getGJTopArtists](/endpoints/songs/getGJTopArtists.md) - [testSong](/endpoints/songs/testSong.md) + - [sfxlibrary.dat](/endpoints/songs/sfxlibrary.md) **Misc** - [getAccountURL](/endpoints/misc/getAccountURL.md) - [getSaveData](/endpoints/misc/getSaveData.md) From f983082641dba8cf381c4a419716c755fac6c98b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:30:49 +0300 Subject: [PATCH 120/389] Update sfxlibrary.md --- docs/resources/client/sfxlibrary.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/sfxlibrary.md b/docs/resources/client/sfxlibrary.md index 41431553e..2f85dde2d 100644 --- a/docs/resources/client/sfxlibrary.md +++ b/docs/resources/client/sfxlibrary.md @@ -1,5 +1,7 @@ # SFX Library format +The SFX Library is stored in your save directory as `sfxlibrary.dat`. To learn how to retreive it from the servers, refer to [this page](/endpoints/songs/sfxlibrary.md). + To decode sfxlibrary.dat, you need to [Base64](/topics/encryption/base64.md) URL-Safe decode it and [Zlib](/topics/encryption/zip.md) inflate it. The SFX library is split into 2 parts: From 49a70ecc2dd62531fd1ffe80d2575255ca848eb4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:31:36 +0300 Subject: [PATCH 121/389] Update reference.md --- docs/reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference.md b/docs/reference.md index fb26ff068..8f4a84752 100644 --- a/docs/reference.md +++ b/docs/reference.md @@ -48,7 +48,7 @@ Part of levels and requests for them is a term known as `audio track`, or the id ### Secrets -To interact with the Geometry Dash API you need a 11 character long string called `secret`. As of 2.1 there are `4` secrets that are currently known of. +To interact with the Geometry Dash API you need a 11 character long string called `secret`. As of 2.2 there are `4` secrets that are currently known of. | Secret | type | Usage | |:-------|:-----|:------| From 6ab511c2fc4232f4e53bca13ac8f6a96d70384b2 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:32:39 +0300 Subject: [PATCH 122/389] Update generic.md --- docs/endpoints/generic.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/endpoints/generic.md b/docs/endpoints/generic.md index 9d5d72f29..e1647838f 100644 --- a/docs/endpoints/generic.md +++ b/docs/endpoints/generic.md @@ -14,7 +14,6 @@ To make a successful request to the Geometry Dash servers, there are a couple fa The Geometry Dash servers are protected using a service called [Cloudflare](https://www.cloudflare.com/). In order to send a successful request, bypassing cloudflare is essential. In order to bypass cloudflare there are two steps. - You must send the request to the `www.` subdomain. -- You must send the request using the `HTTP` protocol, not `HTTPS` - You must send the request with an empty user-agent If you don't follow these steps, cloudflare will block the request and you will recieve an HTTP error code: `1020` From 01f4c944edb314dbe8886908e64338bd7fe16ee7 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:38:10 +0300 Subject: [PATCH 123/389] Create musiclibrary.md --- docs/endpoints/songs/musiclibrary.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/endpoints/songs/musiclibrary.md diff --git a/docs/endpoints/songs/musiclibrary.md b/docs/endpoints/songs/musiclibrary.md new file mode 100644 index 000000000..784e83215 --- /dev/null +++ b/docs/endpoints/songs/musiclibrary.md @@ -0,0 +1,17 @@ +# musiclibrary.dat + +## Requests + +In Geometry Dash 2.2, the Music library has been added, adding thousands of songs that were not on Newgrounds to the game. + +In 2.206, NCS was added to the music library, which forced RobTop to overhaul the file format. + +The current library (as of 2.206) can be fetched via a GET request to `https://geometrydashfiles.b-cdn.net/music/musiclibrary_02.dat`. + +The old music library can be fetched via a GET request to `https://geometrydashfiles.b-cdn.net/music/musiclibrary.dat`. + +You can also fetch the latest version of the Music Library by sending a GET request to `https://geometrydashfiles.b-cdn.net/music/musiclibrary_version_02.txt` (for the old library, the link is `https://geometrydashfiles.b-cdn.net/music/musiclibrary_version.txt`. As of the writing, the latest version for the old library is `114` and this is unlikely to change in the future). + +You can download a track by sending a GET request to `https://geometrydashfiles.b-cdn.net/music/{id}.mp3`. All Music Library song IDs have an offset of 10,000,000 to not interfere with the Newgrounds songs. + +The Music library format is covered [here](/resources/client/musiclibrary.md). From fe9db89cdb671b3f4d32037e9d7eb75fb6d9acb7 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 20:10:48 +0300 Subject: [PATCH 124/389] Create musiclibrary.md --- docs/resources/client/musiclibrary.md | 56 +++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 docs/resources/client/musiclibrary.md diff --git a/docs/resources/client/musiclibrary.md b/docs/resources/client/musiclibrary.md new file mode 100644 index 000000000..445f5437b --- /dev/null +++ b/docs/resources/client/musiclibrary.md @@ -0,0 +1,56 @@ +# Music Library format + +The Music Library is stored in your save directory as `musiclibrary.dat`. To learn how to retreive it from the servers, refer to [this page](/endpoints/songs/musiclibrary.md). + +To decode musiclibrary.dat, you need to [Base64](/topics/encryption/base64.md) URL-Safe decode it and [Zlib](/topics/encryption/zip.md) inflate it. + +The Music library is split into 4 parts: + +``` +{version}|{artists}|{songs}|{tags} +``` + +## Version + +This is just the music library version. Not much more to say here. + +## Artists + +These are all of the artists, separated by `;` in the following format: + +`{artistID},{name},{website},{youtubeChannel}` + +The website is the full link, but it is URL encoded. The YouTube channel link is only the part that comes after `https://youtube.com/channel/`. If either of these are missing, there will be a space character in place of them. + +Here is an example of an artist: + +``` +286,F-777,https%3A%2F%2Fjessevalentinemusic.bandcamp.com,UC6MNIegxWVDe6tOjL92QkUw +``` + +## Songs + +This is where the old (2.205-) and new (2.206+) music libraries diverge. In both libraries, the songs are separated with `;`. However, the new music library has each song in this format: + +`{id},{name},{artistID},{filesize},{duration},{tags},{musicPlatform},{extraArtists},{externalLink},{newButton},{priorityOrder},{songNumber}` + +Meanwhile the old music library has each song in this format: + +`{id},{name},{artistID},{filesize},{duration},{tags}` + +Here's an explanation for each key: + +| Name | Type | Description | +| :------------ | :-------- | :---------------------------------------------------------------------------------------------------------- | +| id | integer | The song ID | +| name | string | The song name | +| artistID | integer | The primary artist ID | +| filesize | integer | The file size of the song in bytes | +| duration | integer | The song's duration in seconds | +| tags | string | The song's tags, separated by dots. The string also has extra dots at the start and end for unknown reasons | +| musicPlatform | integer | The platform this song comes from. 0 for None, 1 for NCS. | +| extraArtists | string | The IDs of the artists that contributed to the song, separated with `.` | +| externalLink | string | The external link to the song (NOT the GD download link) | +| newButton | boolean | Whether there's a yellow `NEW` icon next to the song | +| priorityOrder | integer | The priority order of the song. Usually, songs are ordered alphabetically, but if the song has this number set above 0, then it gets put above all the other songs. The song also receives a blue `NEW` icon. All of the songs with this property have the previous property set as 0. | +| songNumber | integer | The number of the song in the list. Starts at 1. Usage is unknown | From 2313671d22db8e417554c42e16341b4c01fe2562 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 20:13:46 +0300 Subject: [PATCH 125/389] Update musiclibrary.md --- docs/resources/client/musiclibrary.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/resources/client/musiclibrary.md b/docs/resources/client/musiclibrary.md index 445f5437b..725290dd3 100644 --- a/docs/resources/client/musiclibrary.md +++ b/docs/resources/client/musiclibrary.md @@ -54,3 +54,15 @@ Here's an explanation for each key: | newButton | boolean | Whether there's a yellow `NEW` icon next to the song | | priorityOrder | integer | The priority order of the song. Usually, songs are ordered alphabetically, but if the song has this number set above 0, then it gets put above all the other songs. The song also receives a blue `NEW` icon. All of the songs with this property have the previous property set as 0. | | songNumber | integer | The number of the song in the list. Starts at 1. Usage is unknown | + +## Tags + +These are all the tags that you can filter songs by. They are stored in the following format: + +`{id},{name};{id},{name}...` + +All tags as of version `117`: + +``` +144,16bit;49,8bit;126,Acion;20,Action;114,Adventure;90,African;84,Aggressive;37,Alert;187,Alternative dance;211,Alternative hip-hop;186,Alternative pop;17,Ambiance;121,Ambience;124,Ambient;169,Angry;194,Anti-pop;66,Asian;115,Atmosphere;70,Atmospheric;204,Bass house;179,Bass music;39,Battle;232,Big room house;100,Blues;58,Boss;75,Bouncy;147,Brazilian phonk;184,Breakbeat;79,Bright;16,Calm;82,Calming;40,Casual;127,Celtic;165,Chasing;123,Chill;199,Chill bass;192,Chill house;195,Chill pop;48,Chiptune;23,Christmas;128,Cinematic;94,Classical;233,Color bass;41,Combat;9,Comedy;231,Complextro;89,Contemporary;72,Creepy;145,Cute;43,Cyberpunk;155,Dance;173,Dance-pop;221,Dance-punk;203,Dance-rock;11,Dark;190,Deep house;129,Desert;99,Disco;209,Disco house;14,Doom;205,Downtempo;149,Dreamy;78,Driving;109,Drone;164,Drum & bass;42,Drums;217,Drumstep;191,Dubstep;38,Dungeon;133,Dystopian;156,Eccentric;108,Edm;76,Eerie;6,Electro;219,Electro house;35,Electronic;174,Electronic pop;176,Electronic rock;96,Electronica;157,Elegant;64,Energetic;44,Environment;18,Epic;143,Ethnic;150,Euphoric;36,Event;177,Experimental;15,Fantasy;167,Fear;118,Field;132,Fire;158,Floating;139,Forest;85,Funk;10,Funny;210,Future bass;214,Future bounce;223,Future funk;197,Future house;212,Future rave;200,Future trap;201,Futurepop;110,Futuristic;153,Garage;159,Glamorous;216,Glitch hop;74,Grooving;54,Guitar;24,Happy;213,Hardcore;171,Hardstyle;135,Harp;166,Heavy;148,Hip-hop;91,Holiday;180,Hopeful;22,Horror;154,House;12,Humor;25,Humorous;56,Hybrid;59,Indie;208,Indie dance;29,Instrumental;8,Intense;95,Jazz;170,Jersey club;53,Jrpg;207,Jump-up;175,Laid back;101,Latin;193,Latin-dance;47,Light;188,Liquid;34,Lofi;182,Lofi hip-hop;61,Loop;113,Low-fi;28,Medieval;222,Melbourne bounce;178,Melodic dubstep;185,Melodic house;13,Metal;181,Midtempo bass;146,Military;196,Minimal;102,Modern;206,Moodshappy;105,Musical;26,Mysterious;46,Mystery;77,Mystical;140,Nature;189,Neurofunk;67,Nordic;19,Orchestral;183,Peaceful;57,Percussion;112,Phonk;30,Piano;32,Pirate;63,Platformer;98,Polka;86,Pop;202,Progressive electro;229,Progressive electron;218,Progressive house;73,Puzzle;142,Quirky;104,Reggae;80,Relaxed;62,Relaxing;160,Restless;45,Retro;52,Retrowave;92,Rock;161,Romantic;21,Rpg;151,Running;31,Sad;168,Scary;50,Sci-fi;137,Scifi;117,Sentimental;162,Sexy;122,Sfx;60,Short;87,Silentfilmscore;106,Ska;215,Slap house;131,Slavic;163,Smooth;172,Sneaking;7,Sneaky;81,Somber;71,Soundscape;88,Soundtrack;33,Spooky;103,Stings;134,Suspense;27,Suspenseful;130,Synth;220,Synth-pop;5,Synthwave;136,Tavern;198,Tech house;141,Techno;69,Texture;120,Theme;138,Tonal;119,Town;125,Trance;116,Tranquil;111,Trap;230,Tropical house;93,Unclassifiable;55,Underscore;68,Unnerving;51,Upbeat;83,Uplifting;107,Urban;152,Weird;65,Western;97,World; +``` From 63f4a63638c60a154d3d28f6a758156bb58166eb Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 22:13:54 +0300 Subject: [PATCH 126/389] Update _sidebar.md --- docs/_sidebar.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 2cd0959b6..db72f9fef 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -42,6 +42,7 @@ - [Color String](/resources/client/level-components/color-string.md) - [Guideline String](/resources/client/level-components/guideline-string.md) + - [Music Library](/resources/client/musiclibrary.md) - [SFX Library](/resources/client/sfxlibrary.md) **Endpoints** @@ -103,6 +104,7 @@ - [getGJSongInfo](/endpoints/songs/getGJSongInfo.md) - [getGJTopArtists](/endpoints/songs/getGJTopArtists.md) - [testSong](/endpoints/songs/testSong.md) + - [musiclibrary.dat](/endpoints/songs/musiclibrary.md) - [sfxlibrary.dat](/endpoints/songs/sfxlibrary.md) **Misc** - [getAccountURL](/endpoints/misc/getAccountURL.md) From 172dfa5d2548fa72b79063f352d420d0e1507825 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 22:34:56 +0300 Subject: [PATCH 127/389] Update gamesave.md --- docs/resources/client/gamesave.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index e59cc0abe..4114fdf3c 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -24,6 +24,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account | playerColor| [Icon](enumerations.md)| The ID of the player Color | | playerColor2| [Icon](enumerations.md)| The ID of the player Color2 | | playerStreak| [Icon](enumerations.md)| The ID of the player Trail | +| playerShipStreak| [Icon](enumerations.md)| The ID of the player Ship Streak | | playerDeathEffect| [Icon](enumerations.md)| The ID of the player Death Effect | | playerJetpack| [Icon](enumerations.md)| The ID of the player Jetpack | | playerIconType| [Icon](enumerations.md)| The Index of the player's IconType | @@ -41,13 +42,22 @@ Your CCGameManager.dat File contains a lot of information regarding your account | clickedPractice| Bool | if Practice mode button has been clicked | | showedEditorGuide| Bool | if EditorGuide has been clicked | | showedLowDetailDialog| Bool | if low detail mode has been has been clicked | +| showedRateStarDialog| Bool | if rate star dialog has been shown | | bootups| integer | The ammount of times you have opened Geometry Dash | | hasRatedGame| Bool | if you have rated the game | | binaryVersion| integer | The Games Binary Version | | resolution| integer | The games resolution? | | texQuality| integer | how high the text quality is | | timeOffset| integer | music offset in milliseconds | -| customFPSTarget| float | the FPS target value +| customFPSTarget| float | the FPS target value | +| dpad01 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #1 | +| dpad02 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #2 | +| dpad03 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #3 | +| dpad04 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #4 | +| dpad05 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #5 | +| practiceOpacity | float | The opacity of the practice UI, from 0 to 1| +| practicePosX | float | The X position of the practice UI | +| practicePosY | float | The Y position of the practice UI | ### GLM From 68a69012bfcd1d0d99c8aad9b8b0427c7064212e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 23:39:28 +0300 Subject: [PATCH 128/389] platformer ui --- docs/resources/client/gamesave/dpad.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/resources/client/gamesave/dpad.md diff --git a/docs/resources/client/gamesave/dpad.md b/docs/resources/client/gamesave/dpad.md new file mode 100644 index 000000000..b06f49f56 --- /dev/null +++ b/docs/resources/client/gamesave/dpad.md @@ -0,0 +1,19 @@ +# Platformer UI + +The Platformer UI object is formatted as follows: + +`{width},{height},{scale},{opacity},{xPos},{yPos},{modeB},{deadzone},{radius},{snap},{split}` + +| Key | Type | Description | +| :-----------------| :----------| :-----------------------------------------------------------------------| +| width | integer | The width of the button hitbox | +| height | integer | The height of the button hitbox | +| scale | float | The scale of the buttons | +| opacity | integer | The button opacity (from 0 to 255) | +| xPos | float | The X position of the buttons | +| yPos | float | The Y position of the buttons | +| modeB | boolean | The ModeB checkbox | +| deadzone | float | The deadzone between the buttons | +| radius | float | The distance between the buttons | +| snap | boolean | The Snap checkbox | +| split | boolean | The Split checkbox | From ace566efb1a0b4d4e1b4b1db1ee843524e162658 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 3 Jul 2024 23:45:25 +0300 Subject: [PATCH 129/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index db72f9fef..b563d8f16 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -32,6 +32,7 @@ - [Game Variables](/resources/client/gamesave/gv.md) - [Achievements](/resources/client/gamesave/achievement.md) - [Quests](/resources/client/gamesave/quests.md) + - [Platformer UI](resources/client/gamesave/dpad.md) - [Level](/resources/client/level.md) - [Capacity String](/resources/client/level-components/capacity-string.md) From 064756698cd0af9d78e3ce402e4299dc79339954 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 02:43:44 +0300 Subject: [PATCH 130/389] Update getGJLevels21.md --- docs/endpoints/levels/getGJLevels21.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index a96528cdc..7b033881c 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -61,10 +61,11 @@ | 16 | Hall of fame | | 17 | Featured in GD World | | 18 | Unknown (always empty, perhaps robtop only?) | -| 19 | Unknown (same as map packs but this type has pagination and no star rate filter) | +| 19 | Unknown (same as type 10 but this type has pagination and no star rate filter) | | 21 | Daily history | | 22 | Weekly history | | 25 | Level list, uses `str` as the list ID | +| 26 | Unknown (same as type 19 but each page has up to 100 levels instead of 10 on it) | From 4b577b304a6f2910cbbe267e33a4b96388bcb136 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 18:49:10 +0300 Subject: [PATCH 131/389] Update gamesave.md --- docs/resources/client/gamesave.md | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 4114fdf3c..153a523db 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -13,20 +13,21 @@ Your CCGameManager.dat File contains a lot of information regarding your account | playerUDID| [UDID](/topics/encryption/id?id=udid)| The UDID of the user | | playerName| String| The In-game Name of the player| | playerUserID| Integer| The userID of the player| -| playerFrame| [Icon](enumerations.md)| The ID of the player Cube | -| playerShip| [Icon](enumerations.md)| The ID of the player Ship | -| playerBall| [Icon](enumerations.md)| The ID of the player Ball | -| playerBird| [Icon](enumerations.md)| The ID of the player UFO | -| playerDart| [Icon](enumerations.md)| The ID of the player Wave | -| playerRobot| [Icon](enumerations.md)| The ID of the player Robot | -| playerSpider| [Icon](enumerations.md)| The ID of the player Spider | -| playerSwing| [Icon](enumerations.md)| The ID of the player Swing | -| playerColor| [Icon](enumerations.md)| The ID of the player Color | -| playerColor2| [Icon](enumerations.md)| The ID of the player Color2 | -| playerStreak| [Icon](enumerations.md)| The ID of the player Trail | -| playerShipStreak| [Icon](enumerations.md)| The ID of the player Ship Streak | -| playerDeathEffect| [Icon](enumerations.md)| The ID of the player Death Effect | -| playerJetpack| [Icon](enumerations.md)| The ID of the player Jetpack | +| playerFrame| [Icon](enumerations.md)| The ID of the player's cube | +| playerShip| [Icon](enumerations.md)| The ID of the player's ship | +| playerBall| [Icon](enumerations.md)| The ID of the player's ball | +| playerBird| [Icon](enumerations.md)| The ID of the player's UFO | +| playerDart| [Icon](enumerations.md)| The ID of the player's wave | +| playerRobot| [Icon](enumerations.md)| The ID of the player's robot | +| playerSpider| [Icon](enumerations.md)| The ID of the player's spider | +| playerSwing| [Icon](enumerations.md)| The ID of the player's swing | +| playerColor| [Icon](enumerations.md)| The ID of the player's primary color | +| playerColor2| [Icon](enumerations.md)| The ID of the player's secondary color | +| playerColor3| [Icon](enumerations.md)| The ID of the player's glow color, -1 if same as secondary color | +| playerStreak| [Icon](enumerations.md)| The ID of the player's trail | +| playerShipStreak| [Icon](enumerations.md)| The ID of the player's ship streak | +| playerDeathEffect| [Icon](enumerations.md)| The ID of the player's death effect | +| playerJetpack| [Icon](enumerations.md)| The ID of the player's jetpack | | playerIconType| [Icon](enumerations.md)| The Index of the player's IconType | | playerGlow| Bool| if Glow is enabled or not | | secretNumber| Integer| the answer to `cod3breaker` in the vault of secrets | From 01636202f0734ff65005d72f5e93063f75a91d12 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 18:54:24 +0300 Subject: [PATCH 132/389] value keeper part 1 --- docs/resources/client/gamesave/valueKeeper.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/resources/client/gamesave/valueKeeper.md b/docs/resources/client/gamesave/valueKeeper.md index 8ca8d8b2f..4794c45fa 100644 --- a/docs/resources/client/gamesave/valueKeeper.md +++ b/docs/resources/client/gamesave/valueKeeper.md @@ -7,12 +7,15 @@ Value Keeper is a giant Dictionary found in CCGameManager.dat that contains the | prefix | Description | |:-------|:------------| | [gv_{ID}](/resources/client/gamesave/gv.md) | enabled Game Variables | -| i_{ID} | The playerCubes you have unlocked | -| ship_{ID} | The PlayerShips you have unlocked | -| ball_{ID} | The PlayerBalls you have unlocked | -| bird_{ID} | The PlayerBirdss you have unlocked | -| dart_{ID} | The PlayerDarts you have unlocked | -| robot_{ID} | The PlayerRobots you have unlocked | +| i_{ID} | The cubes you have unlocked | +| ship_{ID} | The ships you have unlocked | +| ball_{ID} | The balls you have unlocked | +| bird_{ID} | The birds you have unlocked | +| dart_{ID} | The waves you have unlocked | +| robot_{ID} | The robots you have unlocked | +| spider_{ID} | The spiders you have unlocked | +| swing_{ID} | The swings you have unlocked | +| jetpack_{ID} | The jetpacks you have unlocked | | special_{ID} | The PlayerStreaks you have unlocked| | c0_{ID} | The Colour1's you have unlocked | | c1_{ID} | The Colour2's you have unlocked | From 479419148f34baaf4e560a51bbf5bf4beaef698c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:13:09 +0300 Subject: [PATCH 133/389] Update gv.md --- docs/resources/client/gamesave/gv.md | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index ef0834697..6170809d6 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -98,26 +98,24 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0100| practiceDeathEffect| | gv_0101| forceSmoothFix | | gv_0102 | smoothFixInEditor | - - -### 2019 Leak GV's - -| Key | Value| -| :-- |:-----------| -| gv_0103 | Layer Locking | +| gv_0103 | Layer Locking (editor) | | gv_0104 | Record Order | | gv_0105 | StartPos Playback | | gv_0106 | Show Meltdown Promo | | gv_0108 | Auto Low Detail | | gv_0109 | Level Info Label | | gv_0110 | Fast Editor Preview | +| gv_0112 | Increase Scale Limit (editor) | | gv_0113 | Flip Platformer Controls | | gv_0115 | Show FPS | | gv_0116 | Use Custom FPS | | gv_0117 | Preview Particle | | gv_0118 | Preview Animation | | gv_0119 | Dont Save Level Data | - +| gv_0125 | Unlock Practice Music (editor) | +| gv_0152 | Hide Path (editor) | +| gv_0155 | Disable Shader Anti-Aliasing | +| gv_0159 | Audio Fix 01 | # Unlocked Game Variables @@ -151,12 +149,7 @@ Unlocked Game Variables (ugv) are used to check if ingame events have been compl | ugv_22 | YouTube Chest unlocked | | ugv_23 | FaceBook Chest unlocked | | ugv_24 | Twitter Chest unlocked | - -### 2019 Leak UGV's - -| Key | Value| -| :-- |:-----------| -| ugv_25 | FireBird GateKeeper | +| ugv_25 | FireBird GateKeeper (only present in the 2019 leak) | | ugv_26 | Twitch Chest Unlocked | | ugv_27 | Discord Chest Unlocked | @@ -174,6 +167,5 @@ Unlocked Game Variables (ugv) are used to check if ingame events have been compl | 0085 | **False** || | 0086 | **False** || | 0087 | **False** || -| 0112 | **True** | Used in `EditorUI` (**2019 Leak**) | | 0114 | **True** | Used in `PlayerObject` (**2019 Leak**) | | 0120 | **True** | Shown in RobTop's 2020 Twitch Streams | From a88119dd32f9bb69941f3d30c6fd382a309614ca Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:25:58 +0300 Subject: [PATCH 134/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 9659794ff..3876f9bc3 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -228,6 +228,11 @@ GS_21 Contains the reward data for the gauntlets you have completed | 0007 | YouTube Chest | | 0008 | Twitter Chest | | 0009 | Facebook Chest | +| 0010 | Twitch Chest | +| 0011 | Discord Chest | +| 0022 | Zolguroth Chest (repeatedly poke Shopkeeper and return to shop) | +| 0023 | Help Button Chest | +| 0024 | Reddit Chest | ## GS_22 From 43ef712bc9d859c162273167263ec28f0f92c565 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 19:37:02 +0300 Subject: [PATCH 135/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 3876f9bc3..55b5dbe8d 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -211,7 +211,7 @@ GS_21 Contains the reward data for the gauntlets you have completed | key | Description | |:----|:------| | `g_{GauntletID}` | the gauntlet number | -| `000{ChestID}` | ChestIDs for Reward Chests | +| `00{ChestID}` | ChestIDs for Reward Chests | | `k_{number}` | RewardItems -> the number corresponds to how many RewardItems the player will recieve | | `kCEK` | The [encoder keys](/resources/client/gamesave/kCEK?id=kcek-8-and-9-structure) | From 6a8b6ba893aa048ae714b25a57841e7bc5f12ed2 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:11:20 +0300 Subject: [PATCH 136/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 55b5dbe8d..a9bcf27cc 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -269,6 +269,13 @@ GS_25 Contains the reward data for every weekly demon you have completed | `k_{number}` | RewardItems -> the number corresponds to how many RewardItems the player will recieve | | `kCEK` | The [encoder keys](/resources/client/gamesave/kCEK?id=kcek-8-and-9-structure) | +## GS_26 + +GS_26 is your currently active path. The value is the same as the path key in GS_value. + +| Structure | +|:----------| +| `GS_26{path}` | ## GS_27 From b54d51a533392762bf4674850ca3ee1aaf2cb35f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:22:33 +0300 Subject: [PATCH 137/389] all 2.2 ugv's (i think) --- docs/resources/client/gamesave/gv.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 6170809d6..ac2af1ebf 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -149,9 +149,19 @@ Unlocked Game Variables (ugv) are used to check if ingame events have been compl | ugv_22 | YouTube Chest unlocked | | ugv_23 | FaceBook Chest unlocked | | ugv_24 | Twitter Chest unlocked | -| ugv_25 | FireBird GateKeeper (only present in the 2019 leak) | -| ugv_26 | Twitch Chest Unlocked | -| ugv_27 | Discord Chest Unlocked | +| ugv_25 | Explorers unlocked | +| ugv_26 | Twitch Chest unlocked | +| ugv_27 | Discord Chest unlocked | +| ugv_28 | Clicked The Tower | +| ugv_29 | Entered The Tower | +| ugv_30 | Accepted Geometry Dash's Terms of Service | +| ugv_31 | Zolguroth Encountered | +| ugv_32 | Reddit Chest unlocked | +| ugv_33 | The Tower Floor 1 completed | +| ugv_34 | Diamond Shop Unlocked | +| ugv_35 | Mechanic Unlocked | +| ugv_36 | Mechanic Dialogue | +| ugv_37 | Diamond Shopkeeper Dialogue | ### Undiscovered/unknown GV's From 760431c6831a56e46d994af8addb1354c0574325 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:26:24 +0300 Subject: [PATCH 138/389] the most essential change ever this documentation was utterly terrible before this change but finally those days are behind us --- docs/resources/client/gamesave/gv.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index ac2af1ebf..c347054c2 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -90,7 +90,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0092| onlineLevels folder number | | gv_0093| increaseLocalLevelsPerPage | | gv_0094| moreCommentsMode | -| gv_0095| flippyUselessMode (Just Dont)| +| gv_0095| flippyUselessMode ("Do Not..." (formerly "Just Don't"))| | gv_0096| switchWaveTrailColor| | gv_0097| enableLinkControls (editor) | | gv_0098| levelLeaderboardType | From b77c77938bfdcac6ab2a4228fb4d121aa4a3282a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:35:02 +0300 Subject: [PATCH 139/389] all gv's found by gd cologne, todo: find more --- docs/resources/client/gamesave/gv.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index c347054c2..635ed0fdb 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -113,8 +113,22 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0118 | Preview Animation | | gv_0119 | Dont Save Level Data | | gv_0125 | Unlock Practice Music (editor) | +| gv_0126 | Decimal Percentage | +| gv_0127 | Save Gauntlet Levels | +| gv_0129 | Disable Portal Labels | +| gv_0130 | Enable Orb Labels | +| gv_0134 | Hide Attempts | +| gv_0135 | Hide Attempts in Practice Mode | +| gv_0137 | Hide Particle Icons (editor) | +| gv_0140 | Disable Orb Scale | +| gv_0141 | Disable Trigger Orb Scale | +| gv_0142 | Reduce Audio Quality | +| gv_0149 | Show Clicks (editor) | +| gv_0150 | Auto Pause on Test (editor) | +| gv_0151 | Start Optimization (editor) | | gv_0152 | Hide Path (editor) | | gv_0155 | Disable Shader Anti-Aliasing | +| gv_0156 | Disable Paste State Groups (editor) | | gv_0159 | Audio Fix 01 | # Unlocked Game Variables From 32743ff3412b0f195b585e6a9dab4f923be60b4f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:42:02 +0300 Subject: [PATCH 140/389] kcek keys 10 and 12, now i actually have to add the doc for them --- docs/resources/client/gamesave/kCEK.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/kCEK.md b/docs/resources/client/gamesave/kCEK.md index 3e28efe51..36b848e9a 100644 --- a/docs/resources/client/gamesave/kCEK.md +++ b/docs/resources/client/gamesave/kCEK.md @@ -7,6 +7,8 @@ | 7 | [GJChallengeItem](resources/client/gamesave/quests.md) | Contains Keys that the game uses to show quests when offline | | 8 | [GJRewardItem](resources/client/gamesave/kCEK.md) | object that holds `GJRewardObject` | | 9 | [GJRewardObject](resources/client/gamesave/kCEK.md) | contains data for Rewards | +| 10 | GJLevelList | Contains Keys for level lists | +| 12 | GJSmartTemplate | Contains data for smart templates | ## kCEK 8 and 9 Structure @@ -50,4 +52,4 @@ | ID | type | |:---|:-----| | 1 | 4 hour chest | -| 2 | 24 hour chest | \ No newline at end of file +| 2 | 24 hour chest | From e20a70b8a52cd097c2dbee02f6ab3c1b4ba2e837 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:51:42 +0300 Subject: [PATCH 141/389] one singular gv --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 635ed0fdb..bf7b3b27f 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -130,6 +130,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0155 | Disable Shader Anti-Aliasing | | gv_0156 | Disable Paste State Groups (editor) | | gv_0159 | Audio Fix 01 | +| gv_0169 | Small Warp Buttons (editor) | # Unlocked Game Variables From 79cfbcbe8d9e0c54cea2769214581989b00b398c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:54:41 +0300 Subject: [PATCH 142/389] Update GLM.md --- docs/resources/client/gamesave/GLM.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/resources/client/gamesave/GLM.md b/docs/resources/client/gamesave/GLM.md index 7dbaee00f..b804b6814 100644 --- a/docs/resources/client/gamesave/GLM.md +++ b/docs/resources/client/gamesave/GLM.md @@ -183,3 +183,13 @@ GLM_19 is a dictionary of the folders for local levels | Key | Value | |:----|:------| | `{folder ID}` | `{Folder Name}` | + +## GLM_20 + +GLM_20 is a dictionary of all the editor smart templates you have saved + +| Key | Value | +|:----|:-------------------| +| 1 | Smart Template ID | +| 2 | Name | +| 3 | [Template Data](/resources/client/gamesave/template.md)| From 5cdb22fcee40620c86e2eb32d1231c926c77a0a8 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:55:12 +0300 Subject: [PATCH 143/389] Update kCEK.md --- docs/resources/client/gamesave/kCEK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/kCEK.md b/docs/resources/client/gamesave/kCEK.md index 36b848e9a..6e7083210 100644 --- a/docs/resources/client/gamesave/kCEK.md +++ b/docs/resources/client/gamesave/kCEK.md @@ -8,7 +8,7 @@ | 8 | [GJRewardItem](resources/client/gamesave/kCEK.md) | object that holds `GJRewardObject` | | 9 | [GJRewardObject](resources/client/gamesave/kCEK.md) | contains data for Rewards | | 10 | GJLevelList | Contains Keys for level lists | -| 12 | GJSmartTemplate | Contains data for smart templates | +| 12 | [GJSmartTemplate](resources/client/gamesave/template.md) | Contains data for smart templates | ## kCEK 8 and 9 Structure From 4e8e9d5c63a4fe7ebc584a1c53e985bb2ab61690 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 22:11:50 +0300 Subject: [PATCH 144/389] Update kCEK.md --- docs/resources/client/gamesave/kCEK.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/gamesave/kCEK.md b/docs/resources/client/gamesave/kCEK.md index 6e7083210..5d25573d2 100644 --- a/docs/resources/client/gamesave/kCEK.md +++ b/docs/resources/client/gamesave/kCEK.md @@ -7,8 +7,8 @@ | 7 | [GJChallengeItem](resources/client/gamesave/quests.md) | Contains Keys that the game uses to show quests when offline | | 8 | [GJRewardItem](resources/client/gamesave/kCEK.md) | object that holds `GJRewardObject` | | 9 | [GJRewardObject](resources/client/gamesave/kCEK.md) | contains data for Rewards | -| 10 | GJLevelList | Contains Keys for level lists | -| 12 | [GJSmartTemplate](resources/client/gamesave/template.md) | Contains data for smart templates | +| 10 | [GJSmartTemplate](resources/client/gamesave/template.md) | Contains data about smart template | +| 11 | [GJSmartTemplate](resources/client/gamesave/template.md) | Contains data for presets in smart template | ## kCEK 8 and 9 Structure From fbd2ea6a17723d1ea91a4197b91d4dff7199ca29 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 22:18:31 +0300 Subject: [PATCH 145/389] one singular gv part 2 (enable quick keys) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index bf7b3b27f..2c22bb4a6 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -130,6 +130,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0155 | Disable Shader Anti-Aliasing | | gv_0156 | Disable Paste State Groups (editor) | | gv_0159 | Audio Fix 01 | +| gv_0163 | Enable Quick Keys | | gv_0169 | Small Warp Buttons (editor) | # Unlocked Game Variables From 78f41a6c114e974b53d9da94e7f013f650f1ce08 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 22:20:43 +0300 Subject: [PATCH 146/389] one singular gv part 3 (lock cursor) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 2c22bb4a6..8d19436dd 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -115,6 +115,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0125 | Unlock Practice Music (editor) | | gv_0126 | Decimal Percentage | | gv_0127 | Save Gauntlet Levels | +| gv_0128 | Lock Cursor In-Game | | gv_0129 | Disable Portal Labels | | gv_0130 | Enable Orb Labels | | gv_0134 | Hide Attempts | From 0a26c45d6cea5659a665235dbe60de56e19176ea Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 22:26:55 +0300 Subject: [PATCH 147/389] one singular gv part 4 (fast menu) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 8d19436dd..5f35b8c80 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -132,6 +132,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0156 | Disable Paste State Groups (editor) | | gv_0159 | Audio Fix 01 | | gv_0163 | Enable Quick Keys | +| gv_0168 | Fast Menu | | gv_0169 | Small Warp Buttons (editor) | # Unlocked Game Variables From d701ed39ca57ef1dc850aafd41d3bc73af3b0342 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 22:30:33 +0300 Subject: [PATCH 148/389] one singular gv part 5 (hide playtest text) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 5f35b8c80..18c0cbbaf 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -134,6 +134,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0163 | Enable Quick Keys | | gv_0168 | Fast Menu | | gv_0169 | Small Warp Buttons (editor) | +| gv_0174 | Hide Playtest Text | # Unlocked Game Variables From 58e2400ad3e252c81440ace6357c3c6013c5d315 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Thu, 11 Jul 2024 22:33:07 +0300 Subject: [PATCH 149/389] one singular gv part 6 (show hitboxes) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 18c0cbbaf..5a404a078 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -132,6 +132,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0156 | Disable Paste State Groups (editor) | | gv_0159 | Audio Fix 01 | | gv_0163 | Enable Quick Keys | +| gv_0166 | Show Hitboxes (in practice mode) | | gv_0168 | Fast Menu | | gv_0169 | Small Warp Buttons (editor) | | gv_0174 | Hide Playtest Text | From b6644b8c5e3595988f4358a7094b5a699bd814db Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 00:18:06 +0300 Subject: [PATCH 150/389] two gv's (hide practice buttons which is 71 surprisingly and disable player hitbox) --- docs/resources/client/gamesave/gv.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 5a404a078..c60469277 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -71,6 +71,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0068 | quickCheckpointMode | | gv_0069 | commentMode | | gv_0070 | showedUnlistedLevelMessage | +| gv_0071 | Hide Practice Buttons | | gv_0072 | disableGravityEffect | | gv_0073| newCompletedFilter| | gv_0074| showRestartButton| @@ -135,6 +136,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0166 | Show Hitboxes (in practice mode) | | gv_0168 | Fast Menu | | gv_0169 | Small Warp Buttons (editor) | +| gv_0171 | Disable Player Hitbox | | gv_0174 | Hide Playtest Text | # Unlocked Game Variables From 302fcde71bf3530a265cbbb9c9f0761e4b992531 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 00:18:23 +0300 Subject: [PATCH 151/389] forgot to remove 71 from unknown gv's --- docs/resources/client/gamesave/gv.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index c60469277..a3532f47f 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -194,7 +194,6 @@ Unlocked Game Variables (ugv) are used to check if ingame events have been compl | 0021 | **False** | | | 0035 | **False** | | | 0054 | **False** || -| 0071 | **False** || | 0080 | **False** || | 0085 | **False** || | 0086 | **False** || From cc7ef7b5973558866f0e5b337236900ae09ff296 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 00:30:57 +0300 Subject: [PATCH 152/389] one singular gv part 7 (menu music) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index a3532f47f..f1b4eb0a2 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -113,6 +113,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0117 | Preview Particle | | gv_0118 | Preview Animation | | gv_0119 | Dont Save Level Data | +| gv_0122 | Disable Menu Music | | gv_0125 | Unlock Practice Music (editor) | | gv_0126 | Decimal Percentage | | gv_0127 | Save Gauntlet Levels | From 38d1ee30aa6a61bf949b35724f152d678cee7aea Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 00:35:28 +0300 Subject: [PATCH 153/389] Update gv.md --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index f1b4eb0a2..dbac87bdf 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -137,6 +137,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0166 | Show Hitboxes (in practice mode) | | gv_0168 | Fast Menu | | gv_0169 | Small Warp Buttons (editor) | +| gv_0170 | Borderless Fullscreen | | gv_0171 | Disable Player Hitbox | | gv_0174 | Hide Playtest Text | From a21c5db45365505ff2efea175ab0d463f4aec964 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 00:50:07 +0300 Subject: [PATCH 154/389] Update GLM.md --- docs/resources/client/gamesave/GLM.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/resources/client/gamesave/GLM.md b/docs/resources/client/gamesave/GLM.md index b804b6814..84a75df3e 100644 --- a/docs/resources/client/gamesave/GLM.md +++ b/docs/resources/client/gamesave/GLM.md @@ -188,8 +188,6 @@ GLM_19 is a dictionary of the folders for local levels GLM_20 is a dictionary of all the editor smart templates you have saved -| Key | Value | -|:----|:-------------------| -| 1 | Smart Template ID | -| 2 | Name | -| 3 | [Template Data](/resources/client/gamesave/template.md)| +| Key | description | +|:----|:------------| +| kCEK 10 | [level data](resources/client/gamesave/template.md) | From d1e937de7ae5422699729c09a8f17a0e657efdc6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 01:04:50 +0300 Subject: [PATCH 155/389] Create template.md --- docs/resources/client/gamesave/template.md | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/resources/client/gamesave/template.md diff --git a/docs/resources/client/gamesave/template.md b/docs/resources/client/gamesave/template.md new file mode 100644 index 000000000..0676cac35 --- /dev/null +++ b/docs/resources/client/gamesave/template.md @@ -0,0 +1,47 @@ +# Smart Templates (kCEK 10 & 11) + +Smart Templates are user-made templates used for the Auto Build feature. They are stored in GLM_20. + +## kCEK 10 + +| Key | Value | Type | +|:----|:-------------------|:----------| +| 1 | Smart Template ID | integer | +| 2 | Name | string | +| 3 | Template Variations| dict | + +## kCEK 11 + +kCEK 11's are stored in key 3 of kCEK 10 in the following format: + +``` +100010000 + + _isArr + + k_0 + + kCEK11 + 11,1,2,0,3,-90;1,2895,2,0,3,-90,34,1; + + k_1 + + kCEK11 + 1... + + +``` +The keys of the dictionary represent the exact type of template variation. It's always a binary number with 9 digits, where the first digit is always 1. Other digits indicate: + +| Digit | Position | +|:------|:-------------| +| 2 | Top Middle | +| 3 | Bottom Middle| +| 4 | Center Left | +| 5 | Center Right | +| 6 | Top Left | +| 7 | Top Right | +| 8 | Bottom Left | +| 9 | Bottom Right | + +kCEK 11 key 1 is the object string of the template variation. The object string is **unencoded** and stored raw. The center point is at X: 0, Y: -90. From c22c278d70ff3a2937319e3d57b06dc0afc8e1c3 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 01:05:24 +0300 Subject: [PATCH 156/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index b563d8f16..92a8a6311 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -33,6 +33,7 @@ - [Achievements](/resources/client/gamesave/achievement.md) - [Quests](/resources/client/gamesave/quests.md) - [Platformer UI](resources/client/gamesave/dpad.md) + - [Smart Templates](resources/client/gamesave/template.md) - [Level](/resources/client/level.md) - [Capacity String](/resources/client/level-components/capacity-string.md) From 2ea830591c38a134cb0e790dba8945b52757d13d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 01:31:32 +0300 Subject: [PATCH 157/389] somehow i only added 2.206 downloadGJLevel now :skull: --- docs/endpoints/levels/downloadGJLevel22.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/levels/downloadGJLevel22.md b/docs/endpoints/levels/downloadGJLevel22.md index 3a339881c..57240bcab 100644 --- a/docs/endpoints/levels/downloadGJLevel22.md +++ b/docs/endpoints/levels/downloadGJLevel22.md @@ -12,9 +12,9 @@ Downloads a user level and info so it can be played. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -36,7 +36,16 @@ Downloads a user level and info so it can be played. ## Response -Returns a [level object](/resources/server/level.md). +Returns a [level object](/resources/server/level.md) along with 2 hashes. All of this is separated by `#`. If binary version is 42 or higher, returns data in the following format: +``` +{level}#{hash1}#{hash2}#{unk}#{songMetadata}#{extraArtists} +``` +where: +- `{level}` is the level object +- `{hash1}` and `{hash2}` are integrity hashes the GD client uses to validate the response +- `{unk}` is always an empty string. It's unknown if this segment even exists or if the response is just split with 2 `#` characters. +- `{songMetadata}` is the metadata of all the [songs](/resources/server/song.md) used in the level. +- `{extraArtists}` is a key-value pair map of extra artists in the songs. It uses the following format: `{id},{name},{id},{name}...` ## Example From f345d3cf8297434d704256eda1f5e2eb7988ca0d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 01:48:10 +0300 Subject: [PATCH 158/389] Update gv.md --- docs/resources/client/gamesave/gv.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index dbac87bdf..966f97f4e 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -46,7 +46,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0042 | increaseMaxLevels | | gv_0043 | effectLinesEnabled (editor) | | gv_0044 | drawTriggerBoxes (editor) | -| gv_0045 | debugDraw (editor) | +| gv_0045 | Show Hitboxes (editor) | | gv_0046 | hideUIOnTest (editor) | | gv_0047 | showedProfileText | | gv_0048 | viewedOwnProfile | From f43a8ff46742b603667c1ba79cf6e65e1397026c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 01:50:43 +0300 Subject: [PATCH 159/389] one singular gv part 8 (hide invisible) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 966f97f4e..f8126d046 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -113,6 +113,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0117 | Preview Particle | | gv_0118 | Preview Animation | | gv_0119 | Dont Save Level Data | +| gv_0121 | Hide Invisible (editor) | | gv_0122 | Disable Menu Music | | gv_0125 | Unlock Practice Music (editor) | | gv_0126 | Decimal Percentage | From 5303d5693d2007d62e08e572307c36e73ded6039 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 01:53:18 +0300 Subject: [PATCH 160/389] one singular gv part 9 (preview shaders) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index f8126d046..cfd768743 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -133,6 +133,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0152 | Hide Path (editor) | | gv_0155 | Disable Shader Anti-Aliasing | | gv_0156 | Disable Paste State Groups (editor) | +| gv_0158 | Preview Shaders (editor) | | gv_0159 | Audio Fix 01 | | gv_0163 | Enable Quick Keys | | gv_0166 | Show Hitboxes (in practice mode) | From 10bbac15f6702d263dea85473dacfa9a135960e0 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 01:57:12 +0300 Subject: [PATCH 161/389] template refactor (thx yang on gdp) --- docs/resources/client/gamesave/template.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/resources/client/gamesave/template.md b/docs/resources/client/gamesave/template.md index 0676cac35..22285c10c 100644 --- a/docs/resources/client/gamesave/template.md +++ b/docs/resources/client/gamesave/template.md @@ -1,6 +1,6 @@ # Smart Templates (kCEK 10 & 11) -Smart Templates are user-made templates used for the Auto Build feature. They are stored in GLM_20. +Smart Templates are user-made templates used for the Auto Build feature. They are stored in [GLM_20](/resources/client/gamesave/GLM.md#GLM_20). ## kCEK 10 @@ -31,9 +31,12 @@ kCEK 11's are stored in key 3 of kCEK 10 in the following format: ``` -The keys of the dictionary represent the exact type of template variation. It's always a binary number with 9 digits, where the first digit is always 1. Other digits indicate: -| Digit | Position | +kCEK 11 key 1 is the object string of the template variation. The object string is **unencoded** and stored raw. The center point is at X: 0, Y: -90. + +The keys of the dictionary are 9-bit bitfields (binary numbers) representing the exact type of template variation. The first bit is reserved and is always set to `1`. Other bits represent: + +| Bit | Position | |:------|:-------------| | 2 | Top Middle | | 3 | Bottom Middle| @@ -43,5 +46,3 @@ The keys of the dictionary represent the exact type of template variation. It's | 7 | Top Right | | 8 | Bottom Left | | 9 | Bottom Right | - -kCEK 11 key 1 is the object string of the template variation. The object string is **unencoded** and stored raw. The center point is at X: 0, Y: -90. From 0338ab230c7af4daec94e5d4260932431e965163 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:47:24 +0300 Subject: [PATCH 162/389] GS_28 --- docs/resources/client/gamesave/GS_Value.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index a9bcf27cc..f9d4de058 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -285,3 +285,13 @@ GS_27 contains the List Rewards you have acquired |:----------| |`lr_{listID}{diamonds}`| +## GS_28 + +GS_28 contains your enabled items (animations). All of them are booleans and set to 1 by default. + +| Key | Description | +|:------|:---------------------| +| 17_12 | Unknown, always 1 | +| 18_12 | Slow Robot Walk | +| 19_12 | Fast Robot Run | +| 20_12 | Spider Naruto Run | From 5a9d01e3d8bef15a09953d75263ea52480dfd09b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:48:14 +0300 Subject: [PATCH 163/389] GS_29 (idk) --- docs/resources/client/gamesave/GS_Value.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index f9d4de058..e7cfa43b6 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -295,3 +295,7 @@ GS_28 contains your enabled items (animations). All of them are booleans and set | 18_12 | Slow Robot Walk | | 19_12 | Fast Robot Run | | 20_12 | Spider Naruto Run | + +## GS_29 + +This GS is unknown. It's also the only non-dict GS, instead being a boolean. From d04c6ef5ddaf533ba092d8c42972ccc30aa339a5 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:49:20 +0300 Subject: [PATCH 164/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index e7cfa43b6..76cc70500 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -287,7 +287,7 @@ GS_27 contains the List Rewards you have acquired ## GS_28 -GS_28 contains your enabled items (animations). All of them are booleans and set to 1 by default. +GS_28 contains your enabled items (animations). All of them are strings (although they act as booleans) and are set to 1 by default. | Key | Description | |:------|:---------------------| From a8d5d56167fc035fc511aa02ed30a68d72513a07 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:51:12 +0300 Subject: [PATCH 165/389] Update gamesave.md --- docs/resources/client/gamesave.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 153a523db..f4acd7d9f 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -111,7 +111,10 @@ Your CCGameManager.dat File contains a lot of information regarding your account | [GS_23](/resources/client/gamesave/GS_Value?id=gs_23)| Gauntlet Level Progress `{levelID}{percentage}` | | [GS_24](/resources/client/gamesave/GS_Value?id=gs_24)| Daily/Weekly Percentage | | [GS_25](/resources/client/gamesave/GS_Value#GS_25)| All the rewards from completed weekly Demons | +| [GS_26](/resources/client/gamesave/GS_Value#GS_26)| Your active path | | [GS_27](/resources/client/gamesave/GS_Value#GS_27)| All the list rewards | +| [GS_28](/resources/client/gamesave/GS_Value#GS_28)| Your enabled items (animations) | +| [GS_29](/resources/client/gamesave/GS_Value#GS_29)| Unknown (boolean) | ### GJA From fb1bbf7b26ee52d0d93fbea72cea5961b1f0b3d2 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:52:35 +0300 Subject: [PATCH 166/389] GLM_20 also the otther GLM's were linking to the wrong level.md --- docs/resources/client/gamesave.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index f4acd7d9f..0ccdbd636 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -64,24 +64,25 @@ Your CCGameManager.dat File contains a lot of information regarding your account | Key | Type | description | | :-------| :--- | :-----------| -| [GLM_01](/resources/client/gamesave/GLM.md#GLM_01) | [Level](/resources/server/level.md)| All Official Levels you have progress on are stored here | -| [GLM_02](/resources/client/gamesave/GLM.md#GLM_02) | [level](/resources/server/level.md) | Uploaded levels - before the account System | -| [GLM_03](/resources/client/gamesave/GLM.md#GLM_03) | [Level](/resources/server/level.md)| online levels played| +| [GLM_01](/resources/client/gamesave/GLM.md#GLM_01) | [Level](/resources/client/level.md)| All Official Levels you have progress on are stored here | +| [GLM_02](/resources/client/gamesave/GLM.md#GLM_02) | [level](/resources/client/level.md) | Uploaded levels - before the account System | +| [GLM_03](/resources/client/gamesave/GLM.md#GLM_03) | [Level](/resources/client/level.md)| online levels played| | [GLM_04](/resources/client/gamesave/GLM.md#GLM_04) | rating| Shows what levels you have rated. was removed after 1.9 | | [GLM_06](/resources/client/gamesave/GLM.md#GLM_06) | AccountIDs| The AccountIDs of all creators you follow | | [GLM_07](/resources/client/gamesave/GLM.md#GLM_07) | levelID| Levels played in last session | | [GLM_08](/resources/client/gamesave/GLM.md#GLM_08) | filters | Search Filters States | | [GLM_09](/resources/client/gamesave/GLM.md#GLM_09) | filters | Search Filters for Online Levels | -| [GLM_10](/resources/client/gamesave/GLM.md#GLM_10) | [Level](/resources/server/level.md)| Completed dailies | +| [GLM_10](/resources/client/gamesave/GLM.md#GLM_10) | [Level](/resources/client/level.md)| Completed dailies | | [GLM_11](/resources/client/gamesave/GLM.md#GLM_11) | Integer| Current Daily ID | | [GLM_12](/resources/client/gamesave/GLM.md#GLM_12) | likes | Something Related to likes | | [GLM_13](/resources/client/gamesave/GLM.md#GLM_13) | levelID | All levels you submitted a rating on | | [GLM_14](/resources/client/gamesave/GLM.md#GLM_14) | reportedLevels| A dictionary of all levels you have reported| | [GLM_15](/resources/client/gamesave/GLM.md#GLM_15) | levelID | all Demon levels you have submitted a rating for | -| [GLM_16](/resources/client/gamesave/GLM.md#GLM_16) | [Level](/resources/server/level.md)| All the levels found in the Gauntlets that you have progress on are stored in here | +| [GLM_16](/resources/client/gamesave/GLM.md#GLM_16) | [Level](/resources/client/level.md)| All the levels found in the Gauntlets that you have progress on are stored in here | | [GLM_17](/resources/client/gamesave/GLM.md#GLM_17) | integer| Current Weekly ID | | [GLM_18](/resources/client/gamesave/GLM.md#GLM_18) | Folder | The Folder Names for saved levels | | [GLM_19](/resources/client/gamesave/GLM.md#GLM_19) | Folder | The Folder names for Local Levels | +| [GLM_20](/resources/client/gamesave/GLM.md#GLM_20) | [Templates](/resources/client/gamesave/templaet.md) | Your Smart Templates | ### GS From 525187be3e55a1adbbab46e51cc82e061156963f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:52:50 +0300 Subject: [PATCH 167/389] typo --- docs/resources/client/gamesave.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 0ccdbd636..7ef8ae10d 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -82,7 +82,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account | [GLM_17](/resources/client/gamesave/GLM.md#GLM_17) | integer| Current Weekly ID | | [GLM_18](/resources/client/gamesave/GLM.md#GLM_18) | Folder | The Folder Names for saved levels | | [GLM_19](/resources/client/gamesave/GLM.md#GLM_19) | Folder | The Folder names for Local Levels | -| [GLM_20](/resources/client/gamesave/GLM.md#GLM_20) | [Templates](/resources/client/gamesave/templaet.md) | Your Smart Templates | +| [GLM_20](/resources/client/gamesave/GLM.md#GLM_20) | [Templates](/resources/client/gamesave/template.md) | Your Smart Templates | ### GS From 3bd1fb37f38feb9c5d6f4ae60ff8fd73634141d0 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 14:40:04 +0300 Subject: [PATCH 168/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index 0faa1d626..0c3c7b476 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -6,7 +6,7 @@ Gets the rewards from the chests. ### Required Parameters -**udid** - A unique identifier for the user's device, can be replaced with anything +**udid** - A unique identifier for the user's device. This IS validated so you'll get a -1 if this is invalid **secret** - Wmfd2893gb7 @@ -14,15 +14,15 @@ Gets the rewards from the chests. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 **accountID** - Account ID of the user -**gjp** - The user's [GJP](/topics/encryption/gjp.md) +**gjp2** - The user's [GJP2](/topics/encryption/gjp.md) **uuid** - Seemingly a random number also used for identifying someone @@ -44,7 +44,7 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Small chest's rewards in a comma separated list - Orbs - Diamonds - - Shards (0 is Fire, 1 is Ice, 2 is Poison, 3 is Shadow, and 4 is Lava) + - Shards (0 is Fire, 1 is Ice, 2 is Poison, 3 is Shadow, 4 is Lava, 10 is Earth) (TODO add more shards) - Key (If it's not 0, give a key) - Large chest time remaining - Large chest's rewards in a comma separated list From 78c345e92aac11463d01f165ab3c7f884c62104e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:02:58 +0300 Subject: [PATCH 169/389] I was wrong :+1: --- docs/endpoints/rewards/getGJRewards.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index 0c3c7b476..da971b72e 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -6,7 +6,7 @@ Gets the rewards from the chests. ### Required Parameters -**udid** - A unique identifier for the user's device. This IS validated so you'll get a -1 if this is invalid +**udid** - A unique identifier for the user's device. You can put anything here **secret** - Wmfd2893gb7 From 3f1d0b89ae4a2e252b3940d001ce147aeab1b232 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:05:38 +0300 Subject: [PATCH 170/389] Update getSaveData.md --- docs/endpoints/misc/getSaveData.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/misc/getSaveData.md b/docs/endpoints/misc/getSaveData.md index 55a3deebd..68992c0e9 100644 --- a/docs/endpoints/misc/getSaveData.md +++ b/docs/endpoints/misc/getSaveData.md @@ -10,9 +10,9 @@ Unknown ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -42,4 +42,4 @@ print(req.text) UmysuWpDzKaglTFZR65eeJxEnVei5DoOQzd0P2xl7X9jzQPA1ZOex9dlK1CMIPm2_r5jnL_597Z29xntb9Vlf29v-7tcbf5dLsd7zvk7XD7rzP63ddlX63_vo1fMOa5-1859n_03uKxH5vDbev2fqVe8e-0x8uXR-_LlrOFMvfjdp97hl627dy7b80x_oj9ttlVDO-M-47xcnfd5nsWf37Xa24-f5AvjN7V3_HXN5-z3zeWt2xptf56ahu-ufv2yGsHcZ3mWoz3t1cM1hzGaHn536-edPPzM-rhGfu5aI_OtNajRefVmZwx-2bP3eTT3d549M8t7dp_1ifvW43v-tfpC_XzUMtUb6tl3ZUH6O98agl72zvZkpUerb18t5HPedpp_N976Hz_w3H6z3fveN6_ojQ1nPO-9o_ZArxjPu2em_9x9m99cDz_9avBPZ_6-bKsW_O_VTGuJv2fbs9jvIrN3j62XvTW3WmV-9tRKvN-cavZP42e1kLVwJojxzpGZvmOde59aoDbq0Tm-oZ07dx4es32XczdT2iiqmMf7_NbK5Xe1G3OHhsc87fWJGGO9W4Mrwu3nud875s0xqFOyV9a7jZtX9HVqZn54v4N7_Kd2tNZDPxy1l_3ROCDC4QP23FWnMcM446ycsLft0bNpfdSlTuOZRV56G_RWZ8Lf7vtZ27fbWe2EMnY9rg8WGY33-lyMXUdoehh1Glv77hbd69Nz1uE3ddY-sXRa0NrX5zsMNb0rsn_HM8b0asyabPOJHqtWqekb8_S9PPp5e43D31gc6frZ5oHXbGfesetX2uvasztWnp21zh5E_X779BbTOUM08sw6u-d7tvf5ZiWKIF8PuIa2ThboGdvEV0xhPkffu099-Ojhycl6s7CzWFOtCtMes0gur1vPOR9za08tNNN72-3wOS7Pe9azPzrbtd3-4Hh-m1Mb9f6GN4oBevFHkegy3dYE4BjanV4blR-OYg8rBDP3Hh-F1vaNvK9IuKjOL9n18q3lL65U_9b7VhH2zhyLY9ZT3oDTz_IOzrffne2upYap-nqd_pH8LKb5mkZrcW7PDOaEw-olY59mvl1Evl5T0qyJb5_HYuXn-sDWeo11M-biRitMoTiPqaeGUNSmPVxFoo83fBXLm82Xc57Rv0nB0U11o8FstYy3KLdZ5tTBDOt6R00pcmDUIy2rLwptGk-JgiaqWxw2n421dltet6LV3V-Pslj_44VYZ-3HR38Vy1yZ5y7CDn8ZTzthwWu-iFwdqVruzbLWKhXP3DWGU2Q26-B7CJc1W6bDkkV-7buKefhd-xR7ZftPf_YRn6lPsiLcq5PbJJ6KpIrWGStHbUrKL32dVYZFFw3UX8eG17DctTynnq2rdvZ9nhzK2otuMqj5vmbcT7GkGR5eZ7wEhZby6SV_YAwlXOb7-CjvWdLFUrTI-YTt7aKjsJNV293Np0qMtOWt33Xo-3ci68Q172EJ7SfUU0y25LYYYG1QcR-9rVgBR0IEoVNtvjCLjXQJzF1U13LCSs2owxLl5Z5PHUDYvZDErcmVUpOH5__B1Vo9O9T6PmYAJZH7c8TgS-q9s47x0KrdohtdloQ44TJIwfua1uptJfs9vSIa6wb1tnuLKCzY1huZWyTRzNTZgD3EDZ86nmySv1HiM9NbddKunnhL5l4rWaVMTTQGCbASy8WqNJEjOZiplmx5vDunVIZX524he7bpvH5WwjgPn_3kvN6n6NCTuo9Uy1yiaviSE5vLIqz2m9Tju0V4t3GeS8QUp-B4lIwtSQeFlVy5EFhRPxKtZtw18FvUFIGMHivJU2SAiKnPduQ1Z3KVfvBKaawVqHdBJevU7j2w5NJ-933Nz04Jg24qO_O2bz032pPpF83tiKCK4kqMmuJ2MYpzPurc0rrqzOy-2d4xJbXrar4l0h-IYsJcDqOr7xT1aPGely2VhH1qwqUDaaKl3Ozi61zWo6WEQ6HF3Up5M9crihK3vBzlq6nU2oi3SESsZ0YulFQtVmRRWootxCy63u3j7iWtS8573pBAC2mUWC1e_12XfqOVv0Vcda2Z310D_Z6YiEtYVH2k-DOMqRj5GjmLpR3cN0pFEbyVn9JiSzRbhPTS8t_cRePxcS_y84jf2ryc4Bf29H5KYZHkNVmX3jE5n4dF6zenD13CDLWU4lJZLUTrugwEva3kR_MS1j966SY6lEVpRVc-qqUbdLPAy9HwNIqGWG4fjPXUpL2aJRi2BEcZI7U1Zo23OFH3wa9LlDW97dwWOY0SL3LWID5hemEMOu31strIlveW_PfP6rT1bYm1i-NPRGzt1bN8kMuMKDpFL68Xldj8-NtdZQ56NLU-yC4t-2G_9V2U--gVRVYlBEL_A4V_aQzP_yeKmfUc9YlF4yf6Lo7yewKTR0_0kjyZ3QvH9JQmvCq7L81EK9Eb5-R4JdbNqtWG9J5L7EgeqH92bAaReY3tG2aR_Fm-HLUfj5-tB27ze1ftqJhXf7Afry832-iR1amOfVUqzLO_ARdRjCeirCxnk2DRPXbkNHdm7EvCslTi_KwWMCYF85gx4oqSig9omG8tRDfRnFLuGkRTx6T4fvPYi8gtQurRjiLIyyCPdUJ2xaP6yu06oraC6tPFZl8vRVlarz_HsX7ePNzQnv2VUs9P9LVXvMSrObBn8xE2TKxklAqW-b-rllE6cqk8y7YxXy57vh44JW_LEsli1veGKb52_z4nB6zUPJ-kVepeP54pngfvnVT1_l3WpDWcukS_7LocNzq2rqdNNRSZ4q7XRLH3jEbyMDSd8l5SHYFcqnN9DXnEC94pXbuYS5m4w4cK6RT75hRRrbCUYv5TIgFrv0Yv7lJy_sTwv01G8vCyv0_LsqNBLa8ULgeTYB3AR1ZDrUhxohER3UesuzoNzUtd-gM6lKb2lqm7fxSKANZunnp0f3watVIrVcQxLVDeLhs4R7FUv-0Fro0dO8PBExGV6EH4iFjLzDHd4njon304eLNNuuJJ28uDGHxMPC_UOnIqS1Xa_nCf83f-yoCJdlESroXesUFR1mojcFeFzaxuJxiOADxFHm7vXvX6FXLbl6XLPUN7UQrwiBAqFrHvyAN7SAiVDdbgLF7Ie01x0oB8tIoVlEDLVhURPeFCxQoaq1DDR1DqVxxN6wql3hUh5si-thb1BvSBxzv4yonmJ8pcHTlDJXeevKNoYFsovKV4fD6TdeNxQ3qifIg0Nta6dYpzureC90IPJsTidNs_m_Cpz4-Gx8R-mTpv8SRhwL_Hp2yWom5VqH5XjDxDK2Z6s1lFBj0yuIwSmzqQzs52FUHtG1lRe9jMb4tdr_NddkSwl2JvvDV6cx0SM_LartoaWy8lV1Z2vMGFwgBxXH2LdTknfqLOt5wOowbcPmZZj36HoBSs-T55dmNBT_-sOKcUE1xbMpRrMDUg_V03X7-gZAJ-K5vMH5_vcKl1v6_V__NBhGNFj6rr4tPfRrdukwQdtEjW5FjK7jYDLJUCZlmHtTam-cuQ7bIB3rnX4laoWfQ3g6gl8dBe_DsnMqHkptl8wxCWFsSz5_2WpzavZyGwpx6PvUi6h5YWqoeHXlwrRFMW5opuVBrM-gykiULjz5W8aubzZcg-NuHR32trPIjFyvuBUsC9rF1mN187WOoRCaUasLEaI5rdN_RSxGwqytaYksAb4-fZZtgsaphTnZlQWjHFEsYoR_UGlCq_4aD2xgookrII32iqM6fynZLFZ9UhsAOnjngbvWc4ZcRat8QXf_tHEfW2aD51RlZ7Qkkbw1RTKtVoebs6ur4fQA3_DmvN49i_C-28tpQ74nw_v6XA2DK3Y65aisd-UUhtFC9bYUCtNlyeWr5SmuiTb9dDJkbM4N4--kC39ZgH1OIdQS3_bcOaw9oY3oYwe6gtHB5d1MZ0LcZ7bejip8U3qbftE89PXY4boSZOsXOWynSd3bbyi78NQ6TEyenNf69XFF1dH7vX1PZgRLXPkVbKdR_RCdgIH7vN4dZilUVS-lqR5ipe3m3ml91aZtq3kbX9LcNBV49sqIdvaPeR78YKWLdViJOshJaffWsfL2eiprVwlZoplV0Xkd_xFXsdUHG8Zp3ADGYjvhMzpTIQipV7CkWYxRtsa-56gXWKOjonpCb949vNAwMXr6vltaVecqPkzbu_Y4tzX9ZNie7tHUSgn--s4jv6uFqpauxKrWKtnzWUjvWXHYRXdetcKP3vR9rrqWlij5W8beISZe6_j-0Uwj2r2eQthYoxlNKFvRd-y3qeiNtSGMa3QXAtueInJGv_aCshXGZlnL1ocKxfGXxFyXkFxkZ_fZwvLDMfObj42W1CJn64NLaJ3aA1eeEDltJjJbLRpU37ZXVS4bLbl79F6-x8dqZjL7CfcNuRZyfGgC9LZ7ALty6LnUFFJVNGj1TtePqtIpYOMx2-QEV6FDVUgEHhjRJQZVLfTIxQVc5oqXLhIKV-1G54i88pCWpXeem5LZRRQoeAk5UONHu-W5ZPC2tm-adZWr_8V4s30CRG7uJA0ci5u3yWhv7gu-g4w-_FaZafvRJLkhkPklDBvYN_SvZJzRfj2ltV7MO-HI5lD_kOVjqSuJ4g_tX8RB0NP1zS5vU36rLJs1pir1i3j-Mo2gwXLNX3SeCtlNjxDqueRZz7xmzBV_BmsaUv6hUlz2Cqmhwb47t4zMzDCNUcH72nobN-qj0iOgy4RJePbB2XJePqcHIUmCwlBsXPlNG0qBpCnUCvOpbiMauprR_Nvs6u4N52wK_eFu_sQbBHhS_Wes20ixwwAupwlip1PnWsBoYGifG58CtqGYqKiz1YNcVz_23AA9t4vVsKiVrzLOXPvkmUwkfaQA1ljs8cv-fYmQ7JjSi3Hf9SxlsMaPDaovR32pC7JRS2ot8LYSH3AmGRu7MI8_00u1LJiAnJcVuqurWRF3O4J75ZP_-04AfF98QLsD7FrhP2WGHZZWH5WQY7jofwoI2EVa1PBGHBvnn2YAuG_8ta1XosuGsWjw2wvOrzcxkUS34Zmk9pnaFhjrvEcbW6aIQ5miWwohyi_TSWbHVQAvP_AbEHDEcNIUHrZbMP71qN7Ikn68E5O6K1EuTwQpR4e0xbxQg-EQ23uVmeu27Y7BwYX7l7no9_lDUaTaNsu9omT-hgdZkGyvB3AJmjCQ7gu5z9u1x3mpUUS152Rx5ReITBgzPjO8d1MBLzHrfHVVGDX-K5-CaLVBz-xnJ1QKWuym58c1mSzlTFGwzKKMHR9vpcyyWUZLiX3XVbIqn1z43LwAwLD-ifA559SwLuhRvTWvBAjbbCRFAnNFyLsmPYl2zC6yMmVoe7VGNtF76KrCW8Il6vUqSGD1TJAJzYiPG3RJ64-S663xEYQxyYwRx0Vnb-4OLs0O8kKC4JUfSBEgrjLMMFF2lWCyVVbLrY-M6WIF7lnyy-O39m3cAT9wV3y1jdwlsQHcFa-Vvyyr8ayS2m9f2qDKcdxbXMNrOyDmTkUwzQuuzL4_LKoETVwqhfqMm8rn4FImIRW-LIAImA2Mq226uH7Iqyu1la6VdoDYTnik0oukOovGYDdyzGV4crfksMkpyRRiBPb2JO2QqcVTvEjK0qXU8BSEc4XiJ8Ese3GO38kD1F9a8P0ThoIL4squ9d0cX60RvpVvSWoHQ98MV3Qdg81vhfWQeZ40VQRWS19vmzcKlNzMeFgTnlXSst-X0-E6RIb3dLn-KxI76XOkstXosyVe_9whd1_q05Iuns1i3edpd93ZegyqMoKAFwTR4_U7AInVCE48o1hLrrUAvh0dW-lcamst-gDIpv-9oKf8XRIflZ0hzjSANY2FGR1tgpN9438ENx_7YejaHjDIXU6vCUGLPmVDYGoZMihTJiofDrsRzjd-omMWNEW-mzNUn9feIcsNE08aT8NmpuB7twVli8nmOqqA8AD7HuB8TIi0kwV64ufbY9N5ieB0UUiwbt8Xl_RuPA4o-GBD15YmWObK146VWTkIN2epbcsWo2a2YxQfcrn4L3X3I5Kh0hCv-uWHpO5CQ0YJE2B_guu8Nr-6Z1gBJB70dYpfEdERO2yfPFRkvbFYEwHhQg0S5CKhyw-N8-nwO2TN-Oq-GWMtuaIu5l4F0b-R3WbR9xR0_-JEER0LDtzxhO1nJshZ819LK2orvV5W3f8cAsz9E-D_gTzahMysCHOsG_9uFgnm01q554ACkVpREHuzbzSud2vFSAKM0dafQFL6ATM7ySbO1NfJvJF1fy8uFnyFks9cKhbsldOyEJCj3rkYDB7x1hfbY1o1nyeSbAUvt-P0V8olpZzbvNd2sJxrIvCRNjjO-k4ULPTtXdrOhlxbyV63kMMKi7y1CNBb7wybdKFwiehN098Q4U-7SLGQHzxuXY5ba1k-YIPMl4wEAs-wEenuBZqe69SYKsZndqCav99gywjt_9lrP23BEHghf7izY2rLrQIOHE14RXs5jfD8tCMDKobr7LKAnCWMsYrzo9guMsa0I9GstLaDy0UupacWndruHuuNTqchjAiXf8ia9p4n1ceXaiuXZfDgdf6rK0rRx5uTUd7-BRI2-eUi8_w2yCtntiubXARepnTCXTKzOiTz9xcOhEVIxvl4EvLY9tb9zLHhAO85AykWnz6VrkdWMolgreLcSKJEc80nKqWWssU5aIrpB2HU7qob1bXtbv7JoRL2TBVYSnuIM9JcRvXuEYVv2rfXYDwAq59UoQPU_IG-biiREUim-qww4jde5F5k85XeRrsDjEjPcDtTT2DtRsBIvTxEori4kA7qTNbJskuaZbOo_hm7Vp54nrtpYI5bL58nye7dI8Zpa_Llu8IzWJdrIKtxZhhNBuTIsGisdoDb7bHb8vZWidrXUsQS0nx_GuPXEjLawxm8jAI_sHg3ve-xEXvglzjWJvT4hy15qcj3YmDiZjAEooPXm4JLS4a-3aXiF2kBhWnbsCRD4vC4hwyPPiTw2Fv8NBx5qRwLsZj8TQq0UZ86fsT7mf_JEzjHvrdYZAyw5forWLN4H8srK_0aNPdA7cc35xje1TMzf0ZVa6QX0YStQFeYpE6W-2FN_n-KJHC9C0vkzgw4rT_oUa6sslsyORkYE7S_x8bAZcUkJVWDgOmNfhG2_YDBAXR7AxMVE8r_jQu98vmHPBfGcexkW_evOPdzw4v6LglR61Pi_tBFkesw1LFf2pvi3sbc0Km0HYgfrtmnLMgnm8WpKiuWJ7DGyB_Rshd6AUWdNzCTCGg8DSs7UHEyDDLU64HNgoS2gZ_F0jmNdAYPgtMUrfBZKY2Xe-0hXNJYKnHajF2wk5Q3XvNwywkNmNiVOMIdf6v3EfgFnLcSfQbO5WDEXkfEyXN_6L0kK-mNaA-yR8cHZD3dCAaxrRsHCpGRAL3PecYN9Z_xj8OGqycUchmnykuHreXJ-zAYyN_pNvwHA-mx9oXJw9JTR34tZlNj_xFG4UV5-wiy1rnlGc8UyfDgS3Y-N19xeWIcB1LZBQ_j9n2nyJh7PcpY3doATrYRG_Xkw8qH0U8HSbX0S7cEFqmE2hMy1t3XOw_hEm05H0MoP253IqneH54BCXeefVHT6eJa8j9o0fJd5s_mJYSeQUAQ1jz1gMnBm_V0-jZLoQUgHcLjlm9YpxP0_crZdEquN4NGr84XR2k3WNEhB9Blo2aaJMdwOB9zvwMsl9iYj6_AFIwQRB64GS23qg_oy-ppUrSa6ZLiHkbeIiSWRYQ-uTAdfDuGMStRwPi_wRUWmXcXuOpz8fRKXe_IApEWAdzL7Wgu-hizYNaHC4Xv0OEesBSaj52WKcWnowMF0xI8yYraBtEcU517rbeoLrZmCPjOMJdl4aFsZsjgdKCag1f2cPw-_Awi97E_EMg8cduoty6IFglXT_DJPawu6U5Rk2MEA-CPp2CKT8nBkDM1oTBNzyeohGFflnZcI31mgV19pmbXW08BizZ6BqmxEMdVm8t3tkpSQbi_Bs_t5yBo79iTz73PVtw5BX3w7qWuXrKdcbrJuguccTDZpyyJdXW11j9IeVQeTNwyJfGfo7bjJg6ogvUFfy5xIhsIu1BjQVSC-FEkeEPyaFxC8TlkOrUwr3tDNwEOBZUv_R03v3Zr0ABmBryJ3i3zp4pSYE_zGKqHoLgZUp_DSPHFHZM9w1p6POQzHWjzGCYR7fIyehqgGIJGelNuPYY8vlu0yapZasBEgGbzNokbSY13pVvUJcdHh0WAaa6awxbx_CS-6JBtoefAkR9AetUvO7ANCyoYKZ62VlQVmqFnHdJnQiYQ6MaZb9Yr_G8sbjPcRl4QkttlItazNzHuhojl4MwKinmb5Qw4VfV8YEHxu1NF2wmgXGwErXg9YW7FUdO45GWEJ74B_iwfU1u0qBmrZwgVLHibV0M_pi1JpwW4M4uTjQg6nrvC2Q9yfy_xZfznF4ZmwzxO0wiBq7PPHpehv4_zgqn_VN8wp6F46Pd9tPd_CvH2_vy_yiTtpaT_PObRxCOUeExK00kRqyswIXS9xUTPKFX6FIsoANAy-QQyCoe8MyfQh1IGZbD4Bw_AY0SZ7T70b7HNLFtl6g_CxXHaVuoV5c9Y73i-RefFEeBhHk5XdsRUn1bZjGm8u13-8Qn2YnQd2teYi_4CAh40SfOzue9bokyu83lPJie3N0QZY1JwZk2VaXwqX5sqySaQJY7KXJsTbbfrqBwrVXAnqHgOswmb83kvRRWEf62CkV44lmUmTTMvQysmdmPF8HPGAqscdxZ82VnWlYQVnt0uMMhsJaVeBYakBx3fhiMcIj8UmT6pKUYLcwZ_gI6XoGJSgO4KhKPbuaMSU1rvVaDSAShj3IsyWr1zbvw2Af30RPD58sOn4NKwZaMG0JFx1DOd7l_Yas8K8uo6o7gHyrJZDVuqGIuXAaaH2K636kKy-e2VLxtRGLfoCy_bgjjzhRrvb7acYwEBz7MqbI1wnMnYj9Gud3LAibCllwFTuQ8xWUWfeWrPdDoBDpwKvbsiWjRV_BQfQneP9DPkxN_MVPw2trE881vO0h7VUYUsLqwXM_AC0EbQB6s-VPX8U8xue8KmK3yAeuihFlNnvf_Z05YlWxdUpp6e_viBanCO03sOum8hrZsFd4bY5uHh6gvmxgbPBm3qX13wdGbDjsA8PWfK5ObU_A6x7dFY0Spc0JBV5pTlJ01J3wVLopGXq67MS7PtMRyJrHUzJ_fDs3iZbO0OuOdTQgvcgfIL82K4hr348c57vHl_iHuhpo2XynJXAp2iXPpk8KyT62PwmM2ocLa3ssO7E_t47gwpe2fPaPNOZMFMU3foHnOl24rCu8CJ5GncYRF0itzsHclRx9iOzHtGv4s_w0-ls8ghcRXaMA-z-i2MJ0cYXiXS_DN6lOdRTXVZgUTdRA0tp5Icsi-7AY6l3FGuT5qiscEmazJTNHSyCgTqJtD-VPmnoA7rb5qViEorpfVfrLiGoCltjKKhEk-VqJ2HwuwussXOi5hMmOS7qsAKx7bXEdPJtTA7dmpHMdh9doNJj-cFIbZ7Pvb2ZlxDiXGhK_jrQPQlAjKg9-6rCyl9hYDGfSkrTOOFvNntCJcDlPc5zeLRYn2aoWFmXTv-fbqrWSUVRPrI8bgv51wivYm99pRYHqMxJpXPu1a6cUtQu5A8jSEyULjuGMtSrjcS5ayaAimGwCjkj7Vgc-n_sxqjrczgcE9oFbs04bZoAdSEPK9M1yLhQRaS1zjRwpXOlOTR5SF2xe1MEPVJq8y-OUnfrCl-M_OHw93mI8OnJOwA4COcLQ-jD3pW3IPa23oWSYY8zzoEFmZd8kgUEXnP7sNWDLlcdJUdHx2agcFiREwZyzTjbUsnpfpuIrz8ifwgMtD9SHP4UTn3PELyn_prLSQtreJrhFtNgCfCnDx3oYDNbDAd0dNaSeXfalDVREQ6eLju_nOhmE0h45bcD2kFrqF7f1ibVBwtvn_ztEwfSS7URUXxb_DDGUpHoT4j81jPbDMjxGOLCEj_3DY5PGZ2sLjNYjo7Hublxrot89LMv4xk5Ng6FEzvNpIr1nz7qSlPXeA-V4PBu8wEjM6X4piEz7dxwIXJ6A2DCnDV8EwRAN7oBelU9pkBGxP40In8kIn6mfPf8dUJY2IMjeb0i4qHJJqp4p_CgxRTMhG8KW8MGFnMXfgEtMTyRTxFczQI_AQUscKPtxCu-946jEAD8ri_UoaK-XlSb2Rbzq7_-56KnZvZEQWNkxGQ9R8kTuamEeCQg0m2u03JBH3ioYPqzvFRxmp6kM_P8O4NeTyv9mJrWy28nnA03caLdaFBLXw6HKZAnaAkTIytEupXoaacRH1vjceOS7-3Vld2wxkgk4tHuykyyF-CFKPVLGvF9NCMWf4aCceKZgbSQwilwPIAJ5WGAxUrweIEqp3VCrpPwcff2pxfbaXTQunyXyQBy9KtsNt4EfQOK-Hz9e70ccteExXkqd6M-H2tzrW11ivieSHU_Q-b1j-NzhVJ7xME9ViEioj7Tv_huokYfyTEXh4XoYBz_hbT0k_wt_DLRXQVfIAWpWON-iVnKQ_bZnBDc1KZ_gyhNTAQQlc6guhoOb-Ace-_GItEQpLwpt7fsE8G_bWyXH-7eBZW2d8ancHeX5Ux_XB6IY8Fh7C4t8HoPMNKfogZtzmo0vA-axnl3_PMN1HMpmGdsgKLbqOlxawlR2glb5kW_VNICSwGLcg34yP9nyJLpVLy7l15ek10RVnsol_OiyDNQc1AmSONOahPmXDOwp2Jk441TkZ4RCBaRkofEM2eTBG3jD-ckatL-QEP_coZJJxq4vNwogxFokUCfSu0bVl3ytjjZAMp15MgF1okFEdgN6J56oc7zvF-eqXlZviLceTj6c6FBERJTewwF_dTLnB-LQ2pOf2wN6x0r-yJNDn01roFQsJMq2vcmgfhDbMV2XCM0RjwtyT1MtxjTsDp5UUnnMWosPBDxeS1-UdnKJpv_tyEiWPZUzlh0TE1eqzep5hIkLna0khRO4jj0PUgvce9dlqUyP33ABVeYbRSLTelSpjl-AYVLjwy5_Cu1cJ8PX3XYNUwAzsWxsTkH-viGX9J_-dj06Iu2mUcXe4Xqz42RTdqy-PbEnDImp1dpvGAyb-dhoK1YJQMR2fK1cBHCxT5JwxXvnCZx5kpFqjYFvrHgVa7lx-2g12lBtGDvr3y961fazUjqETw8BHsAqn5AciVXv4xFvbLy82PANWd5zriigIGCtCE80UGOWyMoDCKxBzA9DW6ehCEBW9atkD-NOcLbN5mcfXFrfPFY7cXh20PeaP5p5YsO3jklUUI510scn2uHzDaiUChNRI5nOivkpgfk8tlRLCxrb2nExzbatJSzqeHhAFzQuvIpTZJ8q5Q8SNRtgVwLMuQYgMc96f_cC14XKUGRk7XFOhC6X2SEOTUNooP7jIFZp-8qM4ayfCShQPyv5SrDgaud-KLhZp_QNw6knmtkFYZ-9EqohcHs-W4yyB11Kxj39k9GlzMUfNeVtMfGWAH4-bo4l8LFOglHOi8DltZ24WSKuHSuVE6CwY3cyQSJ4p5LMccu_lLD6VLWFXnv1uS_bZ5ZgWnYJwiMf41VmM-pSdxfVvszscB_mEA5isy38EoPa87gkOFvmXJClIia5S2zaSRfJ5JAp8xN9ADVMWWT3J12whN37eXIn-F3XyJmYh1Hua9ve4yA9IBNwoXxygl7Ju08XfsUrB6LQmjmZgd8pel6zdp2GcHmZFboEd3A_l8ImlGIBikX3_naqKPSJ9kLQS6s7yVuGsxPQeByimRDPp7Bg9R1RWvGhc52JiKNuWHMnbDM_atD1-_mFy0h2GBnjxuUiOLe-XFSF8olZAp5qJxbpkHbfLZjOkd6KwbMCm0Did3nU7wZ6-GQQQcsytL3soOLu20IkIBKtYGwyNedP5gx72UtQsl42Axq4b_vDiMhPv7i2z-YfaLppKE9dvo-R1ROIlOEhdYoIw3_S4JLQrIdxpYTZL1BGFndFImdmx96dxE7VtbOeAwud7_c7-TIs5NCot-C4uMs_jQfuGR5I9SLLO1ANmFL6HZhQD3QZ4SRmdZ4nQndh6D7Z6bK8P12-f4HeWlpVhpC29d4V5goFvdZcLsk_3RtZrMgitTSn69UqOUwikOUQsdFECieBZxda4LJ9C37bjFSmiJStEvjBdWIBEqfLo3VlasbzVKrPzYyo0WaqKG1uhqsVTxt2f7AKM25EAjWv_UbUilt2QZCW96ysGrqMyZgiEQZKQSgtiilF16LMDGbxXrM1JPkwSZe17USHRag2oFdO0BtXF-b_zVKUrFuWgaStxiHIbZWh0xNEA5oXq47TCmrtlX7sFBYhcptJbyQMCfCjeZuKCc7kCRc5zhspsICY2e9FGlk0sCFF3SQJgm_7nC2knIdR-3i6NRRca9DszjA-Dwjum2Mqgx_4mAH16BH3TWrntoDutvtKyHBbE9nCh4qmi7gB58u7AaY6KZYPcit7dvv8XNQKc8dPM5z0P0DK2RVLqYXp6iyT0NT6FBigw7pbooCKhRLFVDMKORGZ9pE-wCL9YbB0AnXyM4LxfgM18czS6-ef9xhvxc6aDOJ7EfeEEaxH47vzuWJGb8BdeKFKyfPDk_BF9HmqYzSvVVlbz-sncA6EbNDAPWkgb04gnVQJcXonfsXkZ8HcWyxP4rux8Kmb9sSyhJbCcMHK92yNzEldHv0hb6Msm4U5HnNLcDIKHXSYFPexbTqpWfNExwdllQEDStYaL2CAzqYDuNvs7YcFfz4JmRzvtwsPBSCv7qqsIpJHpaGyecSNzDUvaCAfPGz0YB8kASx5672PsyMY8DWQCwD1Yz82Jkc74bBgr-yBG1SelKeDacSxtSiMkNgs8tU6i0CQRk8SZF6uxbF8zjWGV0kcmecRw9L1C9vwMJWFez_9TUVHdJvUZXPIQ9bY8gfLGrejA3ncrZ8CfkwwlIp0ibPgVTm26yixE7zVUpHRcH8SwTOIMlx31KxXeVOW6C4WJxY68UH6FUPVGAdglvPRaANWGKXhUh_EPhOKS7xmqyXFZg7mVcB6-gvHmAn8Zs0yrL6K9aGfqRhC8yXpH7EFpepp8rtMYZsNqxllozcoqdTSYeKtNQ9Eae--fNprG6TEh9KfzCSpvWFa7M_OeMuyHgp445td9tVTi_Fk0YthJC-eKrPNfvQFMuZTKUiNeeVQmXKDfRiE-ybVdAC6tAFJOY9ECOuczA-kV_zrpq7lSzrmsAeEvPiAp-qyDZtpWGBBj3AJ4x--jPm7ziFLOG8mR7jlmqSonMwDTNEKJLX6vlQgko6SU1mXLSh-0f1XPljId-thKhJlSkbwDLOT-hF-B28bkBvJevIzk_eNy-HjyJek3_e_IeVynDUgahZE3mKsR_YeuKhs0Tq27Qs0T-oCe80W0U3H8KmPED8bMNHRU_UAYwv6wpl8XXjngU6wRKkhBZZazuiS2MeFQqksnAqymFmJ1FOH7QQKV8PZ9rLi4079gEkhVNnkpOx11-h5XvKYbTk_fX7FgUZTgp8DHQSpgmrAzx0H_KAowucTBOwax-kmLzoBG7nj5Jau9QkkQ3ZrQiG1DLbggNve43Ca_OefL1EYNvvU3nU-F9VdMRiRD6N_njSlIVsB3jOVpLEd--6_25-3lGyVx3JKdb0kcLbS94J5p0LGyAO9xbHDN7qN2WVUXMjwpRaKSWuK4CUZQHJ_T6zbE0f0tfXImkt2sESc9CmRk9iriA9vxbTft_RwYySBoX1lKhal_lz5jdTmx14XDOLzqQBn_2pMIn57jE6yXWvP9RVgQpbxmzjEsLpDOMgG0SZeYg_LIlWxRd71VkYVbyhOcR4HEDbFxOwOB8m27N5cYGBdtHhR3DAq7iIPwbHBhTfYTn4Ute5ybQuu-LkmsF-c-reE_4qwKpn5eSY2nlVz9Ak8yMK4jlw3SJvlGqqigVqL_1xz4oFPfg7ifR6-jFz_bhGSt4W6ps6v775Ju-Vus3_IVsvH55T18fE8FV3W0yrPoOEjx5wtpVSaQFCoeeZUV23m26J_k_hkNWcBLApZcvczj8mK--ayiTacz4sGkYqBK3axPg6qzMouEUf4RWsDGsp-_jo-J0n9NTHQlP76wKWiu6X0jkhRUjesQpXVTC0KEQSRhSHXN1iFFpTuRmX12zbs1goAEZtjI4tSblS_fnmgn2ksBs7SL6ezyIwSHJkrUHPPdbPQrvS8lSFiwqT2lgPuunScaWsm_XvgdSGBuiQFMg8AOdNUQUvYtFybXAgrF5uytd6qPUEwhrzO-rxhqn2qnx3OgSV7jXjFTVia4On5BEkYOaEg8Y1k4CQ9IRjgqG_OIrllHg9gipltx80WJwteQgfG6nK-5h8bfMPz0YitPrMV3OMs-CKYZ2hkbf9pv--VrPbZuJiLGSexBgfZF1hRR9YXyXzG2S-8izYAAAHt2Jv3fOFmdqvfEKcMHNPbAeSouxsv2_j0hecDQokC4ssBsPNlqC1K9tsZvSCX1DajePnjFCky1ILx2s-gkFleQhEQmQl1eJ5pC32DOrX-SD3QuXMX6JHZ8N0g330XH7QngJVpy5-i_tsJt1QEHNaCt5AKfhmZpK8PIimNFr-1iIJ-Su0i4fzkayr-oqNT3Mp5C2ULq1yK5lyc2aEbJUu5uHYJ3LX93lnne5rLEQ4YjgZucEGWK5s4vSvx4EJrTpelJt1w0SuqUzeXm1-k1tpiL3LtKWQ_YY429MGS7x6ChNNOM8HV508Y4ZXLPuLg6B9nWyd5D0VY-8YRtVXhpUV3HUbgvapFbiTcKgXwrqigxeA-0YvHdA4z9yaznQmW-TmzY4ihJEpSXGWt90dPzU0gNkV_fq4oGUc6O-iZ3p2jel96lvNpR1Jxc-wRLTMiNixaZTLsuNTvnvCGR7kAQ8eP0AOEU3bASMOIWpUV-QfS4TWKs3RhHBCfSG-u_bAHWtDxl2vbkhJMAcL3huAYnMB54O0_UYKpOT5NG3oyYgSdM8D_TVZorAJyqp6PTap4clwb7zXHQDW8ISOAfhYOaJ2uR0gm5etaDOg8PygOpX8i3hHZAVTs2t_4jCUIv9ra04VJ0OHIunNGHNkFiSmTBrNXirY8b-rXUXNsGLpf9hhpodDteVRG3-Ry1TqEb5xGuZ2sEa4kp1OV1iLohxlsD4YWyFj74R-OqotrhoBD5IMAB91jTw0A9AZFk-niYtB10hQ6GtpLFbEQ1VIJ2GyEHJ8YnGSp7Rj0_aZ3AEj611q8ykX7LG6JM3kE2b1r0CaF01_rUBOssbOHFvCqyBf6mqww4622EmEZBEByhg_ItO0h1zBcyhAHwRNPB4BQwwBggnNH5INyO16KGrR53KK-nNNL9sTgCzNXICDHiDpdcT0QnbLFTBWjAJNKRfo8NsXWXhfs5hXvjhq5sfiefHrdbORoMr-3yfODqgLGe-ODbujzER6A0OdHJBvoiC3_JZSeB837cgKnyqVZGSKhNEuKt8-BmPqOKiox1PkVMmE9GuaSCO1h6jYMu0zMJcTPTTlo9npG7aM82wxDpuqFzyKFVLqDoEQxb1S9OgVT76Vgx2dv11btr6Zf8WNiPKLgOvgj0Q66xADQeWXdfJk-hAwJu9Uw8Ak_9tscqi-YqRwi5knc2OAcYrQBRLyfxuvabzoRZQkYOE0d_8dmA0UQqKd3vHAk5UsDBHjrxVgCQ2X4bBcLU-ofiRz2xDe5uI4S6SnR7U9QpNgaPwCKcVxlTBLQ77VzSCeN6smm4E1bAfFJkH7obDxASOrTU4F6-4TC2ZqN3a2uNna-kgC3bYIBjLWXdWP9jNDyFMZfqGLqDFkCEQCyqgBv_Ar1jakyAyIbEtDckEiC3Nu4l6AWbAd1T5w6Uq-d0yK49NEJnANZVN_64sE43FLSkafHhxzatYLLpY84UDcycf8y7UvW0t_FygsJBE6CJfaw4tRpbwqIHjKE7XFHgSoRbLuTIoDz0_rvsUOBGhjd-E25iOIBQlW3xJM37_00YBVI9TA55fF28JWkQdAIwmybMl0G6WGM7ucLuXblEy7J4L6yyghQVQeE1Z5lDZ_E3xSB30cpwZBQ8VCyp-quoJdueHEIdIW3AHUe8etyYIOoJe0V7fxzkhl4hFndo7JJfXes95EH34yv3895jIJoJaYeRWn7DiEAZOtVW74_XVIZxLIfcPSJjlKK5St_msoyWeun-unXZ6rMO-q0eibYhkZkHuDZzvqjycN1yt3B3rB2R834ZZd6_Ww-roIvIPz5QmD3pn9XqYRPTzCXIIgz52twNwkLhzlb9qM-rpalX0oT4cVlkSTvjdqej7WcQx3P-FI5eSm1QtmkEZ5NyYzHSgOWbDd9A-bJrh_aFyRWc_BrxcYF3xU_E4Uimy4pvDus05KoH417q9BP0h_KhDDaagPXdAlYcGevbYFFsb8VIqNAlLeMeqRx_HflFHuByECL7OTNNpx1pm0h4Gh3XLuGs76hH1o2eUb1xEi7FS7fIABnzdSoquIc5x0f9bq-Zrjwc-K9XsQ73AgHGZEGTpea99YKQdCm_OXuonEbcv35ivehmp73U9_5k6XkdTEsA4seZxILWNfHZxiqVu53uhR30hyPylpe8W2SSk0w94TRHCBiMxM_5PeF8z_DaQW4lj6-Rp03KyZXxYwlyuh59zjzCj2-x5NaFzQziVpBcPoLxpKh8mnwR1Uzr9XQ4cr4e9EEbxpj0oWikauUMufWN2s7KZwi2f7KD8LPSGsxqOssp0KILRf9meuu8QvdFcNPJhTWxzg57zWRx-bJEczlxmh5r_UqFJ9UqyBK9RrOX0qokv71XpXV0Rgwvu0coLzEc6Ox4j00U2LCjhSdl4iXROMhr92QPRqvuJrqqwCD84gBVwzLWcqiDB9UyixPK-aqeb3zsvZfBSdZw0UDCPoETHQocCTT62gBreBQ0s-yU90xvBdHNZhMNKQNbXN4QQhfGxvkkjimQ_ptzL-OMLenusv_mU_0gAcoE9bs3IRvTJfnoMb7SUSsZEK376JMSeXhewv3dCYuhfzD_2ZzAXrZCfIqeqE46t7NRhmnmdAKe-C45hWQbsnEaTubtV2J1DO-w8zkoAtYIanDQwSEu6DAht2dmyxK69bQDoh3CXrAN8_nbws6vowyJU9OGSUjbFd-rBnF66g_mb-2p3UC7IMAddisZmPg0O3BBUEfPKH2Rx21TszQgdaYJuEeLe_FKeb1rUcTCyaiMRymOaruaqqmVKHTGbhMtQUun1jRSruIU7pWzPrcpSqEs_m38lTfhCRJQ8oYpisP4umm5K2dGUO1sbo-oQToLV1Upd0UXFxnGtBAlf50GTnU9p4f2Y_kwB2qJjl8STCn2cYGCnyDAyj-fWOQHrJeHfGhh9swcGPLL2n96wJ5Mzb1US65Y5nUz4i7RAsQ0_P_A8KPmaQc99TQKC3p3SoRokpQlpzTB44mBcOZbZPUSbvb0SeG4_kI05RJpcbkkGNXWk0PT-0z7wIqfAzMJbVmGtBKib6RjWUP7UEEFvU66RRzJYARnE09_hgO__1MQAKy0RDqpM_P80ItYfvnDtUfV8A1tKKyRS8PrU8UGNyc9ZImgIoUyEFeHavtBOZNzYziJ7P3dOwUVanbxY1_5fEWULw9UfUtG8ii66EorR_AFHfFvEt1AaUe8gY1t-JlGzDjzct-2XyX0IY9DJTD7M7QKKUZc94sgAIEy98gX9tHdcHofBf3nSOrl2i8I9r4rR6bHigbVFZnPCSX2CPE4bzxCh6qvXr3Aa11A-cv9VlcQ4vK0zcaCxUIrpue0U80QP6reqCPf0dwtHnSoEC9vXQ9GVFTSEigJ0uu6YPp4ckv7_EXA195CUkX3j2q8dkHwCpP-8YPtShzSSVeNzY5YHrRbsQ-KPLkaRNYElsC7XZtDd3uYAYPHGo7e074aKyFAtaLE7mUc46eHqCfqOMaNJKK_4WM1xZWc53Ld6TSzqPqq_UsQl4RbnSLYO4AX13rQZcojA4m2TRrxtdYNtpJshH19Laxy8V9pCiYmoRB1kdwAKS_GKX4HhE96XTvxyoQSV4rDIhpw_dSVs9MlV2KeKoZrR739KXgqsN41EJ5Am1pD1UB9I0XbdmsX217LaevDFGr97S6svCgin6Om9vZWth1IFMaGvLUXbOInAzHIKH_aZ8vroVUySIVZp-ggC8LEwv3ADqww47S3VSb5S2XGn2uvViWF-vxqWZP677blVY1RZuwLa_4-JXWPgPBkWM0FUD0ZDEZIYf2qOzq0WbSKEIaGe1oVqxLmsg-rjxM5kFzzOyC77eetsi-tvZG07jjcq2XcgMyWxsK_VTpZl02SxtCKM_rHXmctgR1NoV79DN1U_tYC8FG330l2cW-znUlNui0pNf00B-1Kpq6S7VLPdAds9c0sahMvp36Go-fpT-vsrsfFY_rusSGttJ3gbCFFYKANJ9H8sSmq0Gu50TeT-o2-WXtDT4XN_ITuAcfAbJuWmhAu-BZ3Fb3U4l88vsk30qhGu5jhsy8rtt9H-V71aPAKY4jnHRJW94tauHvm6AYtdeijFNKvUWqqj310FtV21AjKw1S5Zls5yHaLRXFY69Mz9Wt61GZkEMqvkJZbi8gR0L1LhrQsuf9zHQs_SzrTlkO9I8AR-ktcaIX9rIdVCUSTxnVcAyGXKpNmFHS3kYEv1UayrcXzTdzrPbzpFbCFQateaNpjXqzCWTUm5vg1UrUkm6GVw3SANoAIcyY1N0IJYOqTyfYtqlGnrJdev_MI4K9r5z08JiUPscVcB0-oBPUcYGAhz7iqgrFQSDT04yuNKHt8wOMQ-oRKa-3xU_Dst2IbITGNUmrIGvoeBHZt65PEWMPYt2ZkuEMYtzPskBh8dC6ZiT_T1_B4VCWbriGCYGR46wx3ImYu5ev0Y3i5Gfv54SpsQCsafK8rZvqKeokmkOBrqnM_0adqtbWd3sY2I1Lq_SNbLujGJrepqbS9xI5tnVbUA8Ea1P_BdlTevV2TXGSjpIQQd_dp7VcU3tLEPWikYeGsDmc84t9w2-eZiZCu83XvGf1n7_kOGPV71Or6ZDlKAHmbmwqtebswUN5I_liwN-eHKkSxdfgb-j3iskSFEOKCK2FAut-9_BdxXjRoEZmekBEDw1S7ajM29mT7VWht6_rlT-o8wQGeAA11W9AeQn3KoN2ut4T1sOJyoZy9q28sDKZMXnfzohh6N2hJHzMpFDR-lMVFH2zq0Sw9KNXBfik81DN10QP4io-RGa0WgCoNDtWTOxiXboOEFkijucRMDqfhUbKp6rqNNqfB5dKMaOY9PR1fpyEiC-Uwmk8W-wVBeKVXjXtZESW0ESISxW_N3wF6slZuZzi13LyoWrNFvdSRWmMLvlMr-HQlx40uNVYP0dVm3j3jhoAOPc8LrYCKD09wQQ5tL_rEBNcsqSWAiSpl01K8pZ9VdY2pt8VOQ_jUBCfysvqSp0BcmIjsDNrfZkixs9ntm5FXeXAOlh8PFHb2W3EXLJ2VhA7rbnyF_YHCAt5GAmSenkIrN2vZgo1_ZzCWO86R12wcTTNz2F58TwnutMfQYolrrtCh12ESX8vh1CaWt_5PLdfPVVULZiMPFuUTtF6q_WtoHLk9c0QxYEEwxPAcVjLycPxJiuT16MjuaYFXIR__uS00UHBjIz6DWYUGwhx7m5yjezeQbX0gNKXtvZ60v9aMqHGQOZm4rPERi0ILsEHvwsd1TozSeTeXarqLEXY9Nrm-CYLfARo5L1f49KGjyp1HHiaMnq53ygSrMgKRYQNIpGtkNMmfOnVMNAD1RSbeNRpzl8jLr8CBTnqiP5-eg4AlnzlUv_aqyxvscanSulW3rYaN-RhGdxhqxOkie8DXpDE5RG1j1QJpJKXzroh2Jx6VMCm7QJAd6DTtu2QLi-ZICKULl6e1lVaht6LyyKubvTj7sni-Io_mtB9MnYvvGFmhlMQTqu9TpJesqiBZX7B03YdtCf_cTRXLKcDw45QcilJr81CPfCyy-RFnDQV-lRuPE1JSXAyD1NRP_1MPT9j5FLEQkZnU1UAcSPq4FAQV5egMrKg0q_N5JWQt0I2Ov9Z_xIT2wlAgLNf6WNNXeNUUBA7og3lzMqwMfy10f9mia_gugMgJOJlTWfkpYLaXjsqaDpKV2ukvs5swH5UF1XWg1mToFvkZ31KHJ2AwhbI5WhmBYdMPLN0DN3P7KLKfxRg9cHMmSYnT_lZjTxS16dsqlyrTJyGB3Q1Uwp9ANSL-qgBoFefqKczsqgJMNYnmMnZtxnUBFPXPkA9XvyFTWhSO_Q7shZLVTH5jGqDVaBJS0h1Ndv2ZaJPFwinXmJP4wucGdf8AQe_TF_itupYxMewBp3Xu1VcUf1uMSQygobUtgNL0WHtMk7_I42RST5rxbleTLCZSBGdyj1XuperJkEyyw0DKGtwezfdYf_ID9zgrkfVVxkYexuDtH8eN9qXjhY3rnohREt41X1KrgHAK7LrVC3KhPKCjut-M3XUorUg5ub0YYI6QoI4SfuywL_jRjwyJtXYad7bJFmpxEv7XogPQtaWGspNxUfV5PKoEDFH8hjbwHaQNu4TiZbrRRLyR0QKgv5pPiBbHahtwzaaKeQBakBxaeMQ6c8lxaE1zEbldW8JJd8VE26CaMuz0agNm3xxfreNcyDYhdpkKsZQ9sFTt-HXm0YJSYu2Z6qQWj3QsLXfKPH0lXxz_Gl11fIRim7O2DZ3jm_Fi69_nL30ld29g4eAvZRUTKxjikFquLAQNLLdGko7dV38gd6nIAC0MBDg9aWUhYyj4Yx4fRunpz9yVNFT9DBIbJt-gCZiO_xNtcb9ClCU4hX0xx374_2b2Kpf15YLHjY1G_dOkKnsduRar3PyuqKBfrzQS91ItKS1Ddv4Hb4yQxosvk87s5qGKTZ12nryMG1uVByLbVHxZJGJSs3rzWRKxYn6UGwc9oVlM9yciBfTa8yfK_IVlK7J4dzNwAmD9jyAFPBakO8bPYM-WK-0bN62Z5jdJVKaSBW6wLRGrnjOZ4X3lFY68japhh24oGNNnwis0jBIABKqTkeHymdeH0qhxNChJPc0faoFnTZdjWHjT1D3X6vL9KhclvMUm0F10iWucK0PFR3PY1EGGnP5cwNRNuJJe1PaEwCxo2xNnaSlkrEZgjbWG9Cwt1eYplYpeQKTUY-ubCMtP_g0ltlV3x76Ka5uGoMjpVhOo5PI102aBm5hjxQDV1vBxi_pYKqRlpC4rh1tyymeyvrem7ovFItUs9GhT5KTxCFQcV4hEiHaGKdUDFAvrKEFHVtJIhQ_UXa03qYka42a-q_WvRj04He8GDaBpeFLp083tLDlZxsVUEPggHGQniwHXeq-241i31KvKWc9lY3ctL5q_N6or3AUTVeRA4cK1ap2WdVmFZ0M0mh0mihBffptbl1Bqe895ZRvxLceE2VXw77rjaUMkBegv8sdiCnZI4yWV-is8b14qcRR96fHtdSjBo5MtAaa37WKeDbVqNiQPYX30Kpc9bhtimeGHFRv1QokgiLmw5BbRoNXjpt541C-pHgcUvOdO0JjxNVBx0DcFOwNCdLbpNCF5_LLHlvtzG5S8c6DWFg7xxRSMqhn0l1BPu0eaQ4mnCE0bH5Izq4xSjx9tjR8tTU3gENsuSvMrVo_Q9W0eKA3eeUaqXlvVgsYu9s3QG7OTGwKLwxJTdzX5_pnxKstX0qBVXty-bvIoDFPAmBp7jIO6321Fqcp54rFInqoeLVG5jwCtkmFAjXnJvSKPZGoD2K5KqJtPoL9vHaOxVF7Ji8nKru4PVViunGZDdtwWWKAx3XyI4mzr6t_4f0_DtryLOa_nqWMt7kBFS0IImvZgN17Q2gkpnKFUKHceSIhZIsUSMCxU7VTmf_72slLAbvXqPVLjEGdbdqrDjRSV6hU51a0UGnvFrR4TrdgKngZz1Zv16ZaKiEVbE4rscT69rHwoQKHYjIEgIeUgLoEBio3E148NZLpPEB1Kn9NZf93llV5golgobuFFTeQT2Zf9UUCe_5M324xU-_GErp5YqoUvFSzrar62oVHQDk9QQWEMNcS8SvNgQlRThc5YgoIPf1yqE0GG0HdNDdnYCulHRwd1Tavf4alOe3oqTWY91tnEoeshbX1BRJoHGkkCEDKyHt86s_PdKeKgAU-fQFVgZd27cONErgkYyGXYM3ZHxUVixyZFCYUAofba4egtno4ZeVew1ga5fs-E2wqmrLMiUC-m_0c6fv-HvUJdH7Zbof562e1EF327aRsmjKEG3UOHkXuGKaSqvmZfFDfLpBwKjUdP-IrlCYjTlQdMoHnxlTsx8FNSEQsXqNf0jvEftEUnyzAkd91ahjg1fxtgsPDd2EO-R65OT5cxBVjQVKLLG7koqzpPAGxV3dqbNTmICf3wg2X7O0jFkBQ2N8gc9YkRFupK_OF1InuSAE57I9dVxOkivV7kk6HYDg8e0ip6Brah10lOWZEp59KCRn-3aYBRy6f9vhtoLiu2Aw9xHvLlOajvHRfy2zJdVcFKqh6eA0ZKIAOZXchXZDhet8g2XeZysiu1o5QNNSpV1zeHebQ1RBCdzEF7E292j5TMgnlVu4mgZKYuPRvCiORn1cybpbhPc1FSzKqqpjUK-qZRYml-IhjbFOpaWEjWyaoRixnoMl3NeWuDY2iP_G4zOFOvLomCbWNSD6Vvrw6RcMltnC8UQ4m2lFT0tPSx6VaeqSqnpNVpve6fgiyxnrxFEj0hGiptyeKA1gU9fV1QqiN4HZa2BNZVNeSZqjTno0Jha7lQwQFJm16SiCYGupQ325uQL9OC5Kp4J2pcw45J7v2n8S4LMXGg5Cx12KYt1PH0U6UqUrMO9_YDtNr-3bLPHF1asA4aV2fiPdKY3w1HtSnEDij-D7tEoreShqqhG0VqxrWOyfNTrKyA9yYTq2YVsbf1KkqP-TkW6LTovBMUxpJSvbRcfJ7__GUc1Ymjmaxo1g2Nw1qopdts29o2P7dZXg6MZRBxqnEK4o-iTp0PdDOxxLrQFBtvKay6Dv6mIwWSmZ-V_MzJZIbv9RNs-7ias44L6Wnvd3AhO2vICbtRLS20o5aPKw-4nAfcq0LK9vk8XROTwMt1yMpibe571dTysMwrV5VadA4S5Y8728YYFzzQ9RCcRUSma5wopRzV6MRv25sCxOmTaPwy7ePIrDe-9vdRpqHd5dbkSIt-_24Bs10RHZ0ryDO3bUw092UGmVWnpU3lAbXzHdIRlVmCsRIRpKpgZbUXlrhOf0Jyo7YfFw4Kw2C4CD1uDY3sLSThaOE9AcEn-sjVmr5LSdIQDFi9SLR4qt-4SLiYDWbmPJylBbLqtncm1Q9Uko65T8o3_xRcOvmtvhBtreVaoxvqAjlxotMb2xvnzr12sAmy1cl0vS1uxUuZVPHfRNrOclJg_mrr5v1o-1q1J6c9YOlon3SpUqeAc3xhg2lHGolOjSibVoAMe3Gxgkw1M254aR7Q9W4Ldz-gdvvczJ4IOrD37Oy64dfgds0okcpd92k7LoY9cBVjTwtZp-p6kekcRn0QMITFeN12UjUjpq5FXsJn9-fPw1QqlMCRTrdx48METdqaktoNW8kaTUtJ5E6hMPDEI14c8b8tD5QwYpHsi4PxXavNkd2je4OoSaHVmg6obUtdeVsfpamS8eOEPQGRcPVTs0sbnX36tP8i5Z6Jt2JwJu3cw79CmEmfPQeTO4lYQSAH_St1GaaoYm3lBSYBvji3d7OXkeTHu_2QtSxOe5mQp2Y12FuCPJ5w7-ooWCzhmpw7eNJ5EM6_MXCHyMh4PwhTopH1E5q0wkFK4wLZ7nNCKQ16eqWFz9YlLqLF1OYSJVLxUGsI4ZACmFhAlttXC656N2_SaklgI9FpHk84qkeD6LNl6-y4n0sICZxIXDifZrw0Eys6FO23Fm7KB1peseMdsuHKTO1M8qeduSKh8ypL8CxlJdVl0RE87Hz9f_GPTXnD0VBMmJCf-Ce40kE2fHaEF2wdzn7mwD0n2CgMtr6PHrFL56P75e4zVsmXRDeuO3fD4HBT-_zkVypzpZLi76o1mkWJvH2edrCC-kuoPWsx5QeqUluNUjUZgMKi9pP6amQANBjYX5J3qdXjj9RX3gsckicVCSGetbIYn9tKINcYyCt3KtPrabtnUIbu15dFYPwz9ZQfQRTmYIuTcSAi8pcAZ_94w-XBmlGrhIY2wen0ezzyYdLqY9sWUu2l-UJPvZwVHLT7H8h8-zH1lAP4uFfwIyt1RVbpNNObtNMzOdIDbT1TXyrbuSlM3cfj-SokpX3qRQ44beZQFnm3r3Sg4a9ShRM_fTi-t4Y39EHhXi_FX_dck9P9-sF2xMfrl5H1fzIl0nLnSxYcbjhPSGh9Pu0yySyArgjXtPqdslqbQ_9FywxtqKn-QSpY1n940KZ_KyngBwM6jH8glXGBeFv0AvV5xZB-pqDcewiaGsW09oD2_o4jkTM--yPvNt-no9LuFqfulXvQC7qq847aCrMr7znpgwFJZ_Qnm8vO1VpOPtEVyEBclj2kDYchlBKrisGNqLMx1o4meQuzkXrjevOizxbC2zRArBOpUzIfMeayHaRfevzSN2g7ZN3h6rC87v7nHhoqauwHERdKuYY9YzCFy3jkaamQVBwQsF1mMb9DTi1SjWj5eKB4JyfqH3nCCiuoV0MYB1IOitvo5voxNp2z9BWejryvWdF-6TwSxSjUk5dVUjz2O3jK3VbC1_srz_f90pOreOtIaYRfkTo-KNtaqEI0sgldQA9ZmpuRpedFH_NytLmx2PeVCaz3KfSkP3Z-_kVpODUqOqmWehudkwvOvRMH3RVk_L3cMUkcH6AnzwfVyDu8SkBZImy-rW2b8wD_IdXRavadmhTD1Of5bF7iY71Y5h07lo3Z5O64vZSU2_GDZ_xixCENruhF8nwi0f_Ar4qXRDdb9PjKg4P8muH_Z-kuze1eqPJGkVddVexdk0WV9tQP9JG7vhSdTcqts8W5egid_ORR0oRHBrwaVNyJdUK2rVbkZ5d116nrQ5x4vxkHy_bBOT7N6WlA5wEL6y7ahG_PD8SaaVqUIv1OIhL6NGtORr9rpctIvAqj2MQpeIqr9cEXCLlejWXMnJ4b0mJpn5qrDEoKF3Sbs_HjOyUYRwuXc_eFj1AfZVN4LDI5THg7_RlEc3OqqrLrWXSoouAxwDw1yj2WhL1XtWzVLxcGe_Th5evu2-1lk-tK2U-gxG5iclTIN_I9NWF43W6xTMdsARGE1z5Zg72uOJDHcp7a1vhSK8ZTirHlDAA1WqFMVDY17ISr4s7GtQTj1oJaP1g7t649l9qEhvpVh3r4ccpjXAWms_5IzTs86rN39g2IUTjWAA_HnP_TYNmK_WkNDRn1h9KbhuwTO_tlD5BGM00YCTE6lQJupQ5axIXMeqp97OPSDkqZI3wPFDVY4RkXqfD4vlYxk97vOoW31Tz4AQTCrPMQtQ6qZ40FNyHSrtxXs6MCXG3yhj4E5IqkhSqFOfTR2VPv6xU96meIRQ2OE-c_Ry5_q3JQZ_2Um7qudgVbKi876rTu44nSFpJOYpYJVcZQmivUrDaVslhsSKgjU4OYr7q9KYBnTG_jaEKk0UiW98tM--SENP03xTg4VmAISYDMm_uJ2tG7tLhdZmoVDnX555iIglI0DPJ3WLxFz4x-fRwTvBUdqZnR1EIsxkV6zeDe8Qxo_gQ3ghL2q7pyyjJy7MQuNt5e01FU64fAMdm6CIM8D4WmUgGp2IAWz_3Y3Uqt7lMSdfuvtINznce6BGeI87BDZse857wLMCKdkLtNVOvUlLyOZlbY5G9JHTcND8m1u1VlWCMY40EmmlABTU1ukF_6GFX6FgCHioDcuTYVVtmvrEFRdChLA3mGspBt5RhNAtgBzc9564Ao3qgK5gcof1JAhWPMYOTGhEeKgEtPyy9QMcn0-jk8EEWUQ0-QrjULxLnowZ7zoGSXt9IvdP7ybTRc66pAnyQg-F7CJDmpXVCqebalBy4PJWYM7RHON2brkqTry9tSmsj63c2ZyCQbW8FrlxVINPR7U53RJy-TYl4NK6aLToCzslppoKHwR5LMsuP0wg2ZeObiQm4qxFYZSHgvfQiL6HdeRnG3uvzswFVrbzsuMgPDzzvmw0pLmCXAVlfyzILv_hr3xglCk_cLyolGP6Nep9tol5zLC2MjDd6Ha2-bHtQUQzVUGNb4Cn86bv377gCB4mWQl0LT_T8Emmw9gIowlfXrGM84OdsGKsZm-NdlFQdSasemLCOGuPZc17nIurkMv5HGotz6-gA40RUvNRJ176K2RoUiz_HNYfuob-8UWf3_TQsHKnLKIbnWG8w6unz91FTPNtB7NRNygROeh9LQOT_vtm6NqI0bTza3hmCAdExlG8QFg9GNNzsgqSM2nUT5QaLst6fG3yvL_r6RsdWIaYgqJxXrfUt8_GNcigz7kMXUhDrc9cTEBuf616-B1ECtSbtL9gE4x1HJOEg1iLK6LXDk-BMj_pHn8BthAElOWzLIHyHN5cc2hsWTdtg-1Rx17h_Op6d16VDkCm0dBBP1KRfkyB1GL1CuMDCBdDH7STcAltkvOqqoeNRtqA7Z1EWd8cXQib9-3pClI1zaIOSjY8xA3IMRRvYl7brfoAUCQv74skfH9yP4h1SDCjjN7Nm53Eiaz2we-gHFeEztg8Vkb2UdOZJuGYvF5k0h53TvoTaIro1hMM-LW2j4CV9fIosPYrDSmuYLlzKS570xUF2sT9-4dHCWKLRqdnq9A20lyXY7iMmBnvywJR-4btD7c01QzCnSb7BsZ2aCVetZFRT7LZURqKT2TKc8FFJ92G81ujuRdFUENR4jZIex73XSC7Z7v9DlzkFWpZAtf3xERpG_-guaBwr2YAr7vtZk8cpgLjmWmjwIRXcYvdBetpsdOuPDw6r2lpTwfe-DPKiSVOyXNG9hrX7TZWsgG-Zhw9h8Y7jFoagNqYrTypq6tZWjRTl1oLuw83osBXQt4yM_DflvIPebsPbAjSxO2hKWtXrGAviq1mawzzHSQoD2Ge9rJaS9HCzkqebeSr39VopUaD_TUrPUm3AJVDW7vaDbA6PjeApn1O8CkO6g6lV4zWFylmi5ZGWEDY4U_2Jk3IDPd60SIwFQoKqQUsEaGPCberwfZcUEw19OgNxm_Cx22QwllaXB67RxGK6Ta2OxOFwnk6L76vkYrEfihQpBLVx0Yy8oQyJYV5WbOYNB79b7bp9CUPM8qQJE4xx9JW7pNyLeFAE3vmZkXiVLE4B0Zq7oGaFy9JixC5tQsTHWIWNo2LeCPXpwhDAxMnu-EzktqJrY4_Lt7LVtK7HqlUtyO3VGZ8qQHOgqGaEI-2eobDZY3wnSXhE-MUh6LFrO6lo47WdVN9t4_3gLECJTg7tcdo6wf5nWRVQf3frDTCvbb_fi1QfgRwAtfaJIsTcEhAizGEIC80HrTY9lKq1CCRHgvxlh_OQMjwLItxZ1E1tFHYOV33rjeCgspDNbHpCGF0kMvCBgfL7yX4SSDD7K1Ya1xPMbdv5tpX2d0JpanLkTZzfGaCAcbshr_Usq1IUKotaSrWp6IF4N58nXyPHyIRUOvDOh4EbbJPBSK90iuk-z6eAEbh_c5cEvtwVtEbvpcdHzxuaKzUzeXJX42mi-V94fzu-C7LNrVoAdLzBzQtykIwcuI29Z-CRXd1NGPvlkUnzO9_XttO_OWb7dxcKdPQKjJWd9QNUVwuXB_YTSBMs1JBThHQ8t9hZpvY6fGeHjxGn678Zdwc_qESVsMwmi8SzANjTXI1OSYGupn0USvUlIJeb4iiktHtJ2BWnmVCoY-1oUfSw395CGqR2f8IdnY6-Nlzxk4ZP2GLZLFV20pKQpLg93kVqoj_xpgsLZESlnhBXi1cfhuWsF4DHzxypHk1ClOtCPDTqSFKbm7iq6ij1nkM7R719Vmj92Hg1fzRnL5q2MUGgbYTJX0pGvh7vOYHlUUf8dZllLUSS-Qip9bhEgGmGgut1Pa9jzs1YNFhh39EyaUQgtkmd8MdBFvJMHwcfEAmRo3X0CP9_FBErHeNxGWmHARWjl9Jaj6obcakcgaFnxztz4i5gDD-raqb5GeFlv5fe3tbk6PgTaBza4nC4qRF97v7EooqyP8HexrPYvh6jesUIlo2ccBeYZ_dJnPqU4fnYe0QEybEgOXPMV4GADvs3S8tfrtPcXFvse5aMaV-SGTOyPrWGzYRA7uXxA_O6cQQj3s2IaO7ic-r-xKNqgGzicCclEInPdzZIzhw-EKyUE8sPyv36PtHdVEnD2Taqj5IddhaCMk3fgFuynZR8OzMjMj1MPqq44btNJbb8uSGwskiCfPSeb-yxP9GG1uGXndc9Dlip6cLNfHi6mUb97KFeRNST-Y1yk0J8FFmh8NwbxIUCsvZd6x0zUr6p34HHpsShHt3enjhUwee3FIC__b1i04FvgIE_nyZGSQ77jygadq0QHTpCvOZxQHRD8vAch-25vM5OonolcHZd9h23-XHQwwehU8zyR5n3ZHupKdxyGrdb1bPIhO_8ClBnYYh4XC3pkOxCefON_WTpSdjYoYounLjuol5NLz0w1GwTzY3yCbxjK18DuK8H1KvKlNmpPeot7Ti5TPFoBzZXqP661VW0UZzVdZcAsu83SznVikzPAh-fpiWyjq1QAj64ZuBUNxlG4ZA6HM_pkSvdq0Py-sqzd_Sw36m6PH4vQtHjVaNUkwSI7Ddu_mcH5nronhqljOxLtzZm7B-Qo3jomwxgOt8G_kuRjpOxr2e7YLG-_GRo4H9tt9NwjZLPPFt6y_MxKHWDzBmlKrAtd23y9zqaYZrscHwaQXskMH1GaRll4BSRjRbmSHufEO6iypHfUHffkweoOmHGRl8Ju-nRzyifvz27T8oCPFG9PPl63AuTu8W3_EBt0rUqSwrBnj6sytDzJTq_8TGHso1R9Rft6XeWdQRaWevQ43_A5Iw-CEcOzg8I2zkZA5akaZFApAos8DPV7NPGUB38zQMr-DFcZN3WxKFYXbarTCqWpOVuFEaagriQJ9YPPj34EyKn-URR7Mr4Ojbg2sF1FBAPbzl0bxEI51DjYscgIdzjJ9SKKLDBTbgrmOk6Gm_wUQe4XstU5_yA_iQGNxvY6OfPOr_LCERKsm7jjciypc4370DPszUOnmLZJwvKYtwcx9JZ7NUtZYdzqgcI1kVg3p_LoM4tmZla--Oju7zK03iIw_apED_DeZ-Ppdamx5UPfmyEJ9CyxYow2IDXvgh08U9hKBa0d3ZH1fo8CJJsJV8oP9cNuEVILpXVJF9yxsF_gA7buqXqi6uRcwns2i8j1pSfUTlSrOQS6XWoF3AkEObjpWz9uzvcsEaOyntMhMASzDEpZbC9JlSDel3tBQv8-UT1nXILHx6-akfKpRqRiw3e152lr363UzsPiKdayuuaogY-N6V5UkDbDA10iI4bJSyCNSSyF2WQDOtxv1fg2fNAG60flheWWI6Wm5ks6311V9hNvRhW4WdxbI5cLhon6gEME6M1yI8alh6XqKTDmVeBDn-igdcffgNm8fES7je-V8oCTasfEONyKsKllMqQ54xqgss57XWX6XtNLrh0XVKYwVHQslLJU9cb-rsT80ebeNVszqzN4oUKUV_K8cV9nShNvY7G336EpNLXrwNr6MGTS2etRXfVlHCQCyjuqH5iFjSXcI6pSkzQzEZ4JWNk7qsmr_4W4BpvJ6VKkhF1cWi6iDSCQ75p5kwSiA1Cti0V4lSpOmeGImDqVo1FOl1oggR8-sx7C15h5LRH9fFsDEXEbOdc0iqvNDlsxCebOGQI6i4Gqk8dzUG7CvgXnwU1kZWkprHUG-BISai5pEPZg0CS8jGe49KkrQWDRQduRWCuatXOyNYXfLFl1fxlOarag6Hf1PV_T07uMcJXGtDb7EoiLwrL4xXD7KlBzeGgaqHpbmBj6cRTn97gAxBJe2VSFDX94t3o985KoYPId3Q3xWz2l-M-1YLLP-00JfTMAUV7I-AEDjNQrf6xRnlBrNsZBEh_Wm3n7rSKT4qBW_U0OEy31XeVteETvZTsoPeC8Arzwmc6n4wHTKEsy0suy87nqAJonoYu5qgNNUfwKLPve4JB9nhGGtzL8Jy2_q_ykhyn065tJ363ZeQDegm9qS2MpM9ZP920Gc_ppsarSABYfpx3oKu_zHhazNygsmAhr72maGBuu4AKcZshyFTEf52cC78ZxrjxgJtXI1UpE-ZnocnoAqR4RxovlQTSWlE9K5Mm_vRERi8S1nPChcnhktCHC1ch59KLYaoz0k0ds94feyw6GC93MaZ6xE4hTgqfutJS6RrTPUXID3aHDpS47S4I0v26MURHUJXQbH04eaPXrmsNngZzzoHCM3mNHkGxfUIrqDw2AvADr_cjY1pTm1MtoVz0BE6uN9_A4--3UdbUA0JkxAF_j2uW6_KCJvDlap-6dUtZCV7yqpqK2WWNLT6fizltlBAFXD_2dfA52Dy79B6yCgIzCLesxeruFMc31ORFYwMX5gFd9T7JKNZIfjSY8maUkBJ9HCKCQYww-Lr-AY32-ZXPoWGMK1HyND21_DQhE1hBVwlDR0SoTrAkC-sumRWgJ1UZ8C7nJRYtXGOcUUFcyx1Q9ngNu68_dmpfHW0ICGNdXvVPEPGCfDaM9EJBom6-dg20pADonp8onHiAu28vJb8yYILL5oDdoBkoEhDl4yqBgIkTwKT8ygR8zKeB6bl6SFdkXaVK6xWIolfDICYdU4AK11a9yjafjtlqcKmfhGMdZ7VHhBrlhaX0yfE4n2e5Kl8n27jJUqxLvH6e9VBQSM8CaVCDA-CgVFTVXRy-yemirPppDmQA7nCSSle90_195BraWuNE5hy_eas5Ad_ro4VEqA4DCka_o8uP63bw6ftajNB3nJKdmdV0mXB2baRlESGLlQSnC_wmm0lcu3lBcYMvf7wm3nwcys4D3KdvL7BeEQd1fl8Jl7rdiUHDc4A-95kcRbyyll_7ESZOoyBv-M2I8BZ075Xc5VNrvlQhWHc3qYv-yLE9Pb3QTbKqo52e0Nw-AWqRzkl9en9DzfW2J-USIxoyFcf9u4mP_Y1UOs4Q7prz-y3z2CPmMtXWZA13dX6wEUXFBae3duoRtutR4AdqmTVQLGnJDOi8MltrTq_wp5npbP7dqHk8HiawQXHMTvkTw6RYiukaZ12pGSvfoPj1d00n3-01pL4aageX2GThGFRrm6K5q-QQDejSJfTV3RJQbWUN8RbZhcY75P3N_cc5LmA6u4F2nZh-VwgElybxAz2AS0pHlAdo1QhxlepGFwRT7ZJ9KvcWht2j1boAbHiAssLo9voEndSlX3P32gbm8Ej7PapCs87wat0hEEcTQ1AFN6-hCo-zZSgET5ae6hiZ3AsOv_sbNJry_Mm8DcaCArfTJTNIQTlOhlWhy3lMcbSRUUBeDTTH8JzeL12MbZ_uykAyG2Wr_Tb0Q4GNOllAU1YXd1UVrw7Bo0aNJpw93U2xTtUrVAwjbmrIkRfEFunK-vvMPRwmdrxfAMgxqih62UbWeI_uV4ANm0N7R768Ks4R4RyvDycVLocz5-kOeT4PzSGQ5OWsJ-_4EJxXyTko1hQZtCh5wXsLgd0pPOtGTF0134QhIb9E3gW9rW_VG9f1BJ3wZBvIqffC6Ns9j6_HFZeoSHuuEsn5oQrYd2Fjx-_dwyArTAYl1n51EIAdzBCPak5JQNSeqegQi68SQBYb4sCay6V0QZQ-kHEZEjgbaeQdfMcanu58BODmcnnButZjjjdbSATYHEFKe6rcqfypcylPc_d3OPjrcnUgbbdzAFwfJ9jzKS-dP0Fz36UHtoWwpkR5bp9q6pIOH0RO5PNtK70qw3VxzZgS0Rs_eqAV8vreQYEScRqamMkpqAGBym7iqWAzsmfsg3SaZ6mig1_heu_uG5IWOF0gBQGqSK7C-cbSUzorkpKWMf2YjKguv_snjyn74kewb56cZjU1DNUdsqi1qxy1mxcO6kg-JiP6crvSB-0jgtmkOsQIo6RZ0Z0mulViNhQvbPowH6BvZWqlEc7fJlb633TT3P26ivoyYewSrJ_eTsP1p2UyJLL07-Mnud9FuLcZCClgvktsEqWmd5zdZITeog1QbV5WOuUnnrm-N1-Xh1IDl-c1zWCYDK_Seq6BmTUaSvabIvABdtuJwsRaxw1AWfKGAnU9Ho09X896si3xKIJdG-Z5NFUKeVFk2mrGEP445YyoJRXtiSL8ronTKRd-rPHW4JvrJsPqx1JrMXgoVUN9LMdYryUW4msGFoeqYhcd1O8R0aaimVk-6o0TFnS7Cwxwxte7P4kFxEl3sUbktusqNNjMbqkrIVApisk4jvUXy4tnopN0bggQGc3THTrpe4rdoZ8pTmNSUOnpab-lgmnWQhSaXP6dSvkKrshBWzY0VNsqfBIWZqZUjMaNoNCmlkPfTENtwEQTWPMWCjhudiQTqfE7b9gfoyHia62W0onTlgF0kgSyRjRRWKiuNo5W_6gZ6y6V4HTXGB9DJXnh-GG6L2sTeS3p9rok4Adsh1d0h12pwqWywnYBAH9lAesM9v1pPK1LlzCrUtdPMSL04te8kxGJPVGKtgl9oCIRU54ROlCfN8OEOa-TazJM3bwKX-Rrti3Mmv0WjIMkX71kPLLsxSYpb2JS6MADh_QYMglti3U275pbUIutKU7XER0uWox7RR27PVCSDy0b8L5re4UFiTrSEBPNEkEtsL34D8slsnC1DQ-Iuon2tNDu93QHPBioXNsseSnRjk3z9Ls_oAlqvThqw9qjwQmzJiIkEeVcuUeXhF12PD4lA3zc2NWWsyAT3GMr0o06Sp7eyQOLBkFv1CoSUbQUNDX8LT2eNq8FxYlypHHsHNtqVAhYFgEwJMeHX3W0vh7wuG3mc6h0WYmlAsOhAHx8kdZCRmbIA_tS-_QIqnMZxVZriuX6qk55pR7jNGvqcNum8lSYRwBac-DGmk77uXT7tFsCL-2HX0TZNq3juVrbbGFh5GaYW0XI9GaK684ugqP4przUnRIPb_OWAp81_4eVXqtdTc5ov5gk08cLS-MVlyTq0s7ViKITq7CvGJFwhsWv3NiWdR3XxYxwJSC_Tl5N3p2OKi9pZhgI66MUJ-4KTa1vk84vChC7PXnzkYcsX7lfX2WKRFKs1OQAotpcmw5sCnfTKqynhU-nMJGbQ3bh7VUOiGQ4AFJiQCR0RDehcG6aSHdK17bpjT2qNeSN7So0efSOMcO31T94eYaqvJFVmo6xAD9D0TZh03IxP3PYaCr9bsVYFRTDKm1XVxF3PaMQs1ACXUX2lKlM5cJ749JB3Z-qatkpCvL07-SrHJduUxRQPjuKYFHcQue61Mn2mmzpPWjGTXVNhw4o3oi3DDqjh_w7LAbA-J0QDFmAAgnBqJKLrw4gsHbRHD2cImpKF1GYDiCe8my7OS1FFvVlgHRmd1xHp2XhHjlAOV3X7XCYB5W1eQXX8zFTGhxVUTvpneszfOj1fUM4pRpYpaJx4nuzhjV8o8hV8W68VingmIrM8wBxEM2JLHshrrraMtuF1ilAIP8_Lujt8oYQCL2Q84093cKss2gnbAl7WA1oO50aXzMPxSZ9rkn2-JIyXvUn14aALre2g8gYgpZaKzEJAVR9fZeKnddKLgVCt-qLdEICZ9qxQ66rcea0CnyygjB2oaG6pPz9-CUHZ4TQL9iPLhOjG7jBxqguB6-gtYwAcrjlyWsVF-3uOXG8d8vqBenB7ijL0KjjzyktEjzu8KIeya4NzrECI6ChqSqN1Bb8LMeOQH7nKp2iteOoMtVrjW1mQtPIBbhQc-c4tuiJitipKeldptxj0JNS3g3UASAfuEKZO9h5epaTFD2DAR-HbgDqU7WMc0efp2t9gfJ8y4ebYPXaJkzE5euTQjrxp0VeUt1yPkgmVHSjw5xf62JU0HqsJnVafw-vG_m7x-VurmAj8nXAQcMTih09qhMFWZFTorv7qDozn7iy9r2N41mvmRTmv6OenVzg5u3H1UEik4gUzUdHCSXqmvuxso_fBs7vWuDSWmyrTA5f3S74xNhhBB5PVyKCHNMIUZMKxXTNrVFwXfq7k6KI1g8BXfUDzIYgj8IeadC0LBSAhR47whcJHqJdUPvKUteAVF6Rpdhtp3cGZUJ32o7z9E52PouBk9KzmuKmjSeAB8jGprb0VdDSBZisHDNDlwLjqqjIS0Rxr2t7gBCEFR_1PVRaKUmc6qg0udz0qNYavtZ2tJyLDt1675WR4-EozuqfgUbw9Ah--JTCzU5YF23TEiCFyABFZdaUgLMMHa9KQZrLvNOdULpapQuEoge6nN-Q72qGqmPJxmXB0TsK6nDA6fcXzYcmjuYRIEFU5ALfapGvyL4oklQsTwUNd_pA4e_UGg5So95Ei_Z165ZOkahr5oTjfscMogLAMZ8iVd-L0SnPcj0GvLKCQnRVoFWObV2WanjM02hxozQZ7c3nD1D1PeuZFJk-CmR1BJbL1HVKPLp7mL4xMzk6kD0ezytng8_QM_uPqoUoth-VhjcjdNPTnEkzbfZYFV2RdOYFItW3m4aU-ufFfOmn4enhgF8ZRbFsi5CJGPezpDXc_T37el0HUHrByrgk3U80j4HfTJAQh_UDAFPXtqrqk6sGSr0MDcx3Kd9ii4NeRs6GU6ujN4oeXacf53_Q4cd5kR77-Ori9NSxUPlxF5GB4ajwuW-XBq68c1gWDegApF2NMztW0n1a8yAHKiEaAOsuXHtBN6k-e68tom6ydcznK9ONgtAxjk0L6vGsc-hYnhfZMUZWoMt7rL1R6U5Ne1B2TFhDeRpcZLur0WiLAJjq1MnLkC19fD-7glajr9XuzPDI1ndOPY6IFSG7XfwKNq3SkHqZgM9fLacdA_bFnky9uy1NQBoWzTb8AEFBK6z0e4mXGS_NY72CVEG3qVFl9te1eOGflFTJ9UN-iRdFrWFtA1LpOqwXevLo6W8Y7YUCbU_uTpLkzCw5eip70lX02xrAIAd7Zqb7vqkuQ2DgOV4sGl8bP4qIbE5A6ZTn6d-gyYW3Oj3UFSpsccr3oHfTllfpSXxxj-_skaO3vEh3uCkb6tKMNjRoeHQyVzZyeXsowWsVcciG95EktG57giLqr50tnY3ISZ5E6p9vbDisIn5f-_B4BfkXHibmx7Qfesg5dmSorPv4y0s9FXwu1JXI2_rMOCipZP-YYw-1ypN0ojFqUyq8CvRt4z-wUVaInpJkjw8kDaKPL8FIRSSR2jessaM37QhDBLTdC5TH7Eo4A-At1NaQE_AZynGtuyTl-megUVyRn7qEd6RY0ZwjXom5tstVAJOkkJI56KW6mmUFmZ-WwvgLu2dPCSc7q6gVPgykBkvQHdwGQLL6ygOqAyeTtlTTHEKxmM_m3dM61iA9xKYEjP2YMw38tMsUTRb-Dr3SXcdawXA-o6ZxHH2UVwMxZhmEBap6UZ3K9K442-n14HofKDS17FLCKTuPjPaztwSd-Bldr4xuY-rD5ho4425LnxqnPw1qqOO5r6-7HWtsLrFqcr0u488D29hnAJOIHu0ixemWhcn5cMc8S3KFyyRiN0WxRNcz4Y5Gm2RvPq0QzXah22Zae7dKEHk4dN204QHuPbyG6tkKaqpxyjA5k1mzw9yAm4nq0DSHVR-VeVPqOr3nqPRjQgG7KCtmPnKccHdiirf7-eO2g7u0YughNVUL09coONKtBk4aQUeygd_eXtV6W-qjdbrCAJI3cPM4qQopiHtHgwDvc7wmxDxsaw0itr37ZYoh6y4loq2hcvdm9iU5HZtnyvSI0kLg2zIjKgpey04q0mRc5Y7-snOoIjmE2NxPh7vXQBx-1q9QxH2qDK0451SrHs-eKsAe-nSqiOhWvn3_rETEsvdhKlipr1HVInU_aPwyokcQR16uS8CnlWzCKPBA7nyPqmhijBMgrdrOcLdo-2TwdA0OkR_C7SH-qSLqejWmtMDxXVA8-9JwrhiXhcBYbgxG7Ygzjd1ELtHfS6rxaiGxTiVIh1UGhSCHd3dKM9NlCeuphmMwTJoCeA17f76JEEMQZVLduwm3VXfnm6g6SWvOGaOd2nqVbYTZ_o-pM8mS3AZi6IVqwXm4_8WsD4DZ9ipfOVspUWSMCGAOAVd5IQsK7qstiFfVR6Y-RObBU4hsyuv95S1W01ZVYiWyhY91iNbo-_PVejZ9AzYf3fIAZ95yoJkm8y0j-OwVDCuUAL2fWc936ceNmLYxk4xOJnidRoCHvF7MCfTPeRLSA8t2EnRP03AP7fgXiU3gh059p7QQbSiokqzs2CEDpL0J4tCHDRCszRKTqTd22xAb_zIoOqfBWsKaDQmqJCVtiBx6eqdqJPeSN7mCNyDo_DxIyVcWqdv7jBajfXRDB-oFrPdht0Sff-_7pW52nj5VFRx-9gsBiX4TFFewRlMccX5ioKAuiE-ctDqN30ckcK59810PMzTRwE6LeIooND8-oe3IM1BE_UXwfZk2kFODr8zH2R2sQpvvUcOuoM3lQG5kxTATAL1cdpN-5QlgHEip9duxx9sJRl6xdbMhNcER50Zdyc9IecQ5PJIpfXsf4wcMJ6KJfpyVIRzQEuJNNDDdlp_ihfR5OqjV2SCzlWeazNBElZcnk_29qBnd-izZpROlzAtBASNsSdGH2cPYaDA5ecHQQ_aCfZc2o6q2bT8-W0ClqwOEyzR52JEEiUidk7t-YEqYSt8rFXrKx1LjY7bytDZ3osKVqeoOu4z143Bss2XNNSl1_ZFQUbVpZBkh7m46ocrjuzf4iLHeQ6wlXPdIgULLzwD7fZHpiUCe2o735HxRlHqH5EJAp60u2uXtf8kc8Y2pYdThHYtRp4seYJf7b7_Oly3M5h523jiqB2_fwyXpJzigtb0c_Nv2EttkhlPYfa8Xt5o3NCEx9Emg4HT9juF_L25uKu3K_iGWSHuFa3y-TsqIeEbn4quaPN-XgxLWOxMJ6pp9ri7l9JkwF3Qnst5uvS6sTt77d1CO4b7AgaZV7OEuPxaC6xbaOi8rFypV364AK7qXn_7usHWrMLH7gAzlWf6HTCr2_EMuuO3tvyyuxxHTkPUDDIvPc73vRgABGr4A253LtHC3FKO6aFgtZ6ywWAQZAtN-UAakHY9BEzKulHF0HoXB7oiWbEdqIP7v9aNcAET-DQroCqFpEN6axuCSz83O_D4Ww-hQFz_TlWXGod1nRX_4OtEfQgTMZyNaqFGJAi4ZtwJYRiKdp1wmjX3GwOukwCuhMmmPsV3B3uuFUzd9GS1hf8urZZRYbn7RgjWQZEXb-NjjzJ7dURGp89pqZklgaYKO-L7PwI0k0yJdTJUVwevx9hI3teNPDPbXD4q-UC-Wxv3w-VAO4zRCxVXfHFXrZMgXtEHcyjKt6QulV-yupgjOi1iYmVJ8AwM8LZOr06uaYxoBkvasZp-ZkQ5gRL2MvHIGzKAUZ5mqmVRwA2BubYKJvR0BXDMGDj0hCYC-y47IkR2a7_EVmKGRHQWl8TaYTHs2x3rAN6y8Z7G6SPfSGluosxgVM8V26LcSXny9wRGiL26YMCv_TkKn73N7iTvVjGDNFyNPNnYL6n8h_mHWKS3nEVCnjQ_dEY89E_PCEeqntpOSnxg1XVeI76OmrKD1eqidJSBIiTeCdz26NbBor3fKmmphvm1N8vx5svCckjWl6-Dm3QX46lVYtF4V8MLtYb5j-erT8rFJKEg_TjInVQEFMdvFd6aCussJME6VsmPj-nGHYHLIpq2uABj2dGSMiVupDhkOJu1j3-UU4Xn3i91Sv7XbYXs5gvlecUoLU4MVtuHomLvoMcHSuyak8SifaORILPdN5Uss_zp2TAvL6i2Z4uqjMb6fUGQB8XseA1ZbU9LTbygeWMCqwk__GpaWeECgYoQDm8JtzZDu95kC0U4sDhWdu5dLEtMqaXd46V0iQfdzvTMsaIHyc1j9cuQh-3bowWkuqbZRenY-txhjTXUSObMy8mcyNO9gZmx8TmA7D94LVEcZ3vgMo7uHAHHafUdtQ75oewSVVJrFFFrdFlHkF6PC6FHJKagoLGmLwCIUzBjEtMfVA6hzAxFgNXuQo1NsZfltsrzr03-kohZjCaLRPm4L2-a9Dt--vivBPS0-dfZ6fW6Z2DfKfUEV7pgAfrkep0VzrT4DMyUm5XfJMua0ChTuH0Q5xiUGdsF070Ra6y7RfOv2ZGWBKrTfO76oEno5rlWRdKdXlCi6_yMAsl4gI-Dvt5c1NfVWxq_ZQEj2rAnksF0iGNCkCmXoa0_TlBDwUj3wuQO2ZJdOAd2gpl0NV9hcAflnLZPIkF0YgT_meOBFbPvp_rLpXlsJMSgTNXX68im5aD5dFKXQqaHhpjNIfpVNzP-254YQGJBl0xohFs8rZLRvpyUkiZpMpjGeEIcIuWA3EEa0j6LxhrVhT6OqN5CYYc_I7F4OLz94XQxcTKYb7IQiV6tZl7PmSyvF9_Qetedkfs-3tgvIm03sStQSld_JzUEoZtMj2Jsux9_WSOzIXEByPAL68xb0Tk9ec-k3-UCV43o2aTERU2VkvheBoIU5xMp4wf3WtJ9NZAVKmvVqkPCf9ytfvqQcAtaMVDBZxulaCizqxU4cPuvZnUk2i2k76NEN5tIg6n20LiQjJ-u_TdzT4cGvebOcDmN5ABpYVJm46YvTphfpX8AoztF0fulOIeP8fRvi6CXGWBzzSrq9GHAzegAWhRRIKJ-8HHVrL-pIAIbHwrFlhDXZeZsA9XQ1SExdtV_ittk-akx_xOIuyiL6-K0-5SGfLwb-sspfqu-4ECLJec9bLZhltLZ0XXteJtai-NzRldNybrXPY6n06r1bYY_XFCgjGjM-TBx2hiAMnfj8HuiyRN1gx7pDBrAdy051A16o7-72nC97ORQPeh5GcHAfkCUasJNnkXATN6Ju6zZA5rpHtVHuai9UpVDtSwxmowwXpL-yhfUsVWM77iUeyiRKzKtGWm24D_TPMdxDRHbaJ7CIVu9cMsqjTbVpJtjTgx2e7lKirFGe9uVUb9UPKH2-hHgQ5fhdQAqR1zI_CyHOQ83N3zRvYCQ0aOd7QWVHvJS6fn3ojKsZER17gviUNhmMNJwKyC1YMD7O71TbEW5414rCtA2AMz8C2Hh4Uwm-Q5ABQ_s4mrfGeN3rjTurGPNsb8QlF_biNt8pprDtWiyv5HX9qaK8XXJwp0lm0VtYDrVBChfvRYQwFAkwiGQieHU6ritGqLQOlya20p84sAVewqfqi4qmM1xC4aTXlKea7x6FmyxbN0VGmg7DeCICUgY54g0xYw7Kv-VZ3kT09CQwKuBBF4su9n1GVmkjSZRmuaalnQKDyxspQ4qqKiOBm6b01kWYhbbEBc15qYbpmQazDz6ihblKezAohmKRi6ir8AzAEGno-FXeR4MA0ni5r_1tbzCgeiUKrV0LqsJO6Pc2-rveOEflM9_nZowj98ygtRviyCxvXw7xk-4dvsY81pvFmY30xiHLH4agMwK0jg-2hDH8qBsoY3l250U_6E8-gJKUCg0eovpfDD-S1bfd3CLzUWVvCfBmMyHq0Nz99_kkedATekzhc1_LFIlc-eYoMkQfIk3p3LhIpgnKlqIPTcVnp6GYi8-F2ltX-2LT9QqayCUEJgFE-RaHnDiIxMNbhcdgWIYIk7RvmYS8aV_0zFsiM3xs5hZspTVRnEeYqzLT4sWHi4F-kdttXzodtAq72T4Z7Z82XmRW6yuxE5JHHZJtAv1mlhH5VJvK3Ym9XGcj-c4qsqJCMTB5d8UwQFoFmZKDt-8VJ8T6wpLoaor-7JW9vld_349DFDOu9wyiq4a68ea302xIuaneHt3cPAILYmFqX_bKDLF7GhDG6uXqFTyuZjXuKiUZ87nUqLZhqiLpdUrE7eQ-P9v36vbMWaR4QE50w0cDD5YrwSxGmzH_u9545S_YfyBktuV26Cwe0USkdJqMR6YQfwIAohJv_SrsI-0_Ww1Y5rUJaK4UBxVbG3C8skDrvxMtNb13rE4KwHBdXvf9yWG6cTincth-pgBVcr_5Nk0LjM-D5s-GsUDf5LIXMpw-B18etF71BMJvT8NTV772s3SUT-AwsNwVvzZGd0oLmhEmt3yjmctrazkg5ucaILJPMzICjaWUKr60_2yPrh0xCejNHsnT3zwgk1c6d7CFZl6BAt9w2xh6PbNZdGlxebBRoMvrCPEzPHu8nBRR65PfZtJh-e7OOEba0-hrHlRCAvCIuISw97UJAD5lCGNT1bu-i4pe-M6hUV1fd78fpcAGA-0ZNbKxfmvSkmmJaD30chvnkIrbSR5QwP61M9QF0BcIrW2kgCovF_SgUl8i0QK1u19isEih38v5gqrj6irc_9W1j02zwBURdtyOySas8bwOQ4rHE_vkFd2lWnxPc8bEbs-5ZQR2u2B0pDLp9hxadH58uOcexBEMW89pRgt25Oa_I_qKFgyse1NrLNfLRun0_IKk4j3GZLdlwzpONhJ1IErhMdILU4vU56mRdfmYwfZSMhUuJeTm50Ng4jp1OiLl0z9cSyRP1eaxp_L6Xa--zjKlxD1sur4gfNktIHYb9DNAkuF5awpfVmj5boPUNTnqlDqKPCcIpOaj2sXapqovUXpqHN85LJai5xoYSC052-X2d_JXDD3IHZdkt7hbbSWA1NqegdIYLTEACJuSj_1mqx-Ya53fQJTmuhzuNhE4NLmIyyp2gi_Z9vzbp6PHe1Pl797qm_vQO2Oe1rvlSFTZR5NOjyVamog1o7oBsETpHbFVt81iqgWe4SqQP0OPBth_KUFapRdmej1QEd_XTKerLJu6qeKUSy0VSMaRvyZ-FWqTOhyNUG9C8ArV92vaGh8xm3h9XkTd8UU0zmLvjwhIXM3j3NekwNShQhIJRcZ0uauYAHv6xFlnnj3GvIHXmx_1alXz6A3EnhhnEf1VUf9hJZ3p6S5-Jh2dGx4QmewvgyImpY_E_F-D-LkIlAeVuMC2_jVBkJ7Rq-af4q93iNkHwM8JTBieh-nD9O3h-c7HEfY5S7H7r235_UtUdhw0FERRs03XvTk30nLXksPvHWgJbB9SUe4AS4obedAoDgMCvpBjBq0qgXFnGnB3VImMycssww_Vq3XjEG289HKOZEgcRO8mdR3d8EXz0eKyRdPSfxKXguHDepXkH8s2GwsnYQ0mEGY3EAxmsuV5W3Gt9-2HqyXdY5FrGzdzy1nWSAa-KDXFxmN06e90fXemUXiOqnu6ywsEWNLZONtjlsR-NH_T_MsTL8mLxoVkfnqJ0iKc20csHtPZSc17hD7O5AnC-FqnrMMOv0NJyiyCRGMQyAKTkyMyafu-99-6O86MSr_C43f7MMDl601v3T_5OW07fjHLi6iXwQOaD1zk0qa3pYb-ortIf0E7uCx6NaehkgYCA9e0LnoPmhmgZwTGIJ7hMFHtnwaSYMDhhagjVUH0x_N-hqIHfYE5gbB_ValHCoICpnlbNwStJPH7cTFYXP1aj9jIuJhQz96-ZFpSfeTM3p0YQNZ5ZTeMN7sDj3Erz_wQrOVdgV90eEUQvoRHhbNggB66fCSlvfbbd4dQj5-R1ok30oEUx9-eCqr02uDFrN5IAHISojAFbYtxmZJN9DAib8_iQ_yl-wczlyson_NtQqLobI7lbIm8J2wvCY_h5nxo4yr_6fukxphNgrTnFpIDqr7hPXAIwfys8O1NZ6N3zb5fELOUdW5t5zUcmFy5Np0euLtC2MT4zrXbPjD0Z_PxMo0Fh3qwGrhGe6j5oWlXlGwzuNfMBCsRorIT-54a7iPtsoCUYEXtHlRF4en2_N7smXTBNVS3Zan1m4GZmHUE3K12qOeQAGflYouSjeG7aFhnsn9PwdddTh8SnFhJ-rJ9hwGjqkdVsuDsPVr287lBmAgdJ-Hu2rMf7FZVwO5nPNKsAApTp43fltKoPsJaRyrKxwZpul-kyMz8EWbm2FdUqZ0gze_-t7fWhYeFABs5rtbd_BG_p8OHK3KP6l-TGo29KwwhMtZXkEiP6oEn8CwkIX4XUQB9k1KVs34f-5v5RK4-dBfQdR2Tl8DWaokLtXK6slCmxWH3sjWHksy7GMSCGi4M0JSlrfJ95FCwUAOmgqZ1QIANihm5NSb97Ox4-dMLxaZ5MAcY67YhKQPhpDtWEmAGFWICQUX1Z5VL-23Dik3Ji-xopvkyZUzH9Cxzt2Il_KQEwH5RgvJ8a1C3kngjtcS9baAPDBpSHxylm8CyqzPcy68fJFZRGeuLeILNb5mmI-_Axbur_9_GYxpCC4roXfwLhSTPvbB2EEDZ5IyHZ8b3TxUJBgov0bRkpIk2ek7tflg68as-YNEXQDysL3Kaw-0SPl55B6ay0J3RjoE_pfgdDmgD_FEDnd3fnZJ-UMG4IlIrd8VkmJGcfGM1MQhQKeJ8aeUYYlcip3pV6f4reBhNBEB2V5pRn5t2t4f7Eei73XdZyF7sHY9qIj5QFVysn44BXJfQBrXMPV6RAC3z9foKtQuaNCD_SV_6YNlNToMazzgxZ4vCvHfxt4883U-GV1OthYDazcsrweLq90Nu6eyGYFkDgYMJ59LenoSicHuJkPYtvh9Qfgp7IPEsw7aBpmJPORRo6vUlKMnt_DTdrmbfTdU47or2gH0KXt5gEYY8DDbwaWg-GJ3ubtEGAAzsQizJyZCxZqlmMzYbFqTw6UG8AJYzzhg0VrYZCvFuARHpN8tXiMt-nhSsgGCdlI8wKM6YW6jGCZb2dpeMkVdr1Xc1uHP7mjy0F_ssV_r2n43TAigTZ1jOG4oQxGt4VP33PlzUxHyuVz_nvekr_mw7CoYN67MpEGDlmTQhpfVCIdKAQNLvmgiIOYyZsBDozYpNaYEJkr8Po3Kp5heXIogrhrEIqKKUnirBt3GMpqs0D08i3NvMUksMHGAOw4ptehCe1u44xr2jlu4cSey52ws0q5QcNN0CMbdBKlCUO6qHtt_c6KrwmNt0UKa-moMfkil3bv6ZkmFqX4k4E3XpqGtsWikys5TlpOpYdsqgh-Jit4UgkF96BwCvrg31lwD35aOyuvJt1QeAWeZEQ-P2nAOOWM8BBR08g_qHm9TCDk8yLs8FfF4lluOL7XbJy4VMY8aKoODguiR8X31564GPVBsHqyUti8N3qQfU_DtKDe6JDw_3yjnAS-SrabhE9YALoUGNm0f9t9k5GN4wbS3MxmF6dQG_OVdUEnQTi1jTB_WzslbOE7Bn3CdTA_DtwQrB6KTJ8RnP4bUb0g5RFqjBoKLxdKjUWoS4oCtLVlNREeumpaTm60MtnFzAsTIBblGDBTkPAvIr1bQp3FRXCD0ysv2FeeSXfpK9I_UjTnNThDNeYh1XmMBoEXrpgb053NgEgN6HkKoaFQqpWX-9IZHFxWU2pgK3vg2Q1TgNIJjvPUHglXlz7PDJ-MyQdBhnWjAG43bUo_Ohr18oVbIXQBgF1LFUaIqfRIYi2cvZSpRZ7_LZ2jg8lOe2zxwVnemzcYEo2GWKBrW-1QrCdwHqu4Eu7Z2tBV338NgFhtGyZcTNanvLIs0ZgjwIkLrr3dB1jGrDyDyn2v0QQ8HQ9WfNolYCEbaue9753Bk02WTX3qcFAWS7Dia1akukx7Pt93frMfg0fx6x95-_y_wQWiLdmFC5Gcuq0Uo4ZhjDKIt0Qq0YarC_31nM-zf__EhEc_C19oO3q0y9-QJCY_LAlbaBVxGmv1ttVBgD2OonD8nj3FxhZkaHrnjxkDgCvdDaqIgLKjs5SWHGPTMMFIhvunhsghQpqWOk6UQhvCbbAf_tBBY64POSdStCEYUOU8xyFwA8bKv68egAKzirccMIy5yEil-00iIBrZj7AdWQU3sp5WdKAokYNJQMpOSs96K4l63IztbHBRkcoSxfAP2YUdSa-XMmldMWAYdt3qJhirmjKzDnVO1p6UaOnAw0k_L2vtc-bBEB5AjVzBwpVfs_q0gwFsO9V4LlHXo3lAlMNKSWjWlk0K7XPxuMsb13gzBEjcVAFOg6aEc8bb0pbthNr68C9X2ZCYC_uF2NY3bR9WgZtgP6Wn3sEo2QUVH9wFuZDC84JIQZxm8sgx5QAK2wMaX9hFZk-hZDTO_u-87x4GZCghrMxBxhc92PSbQqIUKGP3bodI-4VVOqg1usvYjzUpbXSkMJLS5pokil8f42qq2xemiPvM_YyLtjk3HdvFrCkCL6QM_FppSFaspxfL6BrE0tHgwuro1eqeHYD1eN43nHf7_uiiC5T01hE4x9evgHLo_54m-ws_694CbYa1h6Z8CfM4FIJ5Ga5OJVzYUTLWNunAhXEiFFVygH58cZK5XfhiVLfflb_YD3j2hd9wuTZ_XkAKae3r4qVWWHKxBBuNLcQVtqDrvuCkf60AqQSRkjhGLm49-pIgxLL7eqcGq0AROZ7u5B_HRTRgFHO91VWWgFu0UjvL632nBy6n5UKy96gHNqOdvg3s52stjkCP0r30N5VF_QLpNAHAG7W3osI9wXKALe7k4AIbp7IQjx3Jb6w6kJjgWXURpOXKvhcHYRY5jyv-yt6gYTMHkGLbyLnHTwrinlXB9BfAK9Sb77PY7oF8D_BG4Hvcs1CJcxaYAx-gLKiMW2jalToU1k5jyVzdnDs-gKAP6ESBZLwY2L6UylDN_vEimkzABsnjaq1AHUz1DKmQIQEalLPQMK4wBMvryiWzeHCuFYLxBF7cXBB8qStz_ThVKDnwnDTFcNc8UVU-IZ0sSLT54n3ORAqGATzUWMu9VncHAScxrsPnfteXBVKPUETCAo2xKTxvQqwp6UqRuU5dp89RCgoQk2pECWHFr1BDllGEiGfg-gbElpASScnQhDBc2nBLDT9F18-_pqcBNc_36xGOw_7SkzTFIZG4oKhNuYMBLH4xFWlX-vOlWw_52ddwg5nzcaY2cnFY4v47j-7W_tdo4fNV7tOcmEbs-AY9oIlTTAaW0nHT_A6C3hEVpS1TuJm5CKYhVPsAp2VTmbO260dczBg3CTXqyW6IqKX2s4EVDSU8M9ada4Ji1R1ROGqKlPTgGpuU8BA3zFr_II9-OPAGeKvnDuNbiFNV6E5gJvYh-dWU4NTTlMkjaAy0xXeB05cBpZCS3oamtTfpkLrIesFfyQgZBrpC3TX9ekaMtG68w31Uwp3Sn4ebNYzClXR8QL73MzmwQxqBLEClWa_Q-hhUmuBl2zfuzM2BQ7JTRoRR05qAvgjjbNj-MlucrNU7LS9I9yXkan7PM3QYaqP-ANlsEpjEVeTx6Jcsu5Ci9gu_4quU4FMsxKvjlTIF-z_05pi_cF-x78DsSHePnj6oCzPZrfGs01NkFx4ZSNBRvpqzFkVvVInrCWkW3E09s-kNEu8318W-BYc4b2kUbzt_J8idkoWsYwelteo111kC4TzqJJhyTmF73Tvkw2wPS056_hml7qJtJymVdRgrictqIEJkjn_rU7qPC62FYlpHv1z5CJ86sBPBsKK5roLi4zst6MPvqe7yJKEVQjlak_mUMo6VPjJ_2xHjWe-lgNnqirWAYFibxVooNLidBSY0w5jQgqbuZv_wS9m6BmTZ8CF48hUIVwxn6fgoAhAgx59ZqB7QP7rEsewE6NgEf5JmWAQRbn10B64-re905vQA9DuqojuTjnw7kxubP1YArAXoUkTejG-8RGwSeQrH82vDyqlS-jtJCSgsfyPAiyDy5fYzSoBeozqfiKyJtEDTwLzj902s0wwrRwxBR-0LM8EtR-ReZhpkkOwHb2ohyxLe9TZFplCYCNFoO6mDggEdPHKpZG_xUIjauV4PBDTlBAmL_ZvlOKoVkQ8xkNp-a1MChSdXfDnsm4-Uwb7MhhNaItmPLppgsYR03P-Kh0R1VmBD2MXvnIsBrQzPWmSxmJdcXvQOCgoObbheVkVHCIc3O4AEUNDm043KcZsvEtHgUYqjSt5HwAE8prRnsGkxYE9T_n28jy-PDWqtRTzv_kYig4EDa8LnALxJn4NSS3311wrlIFQtwiBAGDcangpKXuHEc47GJlcaibKZFojfuLnd4aQ9WbPGIn1xcQd8J1Q7OnmjavhIMldAfAYjCWviPCG5UAyIpfbZIx9BljmOa-XtqEQMxbGeIxS8ATrXFBXe97J6-jzZiyS140I7tjTmYR3-zVt013SH8InXczsOeSSXjNEUkeI2mHOLn5OKgpKZ2RFrlr5dA00EpT_IkIrN7wt-0xYZ6TayI0Pdrrw-0NVrj0k-EaVIZd5t5yVW6drWqcMgdHM_lNL0GgAF2BTRAWjC_uT9edF2aA7ZHUnEtt1L0U2tAlxz57LxBTv8r8NlZGfIBXBSheY_ih6c_TAdNfK0C3m6dg-NtvoPTgu9mde5e8L4TJ1EyBik9DDv7zRFxZf6a73u324NCwp4IQOO9_EJrcHvO1pQis5eQaywVucMGGqgwx3g4vOD2d6UWcKPMpoIDhfC-bpy_xdqeR419G9XcpJ3grIAvtyV0FYSF328hItKONBbOx9AZpMJBisMqEW6Y-41jsEN8zDNDj6hr8f2YyJw9zggIMPwNa8ACezHV9azE1YscSdmu6DLV2RnoQYMFsTnGQw-kbt2jvhQaoMfSApB-_P_CC2FCmTgI8K4BbPaMD2hSFgOay9Rxv-hJqsvTvmfRT0PhZ_JIoTRwvbsBcYU0e9mU6yBX364irYNXOg9iu7uMDo4_3FUrqZ8QUghTyot5yjVcjXiEBcgx20e9wcrs1bjDEMlfDGjWZUo2zgU1HRTMSVsHaj9qjUODJNHxxQnV9kOpZ08QqNqyFflCpg80kw7SoDVxtSomc85gwT_t8ubjug0KErjevxxzHuUVlc5BrC1w39WKRABL2HAG4pg4MYYAGnSxDRwDvsB40xjUKHTlwXrLeJvhJCxkuEJMOkwtranilOZIDQB5ULpIkQp2WTo3E2HNumQ7sskWoRkzN7LDwDHx6MYeUY_goOgynajjdYBJAA92YalPRC4VDXnMMNh-ipFC5j-6_6RhAAfZwlEjeWLnVorEtyBWBxImVIAJbT6lOOyyl7i9Igw4sn1EHcTIqcWU3MZqYcBRP0ygTFHbztN9GTEIOeQGZgz9LLJaH7KA1lLA2Jmm7SfY_a1lL5HyLmFH-hNO8gHgUslK_3gnlj-QRhcNeyxyV2Kua1JztWw0fQZHlvAEEMw4pnoCQwbq0aAMLCjngfEhcVIhfgj0_8FC5XwmPqPc9c9htuWGy0d3xnVFVDdSDO6s3-caAf_6KoECD_dwvlU93mkRybcvE-OrMX7_goPqBoAYtTuMaVYfjM6Jh0elb_xxW8N91SJ8ZqyvJRdcGIBpKTRzGzaEWAq3DaRcu0WqnStCnHZePUUmaw35JlQZ9t0ve-ubNVsWVV8ldf90VJFTiMhiO7D4B8EpZg4JrzJQCqcbDDXHtmGdADJ9lJzxWXRSNQ7-Yc0jMnbDNZsUHgXmPqy6VCYXtchxg_CSQ4PXdHJYiiPVuK7VgIfOJqM4JUVSD-NY8Jt-rjWICxEM98ccUrs2FdNXI_qQk850HcTm2LvEWKx0CodqJNAqs3S4jfcuXGAhBRmdBjUHG6cSewZPuFwNSLABlRYYulDHhZNxKVzMsoxgtOu30pcbtfvcUgq87uQiHVsv6fKH4iNh46zMz8geleG-ky2F34F8TUJEDVtAcbuMxO-sqKeNIL14aggT5KZTuuRgGQbArbsw9WEGeAb4byt_K9L5J4hCyOCGSWccjAkQ9d5_XIdf4Yz6T2qfEDoVdOucQ40-xHA10ETKMNwEo31xwLwGt9V2Gj7RbkWSLxAewqu7wGxbrbovSYUNf6SWUDMBD7AfzPw9Ief2aChVoiREOGPGbSBQNw5t0gA3o6rGIFHxrpNY3k_WXaQ7LcwxG1MeIeUVqycAFSaKI4pfttKJDJjMY9sMhktP3d1ECr_zLm_JPHyaTYb0GPMEruw_WTO4PJs4zvEjUhZ2uQDLe3ZukhWK5FoZ28S1_gocLVZPrNusKqRh7m6_LHLJKKd9dAgZcKpoUhjPlX5jluMZwFDRCHO-Byu4O3GAsn9NPwdiwi4vA5kznQyTW3CHpkqWR7KaclTXr5SauqtsMY1Gx9xUQ30is9RlNl3hZhmU6H4qwphsZDPnUwMC2sCZv9IXZx5qYm5bN9a-0kxqUVHyMxZIciBi-YVm-HBjqxBSihySZIW9qO3XdDdGlq-ZgQe121hC1gvD-pWWoQP6svQouykU7ymsKy7ODGX1fjudhknUPDHkJ48BJadA2Nr4ckHd9AXSbrv8xseltQQumv4-SQdGjqjLT7Aq-47ySVo2V-mCD_bTZV8B-NH0Fyu83RXX4QZffTpWishwdikA1nodfvnmk77gYxSZK-VhU4Ji2RTD1TfUb9PgnTwfuw8A0RtSMpyWGgT3eISmUhf7rctIwbDqSR1H6mgIuIQM7-0ilea9X2JeggGdphXI8J4cTCncPi9zKQKdtVakRGdMSpW5IW3D-86xmMOLIQj-tZ6KZdLNakG75IywM3kQM5HVjI6R46WQBBG9VIwEOlPE2C72BnoCu0rxK7wK4isk3uQhUAboIiHi_VXV5T-5oFc9QDNED59RSIpwn72mVdxst1GFQfSBf5b3Z1JvjYjT6ve_pv_bidJYiW0mgon5MHloOk2WjN-DmPfCW4eRYM6J-p2DvrQlIjfLbLYo3BLg4rtHwR4ceghjEBwwk59VqoC12PQ6AYR1up0rsYlhofIN7ns7QmbFyyNLVPrn-blETn5uo0jzzxSiP5FzB2mBjQR93-59Nz5q5OQegwOkUfV_vcwDyaeQpJT75601DXUQZGn2DsQXgne-hFc95mejcSwnyC8-K7QIKtBWvUeQ44p2Vr5mamh_CuVS7OlIhRXxAJOvZbyMBJPQvfzt_u8ND7urBLrQHy0rU89lV99uxbDQf8zYEwdHWBk-0dcoZJzDTMlMtY3j3UHJOsIDHdZgmrEDxDMWgUuEkfgjLuXNv33vR_LaKmecF_L2nvdiojeWGuOeTj5UOtN8tmbtR0GAKXe-Fi9IzlXw81XAr3cT1pvq-3FzXGIA5hGAkfW7xcwNmyyz8hNtWbnfQivJOapC_GgOiCpV9DXpq49oZbwdFCmOwHT4FoF1O3sbRruPhGWpPwQlYeX1Te5D-F2-r72B7RIj1a6azGbjroj7RAJjhHhhriQ3WFyiS-HDwAo5qj9zmttA55BbbbNbKNJarjFLRdKuTdvARyn0MzRv4h6f8gK5A1U-jnFDfrpNeFdWeeHSBQIuvBh7IB4XdPw33oapVlXfDkYW4sCu191olcqgJW3xuKafZ3VFoP04fBgzyw8EIuHDHGgNTbqPUMNUBnY3qKXd9JtARZIKfPqVkVYZYWrmhLakvv37qKrnG99KLuwADgT_bOwj7izF21IyOS5yMAd0ZQ0uZWbHGgMfuOvQ7mCg_Hs1Fl7IZ9CrGt38vrMaW0zkpx7u4IqIcb8c4juoqggSe2LtJXn_9HEPKibxHqp3zZ4E8nwdnRztOE0U0tt7IpRjRVMptQm1p5kMT2voJyAbtoNW-7C94qOJj0BsTE64uTJnMMEcC4zlTztFwoI5KERW7vgtawzWVL_KQOK9ukx6zC15YlM_K6GpAhlxQIU5QdcwdCjrDASI06jEBTcBtcmObmII0woRHMFsibN7XPTxWsZT8Ok2pEacqqufEo5Ra7f0WPAA-4d96vJoyiKud84t8uKsCdsc-JBusurccLBI1nhC4-7L1obTdsimXCuFHH3fJdj_SMONBmL_t0j5k56vbr_APBL99U5lRucRig2v1q0I-3g4dKcAEm1REbp5DoyIJmppmTaZu_rMGvzcxep6_VQuTYp1QB3a0sjVB44C2tG6Di5xjkk96-KW9N08fT8eIKNXiS4KBt_vsHtMD_B5sdx7H5z2d5v4Bvb3hwQ0BZaSLLQGHattBaaaYYP4oY5bZh2atJgDbgM1jGOsv4t1CIPjYgycfjhrUmEzjp4mkwmFeKS0bFHThy2TgZxyuTXHYh9sAqAlY8hKPsqNADGPHdJkajGnx7AOjcc0YBKiVvovr9mm1_DxcOcM2B2jjtBNlIC0JC0d0BrU7wQSYFQa51hY27sFkftDY39K0kasw0mPQLmHxtfIo9aS6vVNhorMrnqovTG_PW2OBUUqiC_WO6whnLi-rma6XVgEzzvpIlJTQGcd0nQVrTt57Edy5CVcBi7IRXIqjyKIdCvRiupgHcKJqtpyLISbjKAd1lPqKH2BDbaXpw3iTh4lkyBuvxOFTkobaU9SfR02WO8K1xW9geHxhyiDpgLL7rxgoWds3yQKZwZiJmSaC19lrdfskYbGHw-8JSN1DHcN0xHo82hN5O6Bt0p5Xz8UQIuacS3I8nNQy7gtg83GpgWr9dhfExFX2JqgovK1IbU6BxwRPO_J7yJ_dVD5K6Al48ePll2Bao5VG0WWbD5eXBgGBPqrfK8PLqN283gILoa-R84q4ajrN0nDeMUFOeClApB2IIN9ZOVOfkR8OhT4bdhy9UKCd3taIo2ZKbkI6ng7-F06QE-UQM8iau4fAaeQVN8Y-vfqM_sTQ1VLTDWTkysqIRAAA3vTvVgvlNlejnOCPW_BiBV_1DTNJMNcaUXxc3WhNQCues4KzrpsJbMhHlvgVqDFfyh-eKAeqznMoLJ6SA4X0r-8H5mcj6oZOWVrjvOLwLrDkvbjkhiBJ9YyljteybQbo7YgBJpLpIOm7zyP9AD4eeXA9k7Xfh_76AAEIRWxjuEBPNJdDJ2CL17fWRFCiz8KMnr_RHv6QyYxtUDgjKyOJHv3-mv25kBHNWwWnv_KsWNvjI4Oequu2DJF0g0EpZFenMlP5r5-ayePjYGUZz6h4QprwvNWp_pxKVhD1j_l-jkELhyffGtFJk_mGw9XpUFM04_DyMv1WnC_u7lF8JmUlMnPkC6gj6vcUq4-cM6kcecftITINBFeFqnMM9wXPgWkxUxWm0QHL47ZDYYSvOBf50qTuOUBGxmYVOQMfmZjgB2kTTm-BpeZ98RfK9HQ55Yqyaq5A3quVBeZpQiZ2wx52uVDbW9hPVY5-3rTW_NWzEVU4P5NHV_vtVcxYHoUhb78rhrGXHcBkzzlEgatllxTw1KL1s07BE7h_WiOaNGcxQF15p915nPp_ieStieYggYmkjkXV4qy_LG8mdRfSf8ZMfQay-iLQOZmnDN_V6jvQ6Ct5PS6k_LbYi9DYC1ZVoNIXarWkF7dcM3eEoQwuAurnJdIzkKKwuOpJvxd5a0tMCaxNN8zlSgoXwD4E2mBuvYs3eAC1LUnyO9UX2ZfPSVXXiWluzPIOnQTjfZfSEvUTSTjBgMrjVHkZATbygrGS87wgvmw3nocKtO5ByMW6bEVXII51UvpcfjwmEpsmIMmkW_IN6fO4qwwiZRpFRIHSaEB9rO5d4CjMT48RB-vj11s1IpupTwB0-jI4wpqTQTigPs1SnHh9tR_ZH73mnX0Nl0YiZcSir3P-xaDOMhwO9YDhNSRzTv-8CKmU9YTJwpt6CFTvj9-2cbkPCnWTVOCmJZut2OtoaNkXLp61gGpjj52tKbyb1gouPO966mizOwAXacvxzoPI_XqPNW0sP90QlkAL9CXNTh_ImpP_LsBlRmFD6u_BDNAbb8CEBKQaSzCYUrw2gkt8stNXY0TFP4072zdboVoUkxetxoQPyBce5GqLvoutFtUzd5eZFO3OuuAgTF1_DaMYFKahSBcQA4MUCbIWAFbnHSiodwdOkKIekfBDSkxDW5kbiZnPHtVThkG7XDAQJ2fvhAr-CP-fiI2_NBE377eAVGDzvSFgVbxuq4inkZtnmDBrdRoGwDcv154tBmpVN7k9VarXD5-pDTHDuS5Y8Jauyy10hrbrPF8I0z13yUeE4RxWbdqqujNmG908pl88_AXd70hac9ovgLxIFyccq5S6ckAooh9lbrRATD80pA918tDflnS9EjGYYgsKsqDG0jMY45wLdecSn0TpKSuIhcwRY5RW6EumE8V_qbgTUa6T-urToyKFXaGzIJps21xFQ3QI5VcT7hLiI7ZQ_T2WZRu_JTCrXSNww9TxoAyrnktZcGv5lVGBOvHxpNfZyJSgIhv_vZ4vXHZ6gtZhd12eqnPxXPQkwU7uUeSAbQDJ2L1EReW7uB5mZH2oCX7jZCaMf4pVJuWMlePE6K0XAHDAdeq0Pp-cIRagoxZAYC0U5OidXQ3ILv8zj6xy77VnLchsQ87emb2PJZde_Eyti56InTZAERsDhkuuy16bA2Ovxuia4cdTCJaE422F-pUeNGiKPBTBiBZuwyJgj7vrQ8FhT6F49t3PV8dGou44aeNj6F3EpZzVQoixhAYDtbqSd7krNqL-VnEMWyVqo7bV6mJ56JwGSfE28oM7EqRuYFw21a9H8_2drfnGBBHJAZPRdVNEZ36soTDoKhB85c75hcoeDcf0A_7SZiZvi3lhFNHmRWKvcWaiJHbeitdtLyYki9CvoT4aO4oqzkqu1jQ041oJ_Nv-62Bmz_8OQnNf4gu_9puM_5ZlrzyH9Kv80vqc5mIAaaVDyUb8RxYDA35ztXd_bivFfML8KmFKvis4iHYq2HZ5JZg5E_FiBEt2QC3q-LGssDmGOhoCqBPQjxo8qVaz59IWBvw_4wa_g1PEjcSkbPHgMB9ZA_1204iIN5dQI7wQvnD3uzDd8vfKCJD8Ec4tf4QB-uZq92S8g9Hlvv1XJuvEAMvwnwZ-juwPtILZK9tDKIOobcZgfKfebGbKKlLIg2PTQ_kE9stj2oQqYuLQy5sQ5PvdMNXpphVkZ8u5NaKLmVvaUsn1gaLj-7Y0X3aQS5uKEYur54CtSl-GjNU2acCUIa4JHC76hnpli0EyX2Ev6Uzxy6totHQpj1vWZGcc7lR3WDc1bhcDgLlauZQnQlokt8aJzWc6P27riY0xJVnQw64CiT7ZPBFbdPyKVcFUn-3lXvgZ-1eQXLnj76WbNIjXqKq8VhCfk5W3GpYcg0SuYwn2O25c-PhJt3gnbb_gkzACBOWGLgQT0WsJYRP9yJGQE5Vl8yKQXKSt_AUMcvLLfjQAOeaWTup6SPVMRziFnrfqZUyv3ZKPDfK8RNGU3n1Qtui15SIAGXgTf0emOi3d-82cIRofJc1BGmJsyvcFpBuUSYP4PLEZ0sqxSWBKX2MrvIEa6Td28Xy1tU1eavvwXU7cCvozlcbs6G9vb1d04WkOYGMjt5MVhEt95Y5EbJ0rDwaO_RmO-_b-jtKaXyoK156834hPOLFhGK1L4VqnqWanMyFit70VBHnfXMGefBsr4rUqa5p9jOmqkTl4NOJmDhPhsOtsminOOKcEa_UaVK42yIipHM4uAZyOjb8wf910KHnK8I7ehD03URv0QYmcmPLwkZ-hE8w7tXlguN4D4kfdOyX7eDnPTnC_gOv4LmyJzVUxUs_iKhbSwJk1Zo66Ja3fSMQ8C_O5l4euExW2Q6fPA-_uhT9VWiH6iA6ogS78ipV0pUQNKKxpVVgO3dwWmXBe7pWomH6ktZtZaYSxl7MZosEYbDrnU6inbycNAS7df7tTKo1Ds_UGUR7A3LnjL8CdBrdBhkPn5fwZd9aclEHllnoOyVf2NN57B-eML7iZ1IdtarlUtMWm1bwuIsLRrzCj5V85gPkcDh3crTHRuyORrHgEtkhPaWHbpiUgxFU3HIkiprAfmkRpkN2CGOqSUzI47nCeDr8LAt4uzxr0gFe2mMxnbDoVbfsYOrF2QujOedAWno_jGOt8UX2TbC4XI0aw02_bUld4hZ4QEQdx63MQfSXibpr1zovePYn2MUeAXh5SHgk4dxHzgKwJB6T65cFNrAPATFJiXYLQYyACTMqp2iOydt1osYmxA4WZ2EUEYHy1ZY6GtF7balM1vLFu9Bj9RBfAd3b_nhl2oUpafOuM85zmM4Z4jidcCI-Wy2w4z5_zhxgztu2Qn439ttXc_pXZf1E2XeuVEAMGFfdKKRJEnHdAOx6BJk7kHq40IE5mNVS2ZrEw34BufBn5cADVO_OHZLEtH1lqJ8bTcKXqzXRCQqD9KGUk7VJ6_PbSQJB6YoUJpdL1EoFc9w9DV-0WKpDccb2v5hZxt_56qFX6wNLbm37RzJcp4jvSkFGYw06YKXwe1bX8nqi0SkaHv56kw4CQViJFXMIyUSPx3Jfk5-8b5L1f4EJ-0EvIrIEoj5m0xrPkHwL8UdWYt20RL8bhwFf4I1oN9nWTGf7j-7hhocftSawh7q2FCvHbyDy4Dern1ZdDcj4GmMAs8cqLoklZ5WZgDZfE7Z8KvymhE9w0Y_C2BIFPbtOU3fq5SpKez1eS3UOXax724WOf06_qcoB9zsh1HGTDn5Fs9qDzajcM4mAam3iuJ3H4uGHyk6v61luEzEc_UUxqz5zmDGRkit0jwRnSOSU2lmKLngO6L5_1Q-XK5g0VpfLM9DoC8PIbqEMbLXeE2vJf8YbvEDHX4y4f-jYJHKBMPO_dfLHuDtD6gAJP--zAZhQ7QWBmZT94hIcZi20m1U92DOwU_Lse7JLvGsdDLchj0mhgFUEkmrWd0udcwy4MUJmTnc8YPiMnmUwfW9A6zcUPdsB07nw0K-iLXfgNFFMgY9I14sUa7ZMUqClCexa87rx1uAZjzhh19YpTxrpvifp5neCjSRJfmQ54YgMdpGkHxuSpNzj6rC5H6zS0FLdYWhdQmev30dFoalo5n4-s117y4juM2iUdGjFxkEodmwyarS3rKg7pvITlcWls4PfQ-o3bjKTTlCIdtZS8zk_4nZTCil1FX5e0wPZtTAdxKPsuI2mOptxkw6FAyGwHJGEtKRNPktI7ZBHXCF5IoS1tpGVuw7nqHZKx4gvAmMS7q6tZJZrfuKH95GPvdtaUYF1sgs-xz_xEg_9M-wY4kovil8pkPkoT3uHeXDD_e2EJd3LvbYnKXY-EHqTqTgS7mVSnRpDfkFCyEz_KLM1lUcDC5PJNe75aDuW7wt5hsqAiNttDZBSPVglam04J2IdmJldIT-PjoaM8786aFGG308yMFGKnjjcQfM7uagq1ujxXeyQtl0N_qE_llXMf3izooHcjweaSRIReB-J5yyNXvCRXrTQn46oiFqfuvKQGBtrvoNcAUuBrHzvNn14tNjeYtE7sCRMqaa0SRkRE7LQ5-3b7cHSaMo-zS6_I1xWA7j0Seyyft2aFuQu4JFe6k0OFGiUodGm0WJ-9RtzRkDegu85VPs9Z_BJAd29vhC2aThtCWjuO8Cg5htWMobdwbqFfGuDGEbZPH6FY6zkczphZ1ivEkcOX0sRU1BVvw3qgj4ir2TBDbYN1l7upoV7jidf11BsT3ce1Iko3t8bUUupxhEAgkwkvlsf0grBxYLxUhkTaxB6ESXtLU3HQigULoflTcUIl5SPUrhP8ag5s2ijbxOdU_tvwsDbuyFRYqv9l-ugy9nO81cqVSj2cjcTetoLEqdv8TwaaOuZn6DWB0wK0kY3AXHc0lwfjNNfRC0QodzkAYl27CwaNyUAnMniKVAOI_w0d2x3ooyN50f27AtJhV6ypFp2E5Gjkpf0NFDw0NyKwNxHGVAHYNo5gavqhkdgcOYANPXQjK-Bcs3thSMqlWchjq7MJGvtzxoRB4pDtIcEyGpi0LIM3v3DGmI0CNazuAaBvOUbcvUQQDAxmaqH09IPoysltgX2IZo5mqraLn2BCbg3QjyA9qTCNgUDGjGp5wC3mPh1sgNiwLhAm93NGPq8AOCViNrhEooNLcmq06iVDdCGbkKKJpYUSKvSX_oIqLrHn6Cz7_QPctV25MK26JnWRGF2ZT9yam8CgFXJr77JFCczlFBhkbuIqyAl3ghw4tP0RAlK7XSi4zNV-ATgZoUYdYzrTp3FCw5gvgHFypo8e87EjORzdACW--zo1s05XLeMEvUDfjK6nLNB9OCvifMPNEyYt0xuCV8A4MWhnHtRRGhcWgJpU0x01XepaPZVcbIUrBJ-PGy4-4Dzf1CtYyB51TQgLHJiJFEFuDhBReRpFBnhCyHI0MK5YGe6Pxu5kjBqF8j_GNkVeIsasLYSQvaPITOUp0N_Afyhr6Mwy2LNTb05U0njtXtiWKXtFRF88Jg8t_hzX4EHtv6XcmibTC6PgqC98CywuBp2bLr0MHazCoIqXEvHnOCby7Xhr9uD0i0YSysE9IKZWYoLFpaILg2BxD_SiDetS-b3ibkoiQE-r5zdKqtu0OI_t9ZeKUZzyJRgTCBJdiBr3kSEF9YjgFybO6gWimDKSmyPQM-orMnQpv6JRWVORvZRpW04YUayxE9zm292c7G17Q6XLDp_MoNnIODiYr4QyH-PLJeyS0JMux1zk9WpZaHBI37z47X0rO6W2pkd9VdEK26i3Lum2YUKXxLMbDLzhdLTf3Zq-0TN9G5DiVrNp9nwo2ANuKDVtqTO_8Kmk1IsbL5lbAGBldQ3YENpQ5XyK2T4DGEdD9CPJIuRjvn365w6gmJVyMAEzgfVusSB4Q6ebUyMD8vTAxZ5NhsF3vvyXloP3MqZoxULs93tl7-uJmAtI0t4J7ojMPlAkq4H1QQvlOekJSbLP_xYy0LEbrWavMlpyQ7VcYERi8dcx7KKqMDBwhhSKSmd3KXzxltYxRKkpwLS7Bffnguu9gSggEwmxe9MD0RHP_l77jUbTsliOBL_bgBbnlYlrmAIv_Gbyog3aLHAp0F-pgJOmM4fkdYmhODCUjOaK4YkVOSo7SXCdM1CKKUYjtTWukJODe-Af5oAzO-XYDLpgI1SQA6qzpNoA5YC3DVIBbuQsMyjoiSAvbs_icEO86MYEWPcQ-DnWVhG-8cAFbDt0RMekOu1gTsBZtbpdXm8BXr6_Yh-kLLtU626v9cCoQ3l1jFsdAWwxU_wCYZi_m3s91dAIett9OJ2FhcN5wLf865kFuPoTjn4x9WqxXkVcWlbc0bgYxOigbxUgdR7SZqqRwlzFxMgJFbPnDL0W8dwZ2DIzsKHCp5_4CsqhuNxqB450dqgF7v1xkOJpa8oP4HBM0Sz40g68dYuQ7TUcDA2JfdPoqUsJIghOGA6s8Gaf0lveeu-iuSzZAtOU25Phi5NIltzGxSCakz3FMBoCM7U-jUw7DgUNyyZCn7pGbIECSc-k_fcjFGG2vvKFGfX64_ehqkLCQTjJBhjq7vUVdxpxT7eBG5KBmnDemWiCi-2brVyvBuqHviCbrC9IT0T_rC1h1KX7QrUpgkhMkplZjXkEC4xjZCKH-hlIKUcuzYtDs8qm15CkQWU0fapheaitNUMEGAoOphxN02nQdkXNtYcNdo4cPQiLjpkXJQKUyZkjwXMvK2wrADCZu1ZbXOOi0Nu5hLEAxEw9ZtcY1PexWtEl9LbIKMWz3K1sQhkCQ0JUgNkSiEtrKYmPuuJjpDkjPAo99XKpAb3G5cyL3l0AYWKVMhzhe1fkcYEZ3enEnfhprp9ZqaEp52DcESRShmiV09BwX4Z3fP7YCwQlzGvPQfbszPNSOV9mY1ya1cLuVjB3lvtlStl1pI7ZHFYl-WwiNTOxsqFPZv35zzdPe0oS4heCwmBYbKQm_VrXuwinEvPQErg1aKjbPBMN8DX8iYiKTqu5DBWo3UviZofo-wGswyBpuDYjgn54qg6OkyftxsCge5eyc5cdFH2_-qMr4hOqARV3ri79nFcDnF2VDUWxUFy6bfAFq6_jQRnKFKX3qkjtowpqt-kjIqZ6zRDZzq2GLjQk3aIlnwOAgOfIQ9P88L2jNVZTkzxT9CXagE4ElVPVYrwtDT6RA3CWcTmCIYLM7BZX5EAMR6DSkxyZGpngQt0SZvTWW0qKsgEVgL5vgReBeO_eMQw6EqxyKQypozlIMrtNCwRIP2MMstifmSWbPnW8OSd2-MV5c5CQf74-ltB4La8lAFEDHBdtfoNnGIFqNobMZemFTtzL8iTZ9-ddXe7_Di1UrBISncyCrtBxic3wsw0MroKidY1sXbN9MslVpntG3MyNjtciyBejDWbtaAIdHQhGCf-s5SQOhIGA42Lw0O8Ayk3bpy7iCoVRoIHCT0T38CTMhNTUi8kwokbfeU4x52LeBfUeWqnJkK4_Ilwx7KawvOrOTAg6mFtpWlWqMtpqnKieK-zveXxnCx6x2MjCUL0vBtp06Yc_p75mfq2BrtOziZHArhLZru4nlpZMfu1LN5dfkbhFfO6rRtec1VxUB920W2AGbacgD_I6AKHybPS9UiHQknz7sqRfCr7N6Qub_DuiceN4d5F2TBye6RZpDLfuIgPYyZMaNaLwBjZebriq9AYzWtNwkbZaJsZxy93Nx29z1epDh2p0YDYIzZkMAcOhXuhwld8KYpqpOEbcAFc6wewcF939avvTQTgWCErGSRqlqBjcwwgeFMD8thWo7ZoTmkMX-d_v4xc6VYcuu2Ss6fu4rgFXLNtrTy9NXqaEshMWevCy-SdwoM5X2DPzXQxJhSCkGvGgkz4Omht6TOCke_LlIqav4lDPTCWCmig6BSBTnqQ5NTRuM7CQ9kpd1AzTHuT1p_jLLNVJfWi3dLqV8w8HPP0nKoZciQJ9Z4KSzkjyJrqmF98z1O0HHDu6Q67Puc8F69J2Fr0hLk3ej0ie81coglXeJLaTsKxtMRQ-L0jbGR1GjTYD07woDp9PgDJDf1xlJR5lekJt66lG9XTAjMEzwIVWqWX_5Abs45h3nK9IwqRBabHXXzTRRrZLUatQxAxgmd7c615hh4LrA3gdlg7VxW4OGHpetuik7-IY8D4bFqmcMKyOmAtx0tqpVloP570VqFrthJjD9O8BaBpqDKJGsU3KDUxCdsZ0hfRt9SMHIQBbtYsk6pUFZDBK_Z0JRX5XlZgN0edT9CjsLoW1IFzbCPuqRW-14oUOpy9Bpc4vG2ByWv8gTm-x8_qOhgnJ8GOEAvoIKkNhGydmm7V7Eul7VuJ7_i0UpL77rWv3S2MTW2KNVujNUMzesmpSwgUEI4pGST4pau06AhZTQ8u-l8inIv83day_0K-WiL106aFbL3pDAq6yLsKNO-ISTGyNBHZrmBqposjM44ul4EwVwWCwisQHOMWVPLNpQsC8JYWx2GWShm_7KHlRia_nTAKd7Q7gj1hv5zuS4F-07Y-YObWYUgLueqZbtME7dzEeV-zWAXAXQdGfrfr34koCCDj3hi0ct7EdLxN2ZcNieo-3MfNKN391jCIHCPfqyNm8NVUryMkUh09SvqM4fIoWUdx3AngOBRjGeip9ZziwGXDLuLnIsnQFshAMi_5qNMwUBY7PGmxvt3jPKHnxP2N5rg05rRyVWL6_MjpsT8hgsOgAZxWT3vTFBFrx_UIc6mhlwWpj3k-mh0r3kNsXiT7mExj-TNtCwXZIhIrK3DVfDP2m6EiAECMmkBErKmjxkunAepBwCo4u5j_2-nR_bAKFKp4HQ6DiNOe-lJ38z76VaqasYIyjmMcL2pjttjzIgWNiPPVKZgpMW2LG_mejppfENDGgRtXEeLHuRiAAFAAsOOmd4vahZ5MtLL0tPxLT1arNamy_u-ohXb4djCwDXHZeIp_IR8arDXNhwDsAIoCQKhqJytQSuWwJjUDpkT6nWW3iPiPvXEjEBUaYA9Xp0SXFVb6dBI4kI-LqOoxnnur7tarxWbaPXrmH4eBvNBYHbcq06L4HowCcknAhqOg-v5ZdweUs44FI91ZJnnIETLclN5G-7hddFkWXFYLItnUPSFIYcUEceTKLfCX9erLu-l_ZNBo71s0fBtt8uSXtDC9VM9SS7tlNE2NNpgBC7lGYcX3T-SgZJ0pBg_ZlO2CXlL6iOSlt-ypRgNWClZTCqsPYJhpMHzHW3A74Egn4uSmOirALz_2GjTEPcilyNKCr_aIYUxBjqQziDUzmiNnSZWf49bfzLMDC12v7PXf2NBOjxq6Bxt43G4dGsONnzFwGRj9vR16vRSxQMWx_t0t3Y-qfzTneR6Hf0LaH5Fxnl6bo2dv4C4CgKRB8fr3INxDLrBSbIenAFF8dIOQs_ZEGg62yOkg2usQTrpMfpNbSsKnYCnVCwNJTxaego_lrcZZOKO66G6u64-GomjlUAOld36CfpC_DUZv6ObOaNbZrzuNpXhnm-jL1qRq9wivDtH0XxdmnPvaYpnkjlo7iRtmmjUG44hoUS0O_uHHBgJtFQMXiMkdyJlrm5cUhW46PE9sJS7Ou1yDlS4ja_eq61NXswYhix_toVT3-mZgUrzxY8Jywt-4AfpkqeqOXFGky9sdcQU3hH1FWZwSfOSzeM6RJro_oztp41FPfmpz4fRSqyjthU_y3Od-9PJSq9Id-qholnAUUTUsZb-YAjLCDBjZqs-lEKOD7lzhWxewKH6Xn0-2EBXTx5SjBWsSW1ANMhVIZUI_L-QvAYXVhTDLTi38DBJ7iDjLaevy84rH02nBYbnpdOlzeZle8-7qCehLGaXAEnEHgs9zHIIPeDiShKlsrtrOFc5c33E3URBvoeDaYOZc7Db1WrFGGE2HI6F2AqF30z04gt7vYSomMK1Fc69E0WZOZW5eGqyM7jlZ5dxb6GaAtst8ObUqIMJF6asbro_jVXMqqR6KOWlRo8aafbU2Fqnq2C5dXdvo0SJJfgwpKP7E1R-uaKfe5PL4OBsw5NYXS9Ffm1TaUVYV5xYdJWs_d723dF5d8S77cGaA3YqYoHmiY139Kos6pGoMUIaxjvqS9UvN3tcy0fntnHRNTXU_TpBYW0CKVGCRKsv1q6j4VbIFmhrgfsb7xyCQv294PHVGXVOj2ItzOblfO7Mc4YCDdluZAz8DwvpRub1t51u14hTvdmvku_DadPEK2OHj1mVujZJLfmA52USeDpFZ3eRi39ku8wKSH8W0MRL48jipZvntb9Qoj8hoHBeVPtT8_lnVyvEOZyAsBA5ndHe1WawQBljatwBTIeDs24lQ7364q88YhQFvultKUfphxLeyP8u870vrOmz5WqZ26t0xuMSa5hruSlV1kMEfv1voi9llRl2JgInBZBqEzuQUr_xhOdYoqiqnJIR-iCGsxl-RgHkyNUkiIEjSVt9NUEwiMzlI3hcS3xqS0eY0oH61soJN6EYzQCVA-M4u34SdasYfCkTJGlME35tzTckDoafs1bsdi-meQRihUaWIuUBoLPdcVMnlqNrP5dhgBygaDtK07oqCZ7AAGu8p1u_ba7rE-kCO6gtII_LciLi1Jkgg5MW-7RhMIC_h9F-hQ90cUJZefeElWRz_MWfWvabfG76PR5NCQKXKNmd0_o0rFLjqZiy2qFn5XFv20zsFnc9u1iUMJ0Hf8PdAGY-mpvX5ey8_lzWnwmZmq6WFiXxzVEeT4xaA-kT4V0pmvCY_fjR_loT2ZDx0GmY_uYqPe5XjoXEq9vjeS7eaNsJRWbxn7_uI-SnXH-52RCkX-ernpYkpsZ6qKDUtGijGgKk5--ArQrZh1vjiCmtFaIiPjQbda70KFPVnkeSUjmmBnrHgZGJJLNYM0YIPMEFVksO1lSg2xMljLex8A6GaC9KK-3S1Sd-BhdSNGmok3qdfKvDnOHflef2ay0BK6wNVWOAV4ali19dTS6ZTxgybBOm1TXF7TawzhdsiQCJjUW4dxgPav66mqzv4Z98RYkt80w2w1DSGoYR1xkg6lPQCc1IoXdMMkEoDgDzE5R5Bk8u4V7wxngPc8qnleC0YNFJ03mRq1qr5I_ssrlN506kFrnWfNH9zwMArmiXypQltpe1LGH66xN7rFTlobmgGasqVpRVauvw4NF2mp6DvFp3wWddiBsx8znsqeQV5I160i-LpawO0m9QQIYyoWPkIlp7cB0EuDBHhI0n41ayTbnjoRsEkbGB7UaFvMM91mhdb0Rb0HD-0R_xpTfxnoQShIHUAxKI5tk_oZ6Om4ipjnalJc_6yrsACFEuzkWT9WLX4WOghn75Re7OFRhzLEShfuRqhfRlunw6LvhovrI61qvCJblNpCZmUhBBHyHxLnanQ4KwUlgf4huWfzgyB-7R4XM1YxCXALjuxnhjQDjqDDEGv0GUxkdf3bYNdcE2t609UMCjAdaDcBQa7OX-ivuY3IlctyFYElmg6ghYMUoxDXvT2uEUiM8lj17Nb7ZfqeHpuisrmuwe2N1OqEAwM4anUAUuEXzt4FDaUfcZTttWD2sPgu7jTpLtdt28WH77Iaou56pMFtftuFqbGjMVwW9rad60KuY5fJ8K07cA3tp-VfY1uUdASoriTVk_OzBQYpEKtT5FN1Z5p4sDnXf1rLz_EXUyR_RnPFLZUGitcFNGqJOj8NmLTzY4rB7BtXlMF_Z5cWURX7syfa8qKnpk3luq66y18sKgVTQT5QQ6VwQCm66x3k7RI6nvRRx0sMiQx7wEB99vt2FlJXRgXTXR7OnGEO8djfd8SgxSi5OyI4e6kjzqCsxto1f6WunpN8rrWceDnTCnzAQ2A29uv9wpzlYygpEtUCAKxsVUV5eyJPWvrhWrrvR_3DmYstK7rz0nuNpQQfVvwFmCLUbMRSbEOegYQgAJV2Djh9x7uWNJSxWFa7_V4qLZUmPS6E8XbEVuHT9DwuR3obmKPtZhU8vDH3Zm81pVa0cpc9NyGpFdtH5mFs0sCgOnFiUKm6CMkEtoHAXzBYmRlzjNdo5rtM11WwVCwmdk09stRcV66wzA_JMR9vG2Mz1-upgaR-dYO7HtLqi_h6eIYwFs0q0-Ly2schH90cZ9AYm6ERWnG4NvvHb93guMre3C6GerGaH2qZ0334Y_difcGc6k18pETcFJcK6a-A5ruFljIt_-RUi8NB7R-45gHc--qbYHRfyapqLjZAt_GIMyaMeGqw6cdrWfZvX0y40sUAx6tjiCG7qUNRV6ccqrsTb6J0pWrrhsAIjWQFOcSPKHC7ezRDdwan8bSaEoJWqgUu6coBG9Nfhykdu_rcKyB8iE6qZo1YY4a8tJqUbOXTGBMQ5fqWGdpHQSMcPcOVLAgGSA_4CahNjDyCZYnOM__sIKNZLKlM_cRafIwwVeUUMGsBalWbEdWMbRw8QaXlQ9HBMGhqFGENg11itsukTkiDGaLWKLAO615fqoL6LgCPE4r4xZIYu1Q8JabWBjUPp04URwQkUJ3vwQsgoVsOv3Glvb8kaU8XGC_cdTZWkJrF-NOucNrbiMli2Ahy1YtghlY0DyjCVM4V9wBRGE1uRgO-YLdaYWgIDPkYmLQqzy6LYtmFV1jI3AihotPfqJBYJ5NGI7pZ1kNgbg3sXhk1DRnZhQ7rfTK12YtR73hTaYUcxbGAhvTvvhNnhXIWQwKavGAyN5WW9NrbCPP7pIah0ipu82bqn2qFWU0IGyxI2BqUBSpks4hNOSGlyeHoDdN8ZqZrRWQTG0NCMpII0MnpL95gXCYb_MJoybuAcGyIU1iR-9zOdL60YoVq7YuUpjmUwJVcIz67uMe3Py5x0QmyN6Poy8TGua_qjzFIXsU0dqyoSS9kyVljXYxjbh1oCFbAbLgocVTBURNl6hyrbwa58M6JBZjEX0E_W1WGOjdI3bT7Twm6Q1ND6rlPcMnNMM7Rn5tivnoXsyYdUvTtRgeTqCqzQNGFYLzfx3eWXdqFQCqsUWg7NTeUKknjlk9DHuhzPhy-xq7fCovQsPvOXrOUXttOFXhvxIJvAznmpf2uuW1hwDBzFiWFj62YNn2NsK33zz8yxecw7ru3N1VOETbHSBqc9hBDgu8v5hVlMZWW79A8zi_sReuJsholmJeRzmF6OTQOyUL1JkX3rHcm8JyaD03qEYbxsml28f1TrbcWHrPTT5WifIfsaugDpoDrNyKqkFrSyDo1KBZCiCB5kES4b84V7PlMzgG_Q81-IHUuxu-DiRjmX4Bxof8gf-e60EzUv7QTGwh3B_4EqM3VcPIQdGf8rNRznRgibt_DziW6Ou_atVI3AkHj4ZqpQqimxrkCJGleQ7iMvVMh6HGspx2nmgbauOLG02BJJ_FzyRRyQKicMU5SPdIGB9TVfLGugQT-Cg-9lBWhSOopxjVIY6tJsolpzZiKrtTKHMNnErqpP4nIbsgdKCCE1QmUZ0oFkjXzDJrIR_QFBDhDok1UcMKnM3Gu0zAlPSnTxj7A-2fxOzId6gNNyctUV5gxSoYTUiFb6nbCVkCvSUVYpleU4iD13iw0NyWM7QAWyRwPJ8JfwtiL13sIEyMnBp--0mHFC8P7m5xeRHWK366zM1SYm0RV9EqLK7Q4tEiPTqTFt5sS6F97BJTS0kvVBUOojkoxTxpTmeIldtkDwuyiKbIpmlPZi0lvfNeUIfaX7iRT_4LyW70V9k65ka4WeofdyYB9GgZ_oVPQBCFso7kGBwH_cG5KZmIsltR_U7z5drPFBojZJXqmogcC464ASIXNuQlAwOQbqnmVvM7eVfpl5J76nisEX3zayyNnY4Q6pF2IYVjiYYoeV7PFCnGPjCDNubOPfdYQDClnDO-q1RTlgUNyWtUGBlK88wQV7phjmNBnjeHuAPw_1yeaqT8F1FTrCY44eYxTn-zjnjjJoa4uvOX24EDSYy-NLOlcSATEj4Fslltv3SQxunfIm1xwkL6XExgGko5vAtEEy2nJGs2SM3-HRRm1UsYSQsrR0zHB3iVgpzc1TpYHzyh7Rp2nP1osqF28ocmQ7ZDJR81_xD0Ut32nVBA054UO9zQdIR-X-Xm5HTRCfWdfTOOcWA0yV7bB06_VnrOBJS7mYSFerr7hFbL7VQAoSWZTMG5s8y8AhJNoqWc5seMIVU-vmcze74aRLnuvhvSp6RE00u-gho0wHLOgqRNQXRP4Vjqsi4Qp80Iksmv-blo9bH3-orblzv-IyvrSX2tqgAa8jJxvJVFN5_tag5zazEl1jdLRcg8Po2laVvq8lOhsQkGVmwpkSoFrv8_Wk9f1vjUwIkJ0tC4iowlhnT1JcfXtSr7ZJVWrqxZ59vhlvZkmAi5lpOf3TuqrravLnwrmFsGB4jqGPbwfmDhOUIJuVc1SeO7PewcWUN3kkh6TDhzti-39-8VG1v1WEeA0Jy6oTM6VIHEF3E67r8aO87MlTwx2r-UeYD7QwrO_XUz_9uTKGKJf40iMAePUTfu-IR5su7bAlPntAY1JSWWXzA9MzS8KfzIhOlkCbdNiRJrTRTmIzs0TXJuSXf3evtPTN6Sn8xg3SG-0ZX9zwqtXk_7qzhrvJCICn9AIvT7sEN91bdlRHXIzBTNcfRBv33Rssm902PXCjltWotxqfmGaey6-M6DRSnwPjZ5U8PCPb2GJALxSTIinDidpennbIdhOzAVwi5XbkT7J8MPfWI49S3l__Tx77hdsg90qf-0GKcNA1KZlWDuVfie-t-70h9B6qzvIZV70iWGBldK3OaBjSUXpTmElh2t6xw0SohFAdDbT4lrSyURxo-aZqwl_oIzNUBNj5SArdagYrTIEDs5IQ2Yn2clwiAphjDnkJsDz1owBmDAEy7ZRTTsrJh30jf0OA73nJqpYJuxlLZmJ9fqgBen7PQLXZU8hH-CFoJxSEq8B6E86BfuhD7z0AESxMaUhlV3OHJt5ksjurgEMQvBktwLE9sWY110iyyOqop4chzUtDSGH1XyIoWgNfkFcwf5hWDd6yPskHXB_Wm1w3gRyRwE708RFauo5xjA4xpqgRaejQFNwJJw-TRoo-gj_Yma1aq81cSXD9XE3RzToytrqNKnxFz8eSdbySq4Fs1lDMjiX5CXRoPIVpLDdUmtT0wnOrDV8UPPdHmoB3WR6t58_r0v7hiamcmG_sgG_Y8LwL5qQPBfLfJ0eiQn6tnRLjmAr3Bt4b2tyMXm6455hgOjPxZCHuVDEuIjlshCZhZXXJuT0aG1A9AME8Z2tM1bK4V9E7-BcM0KeaiATnZqcoTgNL4m_QH7X_RH4jF7Z1ECOfSFG0fM0DSI2E0p8BhhyCV4ZGZRrp5AmzQi4fbnSfbJujAOPHJ2uYWgd6s__ud9MwHVOzktRtNy4h8_nudSp6oWcG-EjoppKWSdDXI-JFvb0cBoxvhoRFSB6Urlr8sI05vxeac9Gtnf24Nxo0QTQQ3PyuG01VUCT8cVOTQu3o3aangS6bSXZMpXAk0H7L2RhzlNOHdri9gCtIegUCGwaGCH0xk3d2uyZuZxIbnQbdEnktKmOR7ATrYhhaPhnkzNoDlXvvEYzg39vN4EvVWf3XPcMayERSy3hgWdCe8Q_s7fmfE81RWrmnQEXsFsQQPHc8Toss90WqmyaZUOqmtoWOTdNqmrULVZniT6WHT49fa0ZGhNFCoHWR_AQTWT5DlEHvH0zd0Sx8x0Zg6X9gqA_8B7fzULeU-1Uh1TC6-W9VpUg_HHBTJ3zIFxp0z8jmktsz80m0OzmCcDtA0fUK2FApxY_lEYu9WutzrQreGfNaRIJbhHh96QgUD2V12T4nNp92ROVS77A3I9_GOLm3d5RTqY-ZwA-egrmQVZ-eFjqgY8rES7orO4GPcf-xrtCxetWE4iSPnOT51p3dsoru_QnzSWXQ8WBn86G0NE-lMqT6n00v1toBX2nXeBcWfllEgcJywR-9F17WSvM66bePh-75b_EdVhd46m9CWog018h_rMDYjg8FANTg5bZLcxwps4uIlcfd5ajJbiBJvAmshPMRX8FrhTQ75d5G2UOlGb3lkbe6b3_EhOEoUd-8TzNuKnpFvMGLSuKmZlwk2b6cSGGkEcyA5b3UUegXokaJfn2IvqicZzpJy-G9DDmlEIXQ2ikTdqJV4Xj5mc13xZvlkli_ZUJJinmsrtXFhfe0C7ENS1kDH3aVEu9TlvbIXVqAxGqyP2y6Oeux9_AWSkxheKMeS-DyZPEbbdn6zECk9gaRejA2WGcWo-4rBrKpt-5iiN0PcKfIyvKFuqeEabnVwy1UvboRGyavdy9VCS43mHYRt1MsbLFanTEh653aeH46lVwYoPOa03od79jkXr7teg__TuGiB1UqN7lsFy2zgHIRBC9-iYgoLszuQP-10d245OcRDYGrbLVSMXrS0qBiXprQnqUGsRk8RK7btGIalMxGW6g3BeAlGfIrvJIObOzV6JqYfVK3k4CF7DaIFHfViti0pN3uu6f64UESyBuCA_3cI0eg6IxFZMt1HqiM6MMA5CWVnmudKyp4qyRNSSYycd9MmHB5Y5Jqsmd21uirlDS7_fsFFOqhk-2o45G0qgSRTO5te3UHlH95jY4N36qz0W4_88e6p4bAAqTHrNQCmYBQYDBWgGSPI8GFuHKfIhi6nuxnkjbzf70fr9ocZXYEKiRRxwlJjiPu-jhekkpX-u1MVkUKAO9hJJKwLnCuuyEuklE4JjMxi7M3HjTfWd4vqBRJBB-bKv6KjpQtJG2xkXXPrVFZprn44IlRgrf1bfNE-JypGXG7a_vSUZtvGfOCjNY0x_FqWl72CORNZUHOVPnZt1gnvIrzbe9mGJy_ApsXOxCc4bP3shrkHLcBM0CdI_0jFQzm9kxilj4XcGkw2L8BFuFehjRPn3LZt9dRe1lN16t-szt9AfPrJQnjZ1UmTWYGuj5_LHtmRzv-wJpi9qdoPl__Ez0q58CswYXbQuhoowtpPjU_ikS7Sw_G4Xz6eUnfou9JOqpa7_Q6ZxXeOlbMkgOCU6QSBqlHElCxgMFS1u5aYiQ-YkZf1-EF3yh647MGw3VuoZrfYCojMkS-6YxTugxFgNfmCgyrYmOe8qJtFaL641zgU5ylEO5pTnao8ly8l4mJU5vb6StfGzQCc_2_g5tKMlY_hs5LpUeZ1rcYwxxyvncdtUGvs_AhAT-YAuRBO7Yf24lrOI8jTqBMt_E-k5yxJ5jqyFRaJ-65eFQlV3YEDcVGMQ0HU5_6XMyAKQ2Mv-jkWMbU1ilPBJC146GGetBq3nccLStWlIZRCppJrq4KR2ijBQ9YZiYHsdDJylzEFo0IOIAew97TY70spzilK7sQ7mAnnk5BOoWBs4jc7sTHBWln4-XUZ3EeIu-oEqvWc-8TyTeDKziofeKu-wgxb1Pvvfj7oCeqtxYDlF8TJuLtXMxgDeRXzxKk35p4sOmNXST-is8i4buRbb0XxPElPlylC-TwvS4VLNeBZ9O545x3oCsx4tWpzsOwL3MtsxOF3Pm0ADmeUg8tI3nfkOTlZTaP76Ruve_PBC0-qSuMTMJIl1eVzI_Z4cyub67QQb7PmHvTvG1qfQsUw7FvzIlHWbIgMsjKf2e9i1VJys7Hgqu6nNoP31OemXlP9ewc08QEynWY_BmeYBBEAV3fvXuxnthlPncdGJg9XlB-dt4ml5HAClTbKpeSVhsXR7FD0btktHmHVpyBjQeOhdxlbpixqg27iDL-u0ZR1jSe9SvnFmevV_oWDmnWoSRfsKj5qRBVlASiksanrvh8TsgFmYbhZnrztwnkyu72nTBdDrdLLqw4XpLQETr8e_vDS-xBxBQljSsaIqVnR2IwluKc8wPnNSHgBwuo1rwC2DD31M1iyJiUqRnt1WpvdeTSx2erpt6oCZNffhpEh0vuQIAj70hInxiKMAJOafRzGReFQG97bRYQla247IeEoFO97Qif4XLWn-9TBXawcKKGge7MAF2Bd9bzcwZKpFD6bUmW7qLNOBtl6kyoAKMfnMRI6WnVi8qM9Mx4JR0O_fAiJe4PuHTq066hVJ3htQNrIv-w-d2RmqvrZsiRarrIUMFZpaZf4gu53Cnn5qhIm6AsP3s9DO-MHVb9odWu7VBAcUfhb0QcUNoJKzsZ6DLSimYaCDToJC4uxL-LaklVAQmincUN3zJqtNODLuGMDLxg8CwxgsQvqhRxwIdRvIWoRekkKQC1BUkOZrxUMWbZRVGZTHws9Ppvet1kE8bF1_Y9O4aoaXtgQTKfeuBhZcbCwJ6I2doc4FYfVgzYVLy4OVg7s-iCxK7NNX6pXzcQ2h0w2FOy6xGAhJIajUco4GQdqeE2dzu5i41tO0S-1wSuLFPp0xYBFOkCuNGKVMXcL7krJm2X9H9lwB4VB0QTM8EKerRx2NwrGTvdhQS9yM1ZyaGqXVzUEKc69224G7wFej5tpNCwBfAJnQnVXPEz1xWtX-udI3cijymd5TBJettyXW71f3IvFRPAUzADKBuEn4wftHQFYr7xjYwOCjmK8jNeOVutlDuT82O9mM8EZDEGgPETFjSCppcY5_02Edg0fihZRI0HTFzQk3RhDk-_3bND92PzHoUhXtPxgZ7bTcGjxzx2Lh3KULYZUFnXozfJKcSpJ_OoTrXXbrOy7gU5kDuCCwaGL7ZZ8Q3oOntzpCSKcd4X2rGTfNPzvSH0Jm1-0AaYApu3TXInSLkZ_mKUMwQCdAq8P75IvRiJLSC5J1giWPpbahtc7bDZ-2Aniz0WMIbmwnpQWrcpTuPZUhyjvjpJZqYLqMqevxt-zqy2y5UM1fwKaTDH_phgl7gnyGtehyawec_TPZGkgBChN0Ebq6pIwBYf5gIFRzRSiOhiPyo2GnCvGXyDhJiz6SSMFwVenlJO0TwpM9XCRVy1BAd6CPcJx7qBGp6rIiDLk3alTTXe_iEAH-a8aOKxcMEixSTxafXgRW7vIZc0DVap0O5cvOcW_wBCaLgI7F-AJ9VwNdnsEhxiWqRXrsY5g3WE9WAvyQJlOadXchbss9xdO0FkMBFvSfRNt2u5y9O8opTlIqxKwH71IRcUJnMp9kJXMS3B7l2i9kHN1NOWhdL_AJyGEx6OuZGdz5jcZ83bPasfQiR4YUECZbMtYpmNSli7z_44We3RgJtof4y77EA8HjsFYC9uVamSuhiJeX2bmYKv5fPEJJPGBXpm_U4IfARM9BLlcBl6lGWpmZmgrljivJp3VYTcDR0rON0oDXd_uHvpXkjlNK3J5E-dwLXiJCkDMYV1cwqtG81bouR8DiS3kQiNKUCsCytBNJBc9VKDrvQULxKWFYNGwFPf000U4nYLB2nlr1BgoAYTjUxtIRZZryoKPnkW27pykoxdZDLa_MZMcsmZyCr6OEF7msKkeFdbobcUv-pxepN4FGnNc6-Nb-e-hvS7rjhsDwPNkbo5vj2e_VFWobK3aEJqYmF-hDmoUO-mv5wRS23P77eL79SENZhtI4qJPiZprihSt9LTwHbPudeGsjMFukALTiWRBfK7_aMxn8fNafUvZ-vaSIPVUR7PfR0-qOwQpPbWw6Ej3lKQDndVziFI_V_3ZcUnEcJOwF175Iw_nvXLTVN6g_TwBbA8U4T2Wf1pZpXeGpnzmBxdjrsxNfl5WpdNI22G108Q44nKCpkLzG1prhHmI2U99oKXIni2Z65varhTOxshTin2TFekSVeCbuXmT52hyJK8RRif90EwVDW9xOkI4fOzUqKAMeMtFzCFNsXPtkeemtNyWm9CT1MDsDLhWz98nFKCKba_19jbb6AH1ZluSFSapH_NazFUB-OGYSacUOI-26oNhERnM5hKjlMsPLk-UfAciQ_nW4CRtNsYhV3fQEukE7IEfW6Pmu2NKkqIXWI_PDfJ8rX1C2foAQH-ambA2BYaXQu2DgMQCAFD9k15CHjWS-Vo72HGeOtJr-hmuRy4obJwiwE0-6RR4OJ0cNfQ4g6WaTFpLXLVZTmjjeuNI7FOsTHkdshkN4nH5mBP150KXf6CuNB61B_H0ZDkJQHqYFYSHUP8nPrZ6TzDk2tRxG4nZOHhwDzZic36X_RtOLF-STSygv-D0DtMKcOfdndziv1bXddF3ATkwx8a6bSkBAZ8_TQIdO5fPVVzGq8ER39nXIAkV1NuVCj2s_doBxw8rEsF32X-gsttw9ntg3foiqWj72lsaruhyuVg7ZXmtFQtDtP_25jOnFeoKtcZPo-tjCpIPuzgxJaR6yW8omQeMplL1hQXAmCI9-hJleYp_f89WTABQr9FJBQO7bmJh-X49bvu9CyuHhL-GJozQK17CHZ77owOnq5L0zRfvsQf79dDhzBNg6gf04I74wXlDLb94OvGQP_xHsPQkMkXS3stJPIAVLe-e7bYoRUlcRPor9i2VYCXeJ0G2FANY6EtyS2HXWtay59dUSGp2YUuQVQcqn9lFjaetyVKVARqcerGb76phjZXOf1yP_VbkilH6soY9MrACJmJDPHCtDEFISkKcPFmAUQfjrpu-SnWckK2DCroSlzn8u-a5hJWeuSa1DFT0ONTms6TMz0-7TKpugoQT6yRnLdrXFAvaLvnyO5vJwDAwtc78e_rwQMtuiDJstBWaN67oVW0RseHkJqCQeByIkdLYT9J8w9NBgdT4BKuw9zdx_IUsGnEzSgWq4m0WApLYPo6I-HWUSTTc5gPx9vJMWXsZf55ESo24fPBWKzSKucZkQiuJZr9Drc88OxHQHaGlE9olDmjxLcDe8KHNZRTfss07Tu2iK1NHJwCbjl1rdU9WyZ2J8lB16BZ2oh-JWcBzCLokCkEnIsVCOJkEB7NiwTJ9LajTnHyH7R5Y0vkwDA_nXVpUmq14f2gikIF52w4WNNPcdmdnUziG3pGrVzXMIoSJj42MFcZe5RzpKlUcWibEFRqijoqOYw1pvvVhGy2xTaIk-bwjeKRr00G0A8I8aWgr3w_dJIHMHQGdrhWA3dyAyzdamaqTSArG1QIv3MMMUSQi1TTW0Eg734JPzP6MFG23wYQFmUdwCQJ3kHoK9oSOJmdubAmf7ErPvfwuzt2Z6uulPEv5ZmZTMLe0Wb4JfyGQVPkADATwVxwXnx4INA3Jbrf6cUzYeprV6d4gDGDsHOgnfMGDdZyKRZyJ-pb47ib0llrkATnNC-S1jO_wxUiZ0HM1Plh-yWMfcYC9psRpgU3ly-zPjQs1d3z58pvA9kw5jbzGzGJrVWY5d73nY2zOkSxvYXe2c4fzU3s5i8qyXuCtKukRq7Ft3ZL9WbZ4aH-e54LNIMN1Xgn-oeilm0Ej2RsyhEercqVIuNEjWrHSwYwBhhMfPYclE7CoYY3irDeICcrEcyQJ-5ZDOKPP-60F80IEsghfqJvrCALAXBBYbKGApoXjxiuzAh2SsSYfbGZSoom3KZ9jKfrybr85nx3OT54xc9fpa9JO4CYWC4-ffSrUCL8b8WZ-M-RzjzF_h_D3dNCe849Vq1_Bwgb6rbvMDvEnbWxaTrfTvqM1fpyNHULZHyRe27tKerekmzvXkoVDyjphkQN876UNYvf7fFFClAEih2v0K1nx05TQ8Pac0ottsUTg3Yx5Cd8uJQcOupJkgDWOtB9mDID5IO9fgV0kTwKCNRTIlKPCfQ3WHut6edz4xcibn_ogSYKRI6bQ0V643fE6CepkslRKoN2F98RDG9-drgmLo4FdmXI2U8qnAWnMWwRq1vEvZVl9LHUuV2iguNyVmXfK8GMaQBioSThQaYb39Lj49bmhlHzmRE8fBQbfNBwf6fWG3UQw3HW6AHEnMqE85Roz4x_XLAuOQsIoLwapsnpOxU_2qmK9CqWsEjfpb0_MJPQZLiSifQe3-nmJnfa35XxJ_p40cpGbjCJns6-sgwZ-5POFS9-i8QMi3Ot_pox3gfwV6sBJmqybdXnNfte59NhyJYRQYyl-oNIbWG5DPLTL1UTXC0O82EQjZngPUtI_w_UI_ErjCjdp1HfF_oO1aB3eLlooDQ_cOUQ91fW_AAuQEH_mKmb01GGuAiM4NJE4ZIixRpdSkTaTNQ5o3hoVz5QmGNwtZn82nN-dhOD_H42HpsTK-no06azvXnLNpr1F723Xudjc2ZV8XUbUwHmOGXfUBFNrKSDQ1TrS_u0SE_H9fDDzADZlLksvoPZwJ7lh-THvwIqayY7_TXtVT5SKn9hH2Uc-5aICNSwyM1C3dhRjXcJ21EIQVBHBhMtMANuE-rHX8TC6_tqAhZ0OHs7UvAtyftOZj6wpEQWbpPAPZFz6ZNC2dCzz3c7TbS0v60fhHloqcXweS-w-Ivwj3p29_RQ8IuwVmDzEhqXnMB0i-T6zJYGH4aJFO6F5V9cQyoWyITHPmIBoGsEq-oNLsFiOKdnEAztTIXA4OLzcgkN_lRhN33jpcIjhVCIye4Xun3Z6GXSgneDzI5okVp4vmjSSCRDdV7v6ChVQNkmzBgCV-o3wWTTuHwYYkWxtqA9-8umN7zagNbsEtQK3Nm4UmivBfh65_pmg8rHZIuljszsFthi9FDY6lbWI_gq1N-CiGkxyY44N2Fa8iJYUTIrd2dlr9Eba1NAofENcTzu8kTgZjvC-VE4LGLU8jpMBmfnAB0Otf81jjEUH0hXzczCbyEJ1TeRV3jPkZaWkr6K5jNx2BaV0YYmNveYXiFQ8v0ogq8UtLtpMsOWamdbJQQu_sBLcvePWlJg7x1Fd3h8KDvJ6f1eQvz1ZFxluPi-Oe_Tj9WX_qWdIiLoAstrzFIJpib26bMShTraFPDVUjLX5s1T2kSbOrKpg1CTaqadwf4vqUjoGl1PEsqMz2tLKHApYkZpiEBpPoddqmqsA4kWR4NQjmC0lJ_L8vB6iID3c_ajgBdVRt_f-eo9PJisH1LmP4_I7hLYAFAPmcwQ6iXBfLJvSyCEdYZakpPDi6Uo1P0QQky902ua3K97wgWk1po_7fx2_8jNXAGmuKePn-78l3Jje88OYqU_gKitDv_DB3V3Bqoam_kPUlMZUIoTRgVyKZ_oBimu45HADELb3Z6dZVjc0RKSA_QAbHyPB930BdL5LDOQdm9b0yLJEiiGOBE5zE3FLI37bpCIsKJxznzXY7BXi_Svmar0T3VNO7VA7TDot8ZepEFR5uZ0plq7qZ25xvb7Rf4g6s7ENBsWA-djzOM8IvecMky0tl17lfgi32_gYpINh6DpPYccBi23ObSy_aXqRvb8H_v6mGE6cKF-mTRt96vHgioKmUugS5jVZtq3XpuOBy8Tw6oEJs2RmgSWBysX75QJNJHw-xCCed7Zs7Y4z8LRfTz9okHAHT_VFBa_MDYLlXhQ4OHAo1YhdHg467FUSiEls5AJcnzvDrbPR51R2BAviiEufzEeIX8GxEsDkHZmXwXiKPHIdYbgQRorHYCrwMZ3UqALEVYB3T7ZUnE2_VFrowWvNCISrorxgyiDbfV6LDtRNnUxJPmVYryOUnM9XibrW_pw9CyBQSWM_oMZ3glv3R33_0q-FK5dr-gdNXfuwgkDYnC8gfmcZZQCO7DlhWUsKQE0qggQS9vJ0AlrHU77Sn5LI2R_9fUmSRIjkIx9EK1YDLD_S_WPElEdq4ol8PGDJ8_Sm_O-_Oe4cpZ0fSII2b1QuJwnmCrX89El_GyH8jPT62IONeeR5qCXXsViIOtV5tGuabTMa4GHQBnsA-7xYsSyiNSxlTES79j-yapm2T8tp7lh4vYWXwV6IPkFkwQO97eFwSEFVfqxKJu3Dmb0TW38hJ8FZ-TpTT0nz5wyd54p8sW4rkHugqdQs01UkVCKdR4C1QMoicjTTqvFwkFV17jmxxQKxaHIbVVSma284-hvzAJO03qk_2wazy-vtdwjFKgNocLoAlXf7G_N9XJXpI63zMQpBbHQbRWQApITlrjROGlQt77ZeH0iHMHw9xyiAWTXLC5ArF0LV2ohJyt-72qPvJQht0j-GNGCvPlhrOnEaXStQ4TXdJpygoxxFN0TDHqryBzNsNHKXU-UzRvuiou5X-moxGunhxMdxfNhLkBwE1IiiLg0OrwgDfJn_URnssSk06JvVtjCGLxvZFU2d92f9sryCyUKmYZtCOvpj8JtSGr47Tx3MgbQNWXgQrNpSLIFFyclLzcRfjNnKXXnksKCiGX6mo_vhs7iU7BTu8CDZozQ3vKL-YBC0O3y2EPwU6p2Umi9cOubePUvInW7VpWcvpbXDxXmvTdXjOxOjCe-1OQ5E2M7CC1Mn6zVgWzYFMWHKxQUhOte94oVdkljkdYtWVLDukeUkPgdX_qy0xdGuXDtfwegYPkN9ThOZiq9_BKwlIz9OUdaJFH2LswUhDpLRfV78At508XFYBy8YWWIpoc1oSSJ2heS1xGNj8jPyrDv0QNpW-aSpBZWRGv2QA8zYfUVPGIrEESkSpDjiivNSH4-F5AkE9-tlZoNoAQKb97R8QXEdgEk--aDFeAUF1dBei6Ze0ucGyK0bkImT8rjHSuOLMpKRVUlrjXv2SGXuV2v7ovFQ9k2CkKsbNb4KivGmyVt5dXUaAcxBCIyHXaATFmMkQoE86XcC0klPM5lkskKKpDbOl7Y6iaJoyVLeMAPJIm-Uq82mb8ml84Owip9m-8IA98fkYhm3h1k1mCWWIuH4YqWdHK800FGUlZz3NM3oJz0yBY389FCYTSypQ7g28ozqfyCw3WkgTL0j0Pkh2YyVE8e2BczFgWgFy7kEbEFBYM4Ld258BS9P5AkLZo2HQV7SIoGp-Wrir_SIwNQBApQNmnUP4aoHACa5-SDtSV5xoDzS2-kiH2ZcGMtGVwcY6Abl6vQY1SSfhuUtnpiBwJ_M40vF1XDdvkk-uDTbtf_8QMA5H49ILo0lKP5udlcX-2mkME1w7FRe1184khTmdWaWErJJgSoOLFRzr74TZxrjHWNE1XTlOmrBQfmHrW72eWxxPtpEeQEK1P1xGxsZ--bTYLro6YRHquU2_BM3tASkt1tMrpwee_nm-fzWhVQLSN3vyL_IEZhQVnb1Z6B__N94KLLwAJ-Oi_WIKyYOLVxaJtkdmEDJo3Eevrp3JRCvkkD-ZW_JZbYgH4B85kEy-ChbcN9oVL8DjX3QFXuc0oMpnFGXIOdvwzicu1Bg2bgeLupHUyLOp-4_lA6694FFuSN5P4p91L8FDna49f_OoQOa6e1vsW-ytXgWE7I_OJOl1vkaHtSfmeSnabFLD7Z4KwzOB_8YM6Ezly4VvR_BeoKN9vWueUykUNufwzS3bgWilG64bG9vlNYaUfsXFI-s1Q0qc_ZIs4hj5Uc89yWUWBrSyoOd46lDtbAwuFqjPS5BY0oTNejOG4BeWK3dCKePpOzanRhN4nPmJAsDOUlOxvN4coC_TitXb4FmUQLI8J1RfhV70KUA5HIoU9yVGU4M4I5IcEqmX3_A6gydnntwCANnDcogzSJs5tykPmTlBjlhuUHeUpIAHQexrcTVP0YJ4W4U0K__TF17sQSTVHZCvFii6owNXyavcsUkj2XLlzT8a5emgRBZXjObrboxvdkvzDMtr7jGOP-p259bNUiRdFVvRXCYOTPPCiq4pEQbU0haESuexRyphcb-BuLydqk6DcjMYIucOyVcETzpNii8whj5QM1SjLYHJYtjEh7i--3S-rkmBMvmLJWsmq9PEjGqbm4_w0qjvpL2KGwoOsSlK05TYQNXDMDsBjAlB6Z9B9wJNv5EvI9lTITNwd7NDpEPwBGUgvJoP_dBexoBKYiaaTZiMSWeGedbncHblzMAADu0u9oxq8mBGMZJd1SkpxKKB_gqObJ4wxe_TlE_LHk5EEnsLMXSrnfLpxEyezvTh3tadCdIFlkTAM7S9JrNTE7vYSBked66kdJRbEuvYL6Tw6unbbMTDXPa1cxcfknsBxYD1023ycz9u6H26DOJ7ZS_N_6orJ44dYOPY7KmCT2Xk5CTVZUEXIwHoIdb8WEHAuGMGFtwSCD8in3zlGVp2FlB5W_bAhdmutOJxgedgYJgfmYfu4fPW-Ypo_Wrtpb2uNFBlmSVJQ7ywYuoP1cDRu3atTtt4x4i2UCeQcal6nYPPVB_BGj982lbmkTk6x0TrjARUkN_S1M5gkoTx3GvGpZPDhHY5zZcmR3_zCLcSJESll-5WrIVzkS3u0H_Z_z0rr3cgKemFwKBblTc4_hcN-vA-htD2DuUXeMPx58SWQqjQcjlji1Noeq61kCneYJfTSqk37Irz4A8JW3J2w0r7VibbzFt-e-6d7CMiFNQ6q1tlv7VNjnWhvF6Csu9LOzhgQtBKEsirW3-I7xKfea_Ahv_b3cH8Rc6HVVLvNqIkYDzsDBUC4ho8kq5bVfHtRpF5RrNJdYA2NYH3bZxMITj_GeKfLHV-bWSotLol_wteZdduF5cu9rak0Vq-gndnEGI-khKn9yzm7QN1pUhFQpNwdkrYsjIncWmRQRVBmXkGhrtVBYY95P-CfNAQiFHTFnnIApFfO1rsanu6lLLfqJ4AplRsqOJ6-CljAIwEdxQzHqLInylQDEMTKbgPLOWtBykeOZwg2nMxObNJcAzRXqvJ4SezfhTuzZbXvFQbMxTHgTH4QeWICkgAaLOwlBGSLRnDNzcsLwt9vJIpQQTUSuInsGNH69Se1_jC2xb578ja-OVfxZWZviec794IZ5lmmKu19m8Sph3XZKOp4_6rr8HCn1qjjlfKq6WHFdeH8fuyR847y00wy3Uh1iksEJoufyKbIa2QAN0UN7iYO6KxLir1zAy7hHBcQziQqRHw0ef9SopJ-twjO9gwcmVoj34o9KZMbK7smeeIqDzuf3UTxa6nVuoEolSnp5G6FFNZ7RxEJttucfO_6QXH19Bz4JPxLMMVHVsAMsyKzGwBzYhjLxMYamDj_KLVIfOgARpzddATc02Jx1Gyssx-GKqvh2VxYhlF8YVHqMSPJO3wivjfDKJu2LObplQ7fc2BM4NO-OIjcH2Axv26dHQh8YVXK9DopPkY3d5nXUm2JzPtrl5R3BvYqcJKhZn1RLEZi_gb5fEFuW8BJZoGT5ZGtBx9OHd6mSkDU13HDZya6o2xQO4NYfcW2LKkv0a2JG7run-QFB4dIqMYEOPYiBvVQPr8RmBAgtFf6ALGPv-Oq74YFWwphl6yrs7KuCC9HYPU-A1pKbYiRQ4UDMRxSuX2o5e84aiWOR8IgNQrFhgLXAp8S1gTa4CVeP0NlOPa6AAKIc_j2c_UZqdfrwwfBIKh_ixrzwOoMSO7231wbCDZDX73GRby5FThb71qoMk0-ueD-tisHaof6pp104tePT8Vuvqy8hlwWCJHnWpmGasppnHE-JYpdR2Xa6SbIB9Gkdq9ZIpCJ2lIgZOAQx-rGSlECpoiG3yEyDZo1Bb-UEPgUzkSXTQD0hq4SSZRMwqWzUwvDoT-c2IA1PCx8KWhM5S8o2ttgXOSv7m0D91tfKhvmEdWnXAHdWNhaQ6BkRFTUX6bUIiRsCshrIX8vN475XSUjT75nRoKCZmsvd_0T2chI7HfDeHT2i-QIY8_fB5_gid8mO_UXMViq0BKJT7yPRE8ehAG1SzUkrQtix3-GcgBN0okdICnaw_kdAeVgHm3H0vXmK2IMC74oZIy_gTrEAI0QEH5Z8WRSfs1sLyRxmGOHELu9hUMOy263LrEF49LNTVWidXVUMBuKSwlisjkoJd0qpMfiI7Gfb646Gs1GC9e7TcIFp7gjUZABzuMlj6yYr1kTtSIAf2xn00yqGNreZ37PhdXlUB_mZ9CQoVnqBn3nnK_RpYjx22HDNqgza0Jw6m9_uWfEd-bjwCIlYLwgPxQv_Q1sB7lTDyFgFqDIRVF5_V3-XNgOgUEyGsjTTogeEOkTPQ2h4AgeW5dCyuNjIcReQmNNyW-BkjPQhNBAptSyo7THuYZP5skygZyPh0dTz3Nyg9DcWhyT96QZTsOV6FDcaVH9YeBAmiiPblYyb1hzQ3kI0fZ0aOfkry_vBhyElwxB6WlSzAQfX8KVABN6YA-WIIiseAqSI13l-DRB2x3Ksp7q0kpSVpnSAG0uFXRbv4A0Zb-JoSbste9JEMUbdtYoG5Q3xt9B3lfkSnVxn1eeoOf0kjsEOWPIKz_K-ibZ_IkSoh4l65Hq2yzucnbsADH6WuqSpfhlRZ8Vn5budZYUme7r9UHJ1l5UuIDyFeS16m0V4ec4bG12kPuDJKI0f229GCjJOv0Zerqe04OUsZ6VK2QMmkJi8elPZm0Odxw4mQQE2vOLX3G0f2HG_eXQBEmrtQc3TGrPSKoFpfLZkp3c9cxIgV1TwyVKCMdNrhJlyUNSaXimIGia20kg-LBcMFsBuXWZ9V1xUtg4TM5QwGGZn7ApfZ4Mtf2ZnAMzzxXtFE1sA3kPVcS7dp1C3JW6cbTicLynDtLS5Evu0wJsr8sOxKO_o_N8EEZmw3wqpck0KHPMn0-q0btlKKbuNuqGpZqSUvsbobkiDHcL4O9Cf4g3neLCLz9jKq31UIaWI034yeUnWWueQBplS3M8pYFigiiew9xL-tQpOsj8LBXO6nscGICVPOPt7DCuspJDrbbEGDI9WOsHyL7IDvA2FfMbDgndQWAnd2CmZ8Dnerl--PACP7WE753LwModC1kOofLjCEmeKaZlfenEpDm-MlWgAXhanyIa0SIT8pjDmggtqxuMyspeRxUyxhsVuyenFz36jbFEN01qcKOZDOHRuZOorNl7ACBEFrZjJBKawGF48R7FNyMsZwQHifjZvZAC2V5ZqkrNEpukuKZovR5zJRF0YWNEZM1nsH9CeneHQdWznAJR1kk2ZAcHIkkAlfZ4CGjGQXNKvIeF6dUkyCDXLgYB7OhwKWSim6UaKE6DC0JTSUaiNjS6ikEBNmwLywkZ4r81nM7nFFmP6k5IgwqVQGOSZvDcdKq9zyK-8npE5IGMkvUM8oih6EAQmu9q6a71gNKvxn1CQU2Qs2Habp_BoI_gVjWHpR0DZgIJdFJGIzdQ1sYHNpWn_pNie7x4vsw3ZJsOE39i0vDKV5DMPp4pnht_EJwHFq6kqK5fM4ntizz6WMNgbozccDdMTqjM0PtZxPPU8Zm37RRlqpctwXhYMlbcw3e6XvyN2NqXu1GvXKNFbG09vRXNomS5nu8hzyzywxIMofguCStM5HPAkcH27iBJt-TRtb-9D7RnNsUicuK34EDrlqQ4qWJKkFFXrewINzcj01v9KdiYEs9785dDzyZdsQ7vyjtvd39nx12Me9pR-iUMZ4tu1ZDFN0VA1qsIH8PLjkHS2TyCOS8Jy703F1igf-6RvG9qq7_6XJQBlF_FhAVyn3SKOOy5AKr2YUTtE_r3u7qb1fVlh51DMfcoVQ4yBHLdcYUhvF4Re4pY3JiVQFDKy0F4GDJEowLyubEIrugnyU4WAZASyfGh4rElea1B2WwPBaW4D3a8xaf4yfHue-GwDCEcSXXeWA2y02XCr0UnHlUyuXK6QcAcukGUz4HbJ8fyQU7eJWG_DjXjyxuryiHikgCU29SHAmdm8AlwGavkB5XHxZUEpFL2R-4IyI1UlQ4edTU6D9j_1QgHiwPMpGOU2NSTLTECW3Ob-IPiyQInRHEAPFo96oLA0evLpgUi-7k-wI15KQPUSkYpBGHpt7HuLKxtVGuSfddTWDCFstAFOekelvnc0RM0yfHr4cmpcDiafYJAOb0iRL8dH7_gTmsUpP6cg1cj6pEiVx97eRN3V-044HHt_iQHXo72ug-tafpJidDIriYtz9ueGvIM9RLMscUZ1RoWBvuBtt0njBl9euFk8D6mrDq61NqCE7Q2Rt2Mp2VIjjqGVnpCGKRomHzz_uwX4aUaMIKsKflN925R2esI2MSvfC9N-yXhR1vd_d1FpoA-mVLyVJJyd3EMjJcU59hS-viww8HvnDkNlenfX4_6jhBFpc1aHEoncDdYojEW9s6JsYnNRzUTHnPNcJ9qvzKDZeeGpunkxMUGiTP5PuN8kdOzfM-QU_aSNVpS9J4kB0Fq5uY2H20YpXgtmk5_PkaSHkpOPlA_TYKxYYixfNucCzP31uqSjnuM1t0jpQt9i2X1JeF24do1zBUZIT9zuHyqobTNTTThzci1yPYbLTJl0_xChiBBnpAsBFfrjZuwFaVnVKxMzxjAWG8isVjS3oKOfu1vxd-ApWPRRjeWq1qW-CL321zvkGxHeJByojb5CT77QmZ79Tx9Oi2Gapmk1ytDP840oCafnr5Fq-vLhINLmgJtOvpUxtSmKtHXLHY8iO8RRWQyXnwv22NJKHpVb0MQ-WYqpTMTRN1f7hRZ1ycjgCtXOhp3n3iXr5w8b4lvIYP46vgSpyDf6bkZKfN_hSMbvTzDX3G4_iCJNXF-u2M-fiIVB-4IxJN5-9ynvGFaocFbAsPOhIM7ZUG4937mhUixsofJOnVPt9R4P-GMZ7nDfJc8gHspdPQCJUlMjTz6hOIO6PSOZ923rfq72sylTgL62JFWpz8E4nvz-Oqv3db7ug0WZprzcQYsqOJ6cunvgZpc6kWubkv1bl_zvUV1RvqQJg4JroKGGKXqnm0l6xrqp8RRecH3YPbOCzWAf-jKTm6obwUccjNyde6ELSGCtieCtOCVvF7QYJJIS26Do4ewou8U-kj7tf2wVREq1YVs7L6fpXCCp7TB8HZ96kfCtPX8a84c19MCxlteBi-nr7VE7JIVnrj-CHDwBSznDECwecIjqoI8q91UdiS8fXpphtviIEqxEZReQKE031DMy8E4xDnZl8pU0oQu0s1PhNF6LpDjI83ymY6AF7ewUnTszYcdBP6lOklk4uSGLyXnVI7W7YODhP9jryg8xKniapSFusATCmbnGlFaiybk5tXZXUVB1HxaGW7k0ro4j04-cXSoDsjScHmvm9RP8rMrwl92FcUHM0XVs5CA5S_eK5B2CwIBF7oAFhIUKzOHeHuCweZaECYA27PrZ6Ij8w3QtHkCnEKtaVmcTnlFX_tNLHaP713EVfKE8hKb1lF9hu-gTDUfh3NbN9-N8_K60LCOIdNo4j_ruqElXZkN9xPLXRg2QzeQheht6LovPxcAvNcJECRzM2pwmif82cKNiV18tgCYtqcg9JkbR4Bj2Fsmkfpzm8CT-gbyHT6_uVPpwNQCChNgXZpR6jlRDGbBz1aKezfE4zNP4FOXmyLhzhPewsdp-Rn9gD40J4Eju8POwbn-MpfJAy45k9tcyetg2bv-lIeVmp5RmDnf8QXYhdp69QtWgrkWECt4Qme0XyV0f697Utj0VZSY5yrYR8uvpLybJNUqPDDHBiF_LjNzQ3go9-6WI-s2odv2VRJdM6WETyMF5oPAYOvvtye6ytoifobjiEjk4pySTUTAcSJenDp38REnyQ7HvYNDvHifX_Mk5wBGcHAeM1p9xryhFnK4-h86-ifvFt6ZX11nLeetJ2JveQiJiU-tIpr0kppZBe_hVza50mqDUXjyHsrBNB73lThB9Qn1amGWwdTFJ46PoNv2tZB3sZ7_l5y8rPEq-Jd_0F7XIZlVdRVACQ__aSkzvoOHl0vzDqi_822UWDKyl4_4vRw0Euzy-0C0Of-whMuQldan2ZooqCh2I-Bl_2zhqShJ6ZYwJjx-Y-6Nvxk4qpUYEJ0bI5OMty6LH97WLL8Fxr_6WYW95f7MHu6aK_QUTXMqxD1E3hij396fUd8H5NDWRqI00zuA5fP2DkKg5fSDUOBpAf4Mjfa38p2H6EqEnWBCdFUpIu7vlVTxWvHmBxLEDwM1DU1BdW3nbZaA8e0qNFZ_aNHcNM9jsOCwPGBwkoucLBZ_aCvCbNCrhZbrOcB-ibRbrBFPHSthRALAcBq51gOnukHKdCLiFkWfH3bF4VyZuvqnRoLxndML8nV_PiAqyRk45L2Op3K6SpYbRvIkkE0rz21VpcpDzRYUpqXqDK865IqV4Q04sKEA4d1MFv9WhWvJWfAgOmUqR-oDLBGJVcW-5XEANbBlLtqxWXIHldq1NMmk0VxU8n1qNraMFTUnw67uUCqyjrfieuD1TPeYWSekqe4IUG1FpvuuqDB4cl6HCgZ5NXa6A0SlxbU4ynOgb73Ye1JFeTMaa1wNAyiObBJyCpWTgLt5BWECEfyqKeuXEBawSqQAKBFD9pl0Xogs92MumYHXUs6wta-Nw9AHVtGfhUFTjMfjsFrymZHLJpJoVNr8gjaQQ4wHPwDD4_fCwOuLpCXgXAJRwIzt2Hv42wOjtMVg6rVNNYrpBBQas70FImKcKc729nJsE5veM4J4UfEgDwOkRE2gczKnR4e67gXj0TKumdnbixSe-ixSSkGjQHHyZvbG-HL8re-ZdIcMxKxiCOleNJ24wIsCGmLRH01G-RuA--44pLcSwTwC98nJJb3NGtj-HV5L9__g_9AHQvqRhQhsto9k3C5Jbb1raNrwuw8T7ZEdtQ9eYX2GA_FwzkQU6E7tUQuww6IAkAebGrUGVYWXPdIxqpXwWhMz3j3RG5GZ5lAF-9CIwUpRsZJxbStBROUGY4KDHFZ7REEH0j7q-BiJ11PCU6L1gfZusI179bz-dErMLCvwntkkoHBx-2jEqFvvam0JEEFtPlx4RjHKevOC8rbSrMsVvfcJ--3_TkqdRQwQNU4SI50qxhUTviJ4wMaPs-7ArhzF8hDPE_SnaklMCY2BkRRPIpUn8CJLgH9T9Wyyu9V1Vem4O4rXeU8LSkgrBry7eFa2WLZSjEnhfiI95AC-3HTKL1bPsGyghzJCM7YCV4cLaYFY_Lm2cFpHGwa9PCrYFg_T9x69T9u_BeAQF8s0fARgCSWWeptk0tndytnl-W3AUkx_l8BS8uCTfK4PbyvBna6rJCznKvEJP3iJhTtv3uG-uu-THZL2_d4oCIOsOM_m1ZOCrShYEp-hlNauiDKiUHZc3Q0ym9GJNjCFFiNiLXMaMpBXJWhJULFlF4GfjV__3R2M7vvkHVw60vTKeHM1VKb9Kf4NwICaiFkfS5DdL2cY4lb4fHzgR0saVgMlvQfBra2nzMNDFOg4LG_L5NbF7qt7r5Hx-YCHzeAkVoNwinWP6-MRE1KLZCsc2Rm-nGPPJFeXkCUc4hFBgsI2-PBULAd8U2k2kQkDbNc_w1XWdlYTqJWWyRR6OO_u3vBi-3zQEEgIACcl2L6gWHQnpmwo9xQUGDIiPdYUSmOR6m3wS3tbDIJ3lmNDnh_P1popsab5dDTCU10h4s0p9VYS9WaWN5zfOXLHmfutmX3CiAFnY_LgWdApDwJFNiojGJPD2UFbtRU-H8Gyti8eMtxuJ5xytZxcsZWhZpuQULd04y4gMRsiZDgoWwleny3aTtDvSB9Sk5xE581SjbGcA7Y1890o1lCHLzu6YCOYP0eXh58QW1K52GLVeRrM8HIp0oaLLEVfG-z02F5g_0eK4Ux-Bb9E_EiSnm4W56rg5WxOF6WeaRl5YsMZ8b0tDoqtdyVBQ7n4NzwxE8E7GIYIcbT7He181_l0lX3irLgC_FVRHinBjKmcJAlvkJFtrVb5rz6_hHPE6Cid10fvFhhsPubbLxq4Pzt-3UZeel4J1NR8wpWEOz8kKTr6BupJsv1oGyp-mvHTJW7gPMi57w7Z-vkcmtOKwtvhJQdJhGOB6MD1C4QcsDU6wUTRHth5iAS8UtneLci6pauGx73cw-5ig3DYPaNswS_L4Ek5ltd2fAwYiRa5-8EDlxk60lXpGfXaNZJ0y4nuDSl6AW2c9crYWV2jRkZ_wEXmuSLvcBNQtpxMyomcPkumjWdheoZQGa3fEPXUpWfuC9jfVkJYOs1CV7j_lg9lSCvnCaUrgqhXiD1jpAlljnYsxQ7eWxuRaW8cNzRrVYCEnGg00DS8g54zIIERtlFf9bd1HqD8HhLIuU6t63q_Ff-0lsLVOdpvRUKXkFvg0LMxAvFMTbeaNpC1DvDSsndVA-xFCzmr4UXJHSLkWjVtOLx8Ax6bL195Ak-oEYlnTABTNsipD4txOUUG6CeQnpyB_AT1q0UCcqCthKkEVl-dPfUYMLW_qk1CEUncuXoKKF7uzxbIl8eOeNAbDNgUrF2D2-okUJTWYiRicPtbtB1i8rP9Vlp9M1cS-xCFl01CEmCSp0azxSanxG6-JvZs7sUQ9IsBkZjpQzOhpAiI3jajXsH-zq3i_plNIh6W7Q_dOX7meSCTuho3nJDiyhvi8uagf9EgNGaGCQK6I1Q1wAF98ovDhyX3UNXPRphEoIFuz1tKkdV5ap9426J-lvKQBnlKTXurIsGDTK73l2-tIi7T0OMyztCPGTDPvcQ8np81Mlntlu4RVQu2wyhn2Fw7oryCGBA5DAa7n4vOkhkTAI5_BnrS95rF-X2AYXUHuUBlGi6cI0MuPCZXf-nH0V1-Vt_0b7GQ-AYKfPwwFCcLRuWSnnfvtDONQGpieZuQtcUPW_C5-ciID3IGjwiZFBbpSg4BO7q2-UZ7NmMDU9D1vVgrhS4pGwXpgiWpKW5gdESM9BnE_TuIs7vMBNICrLyuZv95Fagmj2uQr_lsmoO_ut42A-M2n8u73cSflfA7IF77OZ5RnFwEA1T05zgbXBrjs1DagGZYP7mvq8nZB0qhxzeMAXE8WfcwP7F-8cbHHsVwzELkvHPQGi7OufJgUlV_q1bMX_nA9dLjiZiv_V7eCEqnT8Rc3dNGIMuvEcOlu4Rb2W_cgCh4eYhiyAJYapenHIumR1Ac0aR4bBUK8kfN8JdQXDqdS7S3QOLTbCmeun0ogS3mZw8QCh_DYxNhEH9WGHLjTSwCOeo7OnL2B4IjAY5NAYwlBG9cVnzJYtCSvmdR7QEq4qtPfPt7KFlEJwWVi9EAhjgY9Ip76MdPxel8bAsckEx7mjUYARuEkZjIB9yV9zOxqqnrClv73nGHJT8jLNbzhHHe0jrUpPpnWwVIfsJKneQWgN56q6W8RVbHM6sVJf7yXOo23YRr1jL8EG7JvVejjo8bqCWHp8HBK06aoShvJP6_yZX4smQVyffNMLpnGk95Wd638yPQVVtA7K9JPW1uhrLWs0hqYs4EACKjbF4l9wtiCY8bNYviQHqVgdsnzOv3h-BO0ASHv3up4MjrjjjdpoCDdMMvx5QUSrgEFaaFb3j5Z20GHHuDVvFkBNz1OXgO9QFOYDxFoXC-hLj_ciX0Iezp9EO8vstJWLcXK2lTtxfrIe0fsQlniRy5yI6aZRgM-na3dVvmvPkVGxDYycmFnkCSoF5NQVaWIbnr6SY1Pt8bi8Bz3r5p16tJ8rYlLfnCTzHcVAi-flYdvfqShYbnxxG-jnjtIiFfvpr0bKbymAaB514V30sH_2tN5wlqZdxWguGMd-qGgLHY8WleNerEp3Pupv_e_O9gNlDYDLZE83LqCRGQW-NNBrnleIN5zw6TZW9YSI0OBst8sKlIWP-SWIm6XBK-5Rnxypsr8yUgldRVwMLbnWgCQUiYam-zJ6tia1l8PxfxeG_ZkIh4nirxP-3P-8Orha_s5YMQObqBwvg8bqbumkQdXDOayE19vxc1gBIWyWQBWTqTDovu7iaAvv6kOkwGrc1ZHDUDn7Ha3cL-md0Pg7vvi0wTH527jp7s_VhJMi65SthH3QHdMm_D-297i6Tf48NQR7bVAWqc68muwd2SGxbOAWuV_cF0Q6H6CupO0bZxu0KO5ulVZpDnDi33y9QsVaB3XZ19p2_r1WBQMH4eCiPM9mVkagid56vx6xw_Y7RUxRFXK9a2jni7_KlqZmDBK7TqRpl4Akp3tJpd3bcXK-x5qD3F4E1s48_IwFro5UnTGnTLrSy5HL2g2Wb9YLH666gf6a9ZjXnA-Fxh6zGmiLtm54I0YEnRlFqhb2tVUUU1wRR4sq33noAomcRfvjgUpwzUSrrmIUVlviHZxRlZYHt2V4_SnemaS7Jde3YdmQ3WM28T3HTPC4hN0e_c7vlhqfvd0kYY16ZA5nsuX9EUDzgAvvsNEU6ndO-eoQ63kKUSxqfT9BiPy1U5fZDdZm8nkuCICdeL880u-kFxKdl9xQ-Rl_bDJNrnB6WA62HEwgTt-DvvLVSH6LCgsiieHpy7-1k_lYyS_Rb7TOrE3cvCdnenZnBrsDvL2-HK60WKCvd0LgvUu-QSL-IgyilTgCGNvOQvT8DR-DuooAeRW4wKv7j1RW7z4AJeIGppmCW0QUVoPjnRblsieBQmrpipkOql7_1L_Oo7qrhKWJIkn1f3iFnrHlUATByubcDNeuFCmoHQoVpa2OUmfiCfwBWHgHaGHxM0n_XlQKUG9FdEN11FdUiBdwIPoEW4_bxVyQbAR0ZCadRbYK6sfB8hYez3q6SsQd8czsHbXIFkA0AEj4ZWOJD2mVy2Q9Q2CH2TvIDEWTZsDj708h4HRL_6DtSn_dM8eVuXoxc53w6-hPXkG4Xaftg1mQ37SLaiAUfVXEleOJ98az4LZ6qkNkUm8XCT7rhzWFK8kC2CiztmCCVTWq4gpfQE-JWvvvO241pS1MCXHAn4Z0AXdIOxpQ6akuH2DiQoX75Y1QsZNF4zfRmPQIu_se0vfpkOEYoFHDwo75C5D44TB420ZyPAPEznh7gpYpABPOMFeF9HSeMT2cVg2uRNnaRP7yVwrqkoLD5sNe_ULpex4mpJwhX-ujBGVXL7vX2AZw7kY4GPXXDhQFYotAMc4aEWLqixDTw9XR1U_4qBe8MrVswccQ8KImJbw7OSbH_wApesS2JpIemAAce6JoBJsQ8pG3u5bZ84iEQDXaURXgUazNDPfnBmrj_B3JVA-lvZDwsMDNIXh78vZD_7jVOjqadMgPBzFeezO6rKy9dMUch9y0vt4t618wRy9LMotrAvfZUCpryZLMJUbI0SmDYoN9ZbpffszhEJL0CkLgwiI09Tzk9265cM6PsspcPTNaL8NuTu1RZeTToRlgHERNCKuTd8YETH48cWMlgOWRBFmvcER-iUpwNdJOgSOFwDMo8ZNDI8UFA7PnNYdXbB87AQGRwKy-ztgpPje10neOXjuJgyw18hpjw1wSlwJ6mNVcSFiiOAa3x1lmAy3L3M1vbPCHdaKFEoZg8nmdn7eD0DPuP9hxNkPC_rFGFOTl0ohd0eyudKG4989AMAEefT0amAzHEMQILtHDy43i2foh8j44nqZIk25KXzBxBmsmgaSg3IF3LU5wPQTT29Zwb5DM0-pPSoGClo2th5rpk_eBprngs8qnUQNCgLeUAfWxSCD1C2_IyoSjbZB4hp5oG09Uz1oWDu3dwD9Awu5DBizm3uJHwf0rinrNgDDs98V1t9TVIrLHjp8dTZCBBHT7hFTi9WSxMnnd0UmmDXXcGQNw3rw2k3A1cMyKID22zLba0EyW8sMoU8jT8AP0Jb0iPUDFj3dwR1eO-FoyMeL3jzigm1gMVpXbytHS_RaK4bxITRthL4bBLTjrBhOPkahkHK7w9qpytbWSXdCIyHkgXxm-qGoE8T7-05tIE_nL8npCD0qEI4UwvSUfFBDJ6Utgd3LNEoHsWPbTkKMONz83zJHzuSmJljRLtXIrS439sF-zFuHUURs4HoRIqI7qD8sLqvuTRegQ84p-XvnjJTMcRWeVrZUY1afW2Ky98mE81k2uWbb_PBZvzup3bpdbPCjZf3XoUhYkVEZdaXQEF_qj8n_JPhHHgxy_BC2-ZW5r-BDOlKzYEGFULJ4whceqPApuJAzQFoMk4HCGvsBrv3QhzjJrDuFrDsYGfpaaQchaCb0zkbBwKvGIETrrH6hlVb2-3vhVQoh5jZ5hR-PQ0F0pf9vA5I_8dOQr2Gw-UqicycUanyIodtnvC5HVKm6-_9M9UWRmDyoiKb6GlTA1-YKyQbOWuZuw770flFyn6GGDlOUSkoZGtp7pmkjdsULDpNwFtcGAFrcgqNYcw-26Y8kFY5q-5QBm3qcE7H4wAsV6z3CQJvpghDLWO9-tMsJVusQ4BTaHv6GhvfN7Orupg9_TCcU34b_si3wc7KBqN-PLo0zvSTD2qqcNZAUGL3JmIpCkcbWPEz3mCt9plEWo6YOp-jDhyS6EOElobMN8rT47ah183x-UM9cLXrECwCZ3_gUF1OJzp4juLWJPU1pwDgLN97xxonGhNDmlOA2kUHZggWLmemHeHd5GsrVJDuGui-2QnE2FZ2wjiu3GZTpLj4zh1euQh5KMz9sF_24SEQWnz6YpBFBQQV7W22MgILjrndy9sdB4TPfFIBOfQtyR8XBz7z5aprVlzKu9mFx5hDjHfIhFh9sJuqeHH0FFXgRu5ZUWD4JtpxqKqL4Sc-IgUdbnMmt4dU7Z3XcSq05uwrSszTN1WeaIk3DM2Sk7LKyNHThK2mR0BR4qQ7mBjK9pSRousaHozXcTynW_mj_hmZH14hRLmcaEf2S-x7oC4fasmRw_QRsDidxp8K-poXH7m7OX3IwYh6h5gwFAbQKmtmCXRhFGgMofr63owIdjwSsLxMmft2atci1kt7-P9oViWJflCpnfasPlLvn3FBnVrsGsJMOR2IXdozfIT6lq-HEaflG0royDVz6a34z70ksLvNR6-quriLrkE5jJxOqde3Mvegb2Wsq7LptH8ozs4GGzXIfCzd3_EBIXmNc5aN50DqohZHRuYdrh0nI57FVDSr2jpxNXLPVoJprThORdnKU0MhCY6DjOSm2B6UGziNSoyDby73w1fDiAglgMgGRh52FISZOmNKGIdguX1WGoxO9v3c5oN3J9uWunpfBenaV52AVWluUS3oKh5fbx1qaHemhRzi_Ax4izfJ7ZSwmh1hCsUfBzyzuUI1dca6PkTcnvqi-lxvr0P-cgyAIXASmqeOoMLeZjPqPfeSfJivltLq4e5JMmSTHJNwsPC_mGQYEIYC2ZjmXXh-1I98M-Yv7CDPYf2JEkftI9B5vw8HW2QRcJwjvr1ZsvoT9HSP11Nh-M5EJogA5gmUL78NdLrizXkf4Zu0vz_TCS10qEhSSRrxREsd9awc1wL55kmStlYqrv_oaDxu93d2zUg8iCy-9_I5AoB9pAD7VNdxkvcBEZHR_0QR4YFRpr5Pwn7iK8UtKmk1qDxz7tKVnST7ytaEvGKYh6d8opFXE1xVpbWTxwp0JnbCUsxRCYIwaW6leynh3KDGAqaxTx5qW6xmrT34OHJyz-8EeO2IYePEPIPUQlugUZr02YWG1e7wXidhwyHrtnEzeGUBQGiYT6Y_e-9-W0tOAoWl668tvH63h4qsInSPKJ3sD3lhREAXxs8_jdayspznq1VCxKVOiEqb_RbJ_eXTgsgC-L6XQbFVViKPaklc_v4QTzk3A-Ttmqur_pSf2gNPxJvL86gZKZ6t8TYhzA38i6s-EA_S2t4agcwpy_PavtkbHSaIk0UkoJXNi6tKbVmrsGcfLU_1Z8sko1lbNFEieIl9HeEZeV7J3Z_2KbVendgBwHpY3I7g8ZOfefpDeCakGmhMfBIlBPZ0Q7Bky73rDkaRJvkSaqkDqw8ugVISq5pTPdU76TV0uHfwqVZtaCJd5ZijtPb28FZEi5e_mmdUSiPucHW9SA4Y_dE-0BgFWMQN0-xYn6pgTBZAzX9yLDlAdtJtgDVVCEY_6_H4Kjs2DCxlJwigN2_TmEBfd-3o7k-6UtWeWRKVp9mEOPJcP8e9rdXMH5yMWVrOhFETpO_iG7qKujTBHTyWjPdOygdiuZyskSHIVN0rz6mvLqVpar_jRXAhzFgioZCfHLT37DlSl_b7JCWNuRdUZKH402yfcgN5SdsrnQcenBm9c9-SD1ygcMwyBO91SSPApErCIGvP9DvaIWN6_OClELLn_b8DKok_w2QrzV9v6kfGhPQZifJCYWj38GDAFDdxFFd_EKQy7xDbwP3xjGvDkoqdVIQ6fnoeURkhOVDjD9GmegT_kvJxedwypxJNLLMM1SlG0rz6TpDV9DPDiNO5kIUOGHxGe527i7v8TjlcUtZHlijjEHxy9ljg3_Ecoe7W2JcUMhI-6_M9cBgKjOa0_k11uMKwGQ_RJHp-quGwYEEjN8_f3Ymc5-p21beaS_hAbta3DeHD9Tvgx_Qmuq8zgj5Xi90IPHfmMOZybZ83w118LaW7C8Q-TzFOASUQ8rRWv_U-T97CaAjLNER6XFfJM3X8o75XAxjgvu1mJQQIYyWp6yppo18evGdwd7llm6iTZrz-NCtBFpaD4KE9AFc0OC5-m-af3G7u4XEj61IlCvqZAThoChFfrwOvaVkEsCy791Y9n6MQXAV8yF0GIHqnSYFBekyFbLq55RvUwBHh-Z9dE7Fd4X-I7gl4084zkLkjg68If3f3p6KYU4Ti8X-QyN-9sEnqyoZpRRCqenBX1rB-Bnrj8Vc3aaT6mYCYnhrXDAapAWjbE9UEj-CbRXeTbuJ0zmog8tq9Q5s5VzLZ30iPBijBEVtn7vYT1bEtDokY-ZCrYuZ4ul0e2bcw0XyZkaqDSH2bAsBykwpVN2GITI-nwImpiqhwS2RcBVsY700PNgxn0v7yswYyk8dK4Dl5xXxuEKrp5i-hThA3z9wMebdynQPjQtyrPE9PXT24hpYHs1ie9c-HOPM3UoiBUbJ2FAjAp57lW8mn_SfSrdl3-TJTRHP9ATvIqgLg-Vq2AwaKJQqh5W15Dd3o9rIGladYjDTZmb4B3BdPA4hVCUVRK9DfE8qIliCt2FKXb_4sAroqv31vOyfnGlx-n0e5M6vHfcBN0DUmXbRDuSrqTf2sS_vQDR0GHL-N5H6v9A6RiU0rSKKXBQDsWS37tFF-UTIQKoPWgykt6boZTPPsENUeeo11ol3Lb97ioNBVlqZPIthTW3ppDL2uq2S5-OtBvfDp2h6ewxR1Y-8ZNFBtdO9AqbT4I4Vyn_QM21NjQjAwfQBAps80leCssgQDkMUrNV7EdU9n4mT1AoSotmgQynxDJCAka5IbgRHV_X_Jk5-xznT_ELCqezB_YnlQT-51eM9AK-9cVbovo0A6YGQxFUwZR1xJWb6gLL3nLsAaNPxjzbeSq1yqan4Sxn4F4jdzeQdsZ2zQ6fOBICNESlw71fnX6mWfv6dx3qWX8x0TQ2BPeonKqBwhKIp6Sw0YnGBV74MA5viYANx91XzSMSk4FZuQ4vl1wMNnfX5d-qEu43O2NvUJa9yvU65p3gE_Wx4xvzd_nFpVegkR47LzZFg113lfIth4rUCcyGwkaNComvTzrnCJBsKxNVtGiwozDS3xrWahBbfhemP41eOrYyj5xnnbwQzQ9NbpLaWiR48QtSWZBeUHZm42yrJuuP_ovxuCmE4MSWh4ehhx20werkebZiB5lvwMGDNrtCoN9XyAHB2tRFPW43Rpr5PXFq6RLbONkdGh6Gp5q2LwDctN_BHly9VqVrxZTCX3HjbeDCh-Gn2QsahZY9ScPH0A8eD8aX5bTzQQMpurJ0Qo4dY6BJaQTwGJ6z1jXF0rGxUmO0Fm160AkAXTlGvKTdx_ln3Th8Dwh-9ty2OKKccjLv4Mv28CxGf3IPVSFm2gED_3Anxnu71ejHgDWDqUuL39sKZ3MHp15gpm5m3Tap6dQBa_A2bKLz_x0fhLvpMmngQ_Yp_5C5PAXZUbgjKVe9NcxdE3ut_sZ0fcwGyddaZF6zkuK3onCEUZC7I4v5CR7mF4NYYQxdnrQcgB2QHd7LGskm0vD982jcEsuegYh84BU8ZyDuDT9dlIEpMnTEi2FnuoTjVzvkzylTvOU7CpP-v5IYDdPsKhnojuR228VCJFrc4TIveAntMiUBQdM08Gm8LNlhQbHtwMZ89g1vk6N3Ef-gkEpdL82nz2ryjTXj-pjFwRo-XZVfDTT58i0D3hLtJKEPawN0NJnRE9mr_PxkQ-b2cA653dCLjaqjJyl_km8rVnPXtpwhWU2hKWvuUuSEZPBItKUmcU5GzVC-YOAgwodBWwU9X80SxGIeALiXq52YbJTBmPOmIMgqA_Th4G7aKF2J3h7WUE8Ff18Up-U_XB9bEQvaKwK7-Mc6Ww0BNxxsxRLPIfPwx8pJw_4PeU9Pdc3cSCHwSF6PbXTv-a5aRgqGeaZy6Li63qRo_fxouepxG0zvokWeDk8wk8eRVtYkBf3re_ODtUs2TJvpVw514sgZZxgPVr1S-vlq06d4f779mwM-kb4JNsB5Cetp-2i7FIwbFvPRJpU_-dUVnCFl1qzpbDjPr82GCiE7WZc42g9lmeQjy9e67OHtsGgNmY6VQIRaXTskvfSe8auQrMZsaEKkxdFYhmDozTdYTJwCIj2UMMF95n-b5VC-gmeXGeRhyfefNBB8_cIWTfzOz1kyLUIHw-fYCxeAcUWBJPcaGIIAc3MfYVOPv26MRYFOf4eMQzP7zISMbo7jNh5eVNQVR1uEv3LHdIkaui1dDPJoqSbyBzPjec_lQ4XudErgq1hSNHszrAjFeHp5aZzX2USaR2JW1WcGw0x-dNRrMZDH7LkyGP_BKr8cm9IgrLI3p5RwN-y5nLaP7Lj-Ow8lq_1u-nqiWuAsHk-cEZFbICCg585lDNNXw2IL3eVeekezAAHnVlCblPr_oCaPh08ziTDtWnGLb9NkfNJqNKpSjqRbOZusNqUjRbUOyWdHGegFjXE7oi4v7O9jlHHkJzaF3yunfwVQIrK03A_rdvuDqpBbyeYDQFWZK27gHHc84mPyspAr1r-x5ESkyYIvQrrxecHLoFHrjmNHUuV9dhMdxK_tEQ7ll-zepiYw74ZaBYUJq-7F9ADQ25L-ymYex3blbmyPBHnbHeVv2iKnK2tgznkUeCMWTkVpbQCkwNDybU5eZ5ZaTqhblJ1Ys1s2zAD_iyTLtxZ4Vk_MXrYTejZw_uTEtnvFTHcgjOyNjuALZ-EUmVgdOJhqcjPyMBId5uToVWIk_6yuE7hP2v7lQRK6o7eGJ9EOLK7aJgowk_sQfi2sdWLfClrZFNUyGY9QqqrPSR5t5ZNgyKkihpEkv0gwWh49cBKR2TAmxKTx0e0uXB5gZbOPfNFFalE_uZFFjYlkHCYI3xQJpYnORXvx0r23lACuSvh67WY6LM6ezAIbwJ9ZeUqEztVZDmzFCJ4dn9WRzCbs49s3PrBJLW7wAzvvk7p37WdJU8PLnnKf-ynVlFUpGJIZugZI6K6bE4H8Sk4T48VgPuaP03HcQq2mvXQIByD4Gf1y59v99WFSS4rVJrfzn-snzX3VnxyJCqYF8Gyg1hItVFkCf7RgmWzJ3P3ebYYwJJQMh-Gy78VDeaMli5ASwD_-z8hBqRBnuWYBqfPvaha512ahMtsw-R5mfcAZok8-fqMs8Gzb4dJ7kPa-_YaHKQ-t57VHxR5s0LrnEeCaSIFChrughaoQqFBciwkKCTEPglleG24VzT1-EAtrUJTUspL9uPILomlgCfC9xYUZBP-d3i8stQtD28yyCRU1mWmt2Wpj7keASbCNV8A8m-MwIAR6w_ulPhlCa8Pm4u0of84nsA5LhBO7YVwbhW8TEB4qziel0FrGj4bYLC90KA0XLmdxQn5jMgBs85jjCYmUeg1FY6RHlKrgZdWPbkjIhQBlbMTLLtSrpBoMySA3tCdYhcXYZyptlPjrcm3fGNNthSzVImDvkKXenxuqr9Fb3fO78Wc78CsRrB2fYXTxJisdvyw1yp0zIUeSzGX5qgGOsdpIlVr7yO7zJrl9DZSFRgju5OwBETGxrdzWHE2qky8agpE8RT01WGmeemyoSrKvT1vuS88RNwW1lkNUNh62EVHpnXnPPNxp1x74mrxE_bFRUkRMPZUplvcj_8LCCzvdW67A7E-9Icu7pNcu_1sHvSrGbJe4V_i8ZXZT98PznWold0YD99CAng7xdZXhbkQMb2F7Gimup7_hx2_fNq4IJX9kbHcJhRogl1DIu_-7jWd7q6nf_KVZGM6btBmbJY705D9dW27CKuiu54wJtyo3wvriERDy-we4yPQ0zeoIM8IXj3mjJT4moaSvWKrqSyfhEawnTw244r63FNQOAUkQcQY0RJa19O3ms22FNVi_UOK3et5duugt330-iVxmKjp1eLEoUghcsDF7ey79VJfIszCwRXjr-CArL8bDdD7dHss46EGEeLBLp7_NipeZ9bXY41Sb4wDoCae1oLxL6IglnBVt3eSqhrkTX45hwbARp6ReDBiVYVoiCk3ewmuE3syuj4peREh9o1ImMYgUBN8ojSNbhDIs7w80eED0rwY0fMFYAWfkjEzncoUqglQZLBylX4muMgASnD5yjhCtv2FWyLXt-rS4T8aL9TmVKgLCrq2QiqcBWfQEaQHHOv8Wteuibc39ytog3B77hnI-zxXD31CQoKHHwSgevx5bmdtLu8AuQsrYMPF7h_RtNqK46TkVNrwFRgOTAEn-CJmcol0VXgAVhfFAOKOnz43vrMwbHlQDuerzkyPLv2KOJUidvrWAXgGAl-dSoD49G3sFBNRcmLjy1C1Xb5EaVreQS5ub3kkwLEpabhom5zKJliqjlq9tSHYZ-j8aPMr-fmUuzmu93tT2MmP6JnMO-XviEeirFYNIyVXXcF44yx0xQy9x4nQGflA8fOznOL2G-duQOdmc3la9REpAJYfiwlyAw4XlQoNStNceHl3uIiWs2iYcHU9ZdoAZG7GLtpkl0abzopqglVcz6vP_H7OS8TV-wOqZwOseKfDhyk4-nV9yT44ikgffvHOm1wpNtuWB41b-XTvqjOwsvOBwMz-wIQ-Dg9TrM6_Ub3ZktW8thXrDhwKgLkI6KmvGOH_Yfmjr-tcgbGXyF2X285pP5bUgQxvB-UtJJFedqI-sxRGDF9P858AzSLOUP0ihpxglX4Po4y6Z4pLM-zcXeIWSzV_AwwJgRMw4NO4mL78aVBmqpkMHm9DSRJiKA4jon3qtnlg3VjbnSao8eaQtpGnYfB-aTvxM-9t6Cgjx40t_jONZZXbqLad6-__XZtm9h1_qEo1rN2vjKi07A0BLHIHeu0kRfWJK3zmvo5EsMzjOSgF67pM_aqITjnPN6jRjWbRNFmOkoaiq5eEdhy6k3V0Xro72kxM_04U7-8LWmlGvopkG2PUE4vypB3RM6SuuUjn5CYmgsr5_lPgJvIO0jF9LKB3DjzD3PVZx3lXq3OzLn7ht7rZ7hSZ3-LtGQAqSaMICJTKEcva9Txpuq07yxdWEp9b48eBwUnaGT2bOGl9MKjluOZiZOIRMn8jzYd6dgSchlhNCT_DnDP_aaOJFsPBbrrm1Hs_2z02-eRQDLFZcb24_ZvOAkHSIHkDVVIsJTAKARIF-ISyzkvD-Qe8G3HBhUOv9ceIL79y--gjszWAoQgN6DIuf_oJ1bI4aypeR15iFlCuNW9TBeKqedUuuZrlpLdsqgpSR4m2VnPXwfEgl_xnbeMlzg4_rmabJmOlpCl2LJ8BgLllrYw951JQApwsNW5jjM4fT6vJg3mzOPUFJKNXDcmCtj1vU-ZJ7JO-KUrj7h778u9IlLPV31O74AzeBybUJM0yTxMyWdZtKov9kS2GmkJ2clzb7K2onVgcny_D9Rp4Ltx9-Ry7wa1oHkSMSTJqiemxvy050ZB1S_RPARN7kVA8r0zsUCFfNsSOofovrv36NR4r0v0etUH5oUgie00CWVHmpe23DmYEhy4q6oKsm2BqrW3pB05uk_F2P2sqCbQ4ET5u50YLTnY5Ih5A4Id_24AhsRDJLhojzgp4SMfB-ynT0a4zSI6F_lU-TjFqrIAmquZtRL7U8Vx7OczKDp--5ATLM02Yw-QvxxZdvWSGrcA5TLNK_xuhloiUvZVwMZ-7c_FFdSJzp8dOYCN91ug9zolA1vbU9G5O69hz6T7AgGx7nCsQrkfyCjf61oddRRa7-TIscJzboGIFDFyinICbGsA5-szp_cVlwvAVu-solZ-ePcBGfsKd4Fan14iB-Xf-2FjavujKKeNuCM6HAN7b4VRnCkwTo4lnL3TW1kFL34d5U6RSsR13riJXDwjGxB1rtaTFbthTMjCgtLNPwPOOx5l_K8nw3YFY4yqM6STeblRue61sMiEyMPGs3fIBcuyYDOuEWv4q9GqSe7P4XFU-ZlOrvVefFAkfO-qxiSD-hEYIV9V1gL3QjLcZctSaAeXbDRwgMZ8QxXFxVBzFAM0LOFG7shHgiGRE6TmeaA-VX1YKCpbON0xEzojKQfi-mcEz6eQGglmcvWugi99AD5opztw7KS5THFAUyBSRx9_EkEFS2WXvILc45mvuMZRPp6K37wNe8AWqQqFZn62vxf8OEbNoX17TOTltedT63jNiuXGaAWSjTXfv_3W_Brte9cBEcrJflRLF1UbitFs2nt07OR8V6D0zdvEtpeLXJ3_BO-hrxN9oK-S-NZywwolEifU2hlWIiX5UJoyM_E_G9OBZo2zpSk1PQ8bqi_SE9Yy1Z7qNJed1Voytbh5tUqVzqu_16bBjEIXO0qD5WFlNi98ArA7S7wD3-LZaKW-STQGlz7ziDdNDzvFPOU0watzzwDxy-IA_mO9TroAdoI1NpxIDZTYM1MpBYr5T56F6rewvgD00ujg1m2SJmraVobqezq0cZ-7DTOlF5eZ5SXazIzZTnEDV6vjAg3XeavRHDjUoie2NSI3qo5NvY3cPa-aRmjUhzDA_csyTx0e70wv3YVqvHq-4DlZpl8czeStm2qcpuB-rcSPcPNc0_yMXxRQ_LNWZzakWeet0xqhUhWD8nbsA7zZF2N6maAyqmtOgVbFfokXpCil_Q16qEj4spfrdDXUHtnWAL9aOc3mKZaDd0wx6yJBSswUxmav3-vq8ynAKeDVdwfy6pB5891N0YIaCtR5w9QFg6DDD8VlpRtXSke8iQou4yhY2OmlOK0eNBncb7bWjuzBo5bgFbRYxzVAYulKJAh4AwdTK-ikUVeWDke_DmM3X70ElqBxA_QCnGR2H-XYDrN1hdgxBcBNScKkYs3F_bmLPSY9bvz-VgxMCdOrVfRvbpKa7r2M39wWBNAY02cJ-FDN8VjdYHcPXg8SAzUSdy87Ot7kRdveaBC5ZL1T5q9TGR9QzpKmoogvL16wNHfvuWYlobkmx45eIcvkM84XfEe1ewL9OH0jFysYipka1W761bXFCAeExtzkNHf8elwtnjoAAqsDACRobCc_UCmy5luEVXh8fkT_HNvhEW2nnxAFvlqfA85MWM9xL47sZznx4kiCfPxhOuDaC9kJgfP5gg7ED_L08UpRoB1zkShXwZTMlwt1hzHlJXY8tiZTOd9YVkRaFQZXpFuJ5kmI3Dkwyjlqwz53sPfd5LlmRAJDi3I-dwcEi-_tPqEFqj9QzmbMr2SKSts4iJ9TBYyIPl4_y3r9HOX8Vo-ROLSYp_WTJl1le8OAIe6Tq6FjZoAwqb3ommBEcsOMi6vhtskCrTqWs66VDqQYCUy1Xqu9HDM38QQVA2xdXV_i3a0rHpjPoz50vesT_wpnHpUTJcWPfaSsoVHs4ahdE0dVngGM8Oqv3RIdu008w2mupM2CdYhlyLT3u0C_TPs9CqzrNmAGrMrCbTwcBLw_-0bUgz6m2YC54UtQlo_aWbX6vs8Dt4_1EprU7Pln4K6vNMUi4IedIPjgc5rJrG8E3O0g5_vjdmH2ioMfFI-Wmi8Cvt_a8EB0pj9U_y5PAwWSVisoBH6DqYo-3ztl3bhZzNBDc56oQRxJhpGegst0XhRuageDAY1cO0uBbFav7ibA5N8r6heB0VMgg5g1QkRuiKrw9Z3krS1gEcvAU9fwIiX1DA-0Pmi_Gt4GGEkcW-jpTh28g15LzIKuzGf35-7daJT87M09wDmvw7hl3hd92WuDgpuSZjVxJPtcWGeSKi1QobyYxCG9eAAkkiZRan_yoP7AB-vgwPEGI_Sxc5xACeCDg3C8Y4xN4HI1K-0zdQeQUOOb2VMDJNcsKiCfnli5D3mFljBOikJIHR1VcId8KvS57lLR7tbLSbXJ4TImmce-42rBsVpw4Dvv9b78M1P4JHE8lU6EbXaxZAI9buWzR4kxqa_auVcFRb63K5Dgwfj6swGoZo6YW_g0XvR2RBtSYWvOEJLJ5jvtFYz4_tfubzTwRDgi0xVLpHIb4vadrwLw8OEskf-vMMwEkMWgm_csCSAZkNkvU_keTs2s08Khzak8cGyHwvqskRVHvk2Jli4qblJVJqkY2_MEEok9Fo2cVGuJAjoaGS1A2t6K2z7iAVkE3U_NAyqE8WYXOFPy905lUeuLBeyWU_s-LIX5NLd1Y95mYAKubqehThcsWjv7Wqk5oz6cczPN1lNpTIlK8i22Mr215wkH21Ig_fk4oHXfJtJpTREoef3XprpKI_FRTGRpgmcv5vDYxTTi6kXt6fw9dnNKwTzfsxXgiCOdSiu2mcxM09GfZMbmfCnuMJnkuCUS6Fw-UjKC5UHW69jOrmEHGHdPftEehRAS3N9nkUbpEb8if0fThMkwiiQvaa__Bz8c61F4u9454KEM70hgQzNn1PF8O1fXMxU_lQHnap9RPeQN94ElTHlvOOGdfLnhGNdE3ekRcKql-vKzmiKXJmCCHbk41skZVD-f7dKrjpOlRIkW84Ssvh6xhw_yxPkOXkEiGJA3Sf0jRNmS9QTuXpD1wUJehlkDNTl2CutfWXuA2e1tRw4xnc-xVv3wYQFhHEqhI1lkJdmFQ9cLdpG94cIkUDlXTTZ9UG-moiV9x2UjyBMtebzXybEmHyDptkvMRfZZzBGTWREwrweU_WM7TlAFT4-XV3XqXiEQ6t4qi9RLI-TGNMOXyw1x7IndwfC2SiZ6lOWgpobShEUekSIPitcO0uyp8Spjr3nwNKySnD0_u4p_fT6BRUnpTQAudzSfqYIvP3nsJ9oVJHbnJ-Ua2TDkL2QpCrXEbx7kWVg8Q7WQeuZ9DAWqkUiNEXV4PdsMXKw8bFLH5BUMhEtu6AYE17iv-kXFnZTyZTaWKBrdSSH2Ht-bEjJo2UZcTHdwTDvLi9ntaa7E67yLfLLfFVdddILiWWOigWvj3MEGW3iqvRfZd3nbUdTJQzLKfkZej6cevbNFBQIALuYclQhxMeEectC1kePkuE-jWljRNSqKZipICRQmBCRYdNcZNO54Q3KUaOz-khLHoViIbMaxRzp49Hwy4LPagXtIqKePB2FFMPMziQaJjKUIPPVDObZMp0L-KNcPZARqIr3kyG82CBY1s-HkLgKPso8AVMAViPiaqC35DiPlV3cuSnYc-ADtLYLejaaIEvYC_I1w6CsqpbwKaUIWTXz4LPDU6Sj1emcHGErdW713dRLiFWHERMXs8-ld95D_ns2EtbKfg1XUa2478J02fB85Y3B4DlsTYCOptAtXFIh0Q9n-Z_ZoFteoe3nGMspzBLI9HHUlebQ71cVD41ldEBdlzSsXSgtyDdXwYHsAubZyL-5cDw20mg66iqjefpsGTmP8gpCVL0s2HKy9uwmnd_pA3q63KxSHDtPhYcSEVh8Q_D7ermX-xS4AUsdwGI1t1_IK6JwsHG5ne1Qd3EXRTtaSe1k9AwMzG4jkuoRuDkDh9oT2_uzSJSyZNOdMogzm4Rf7cB1yP9Q1WOutjTbAIgyZw73tuc_leN1v95sOjkf0JIqJAXZ5hOESrd6aYLX54GzKtPOHwuec-AUIJxlAQKHz3PEYjHnCMXmSyLJ6ab8pyA0k_KTa6d6hPCf1h4TaKN5XM28xFsc5iTFhyuwYRoRs8mR4yVtejed-pm8ndfBcbU4vIvM4SEw0qezVPJMAn-dO-USamvBSe3wAvfa9FKFEbm9s8Wlv04dwcggJ4vCMJd6yfJzIc_2E_WJXDWKsqGjkfL7-3r-SD1rluQzA6Eh3qOtfRZ0Eg7VaLYCdKfoTBCdOdG7i9HpL6XwBvKUNJmTaJM5GiBDMGG8WCLvQ_g9ZqEMby1Hncp4vh7HtiRhzS7gQ ``` - \ No newline at end of file + From ca5fa9367f4cfbd7c2fb982e04b82bba4ae034ce Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:08:49 +0300 Subject: [PATCH 171/389] rip getTop1000 --- docs/endpoints/misc/getTop1000.md | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docs/endpoints/misc/getTop1000.md b/docs/endpoints/misc/getTop1000.md index 0b0010410..e9b603219 100644 --- a/docs/endpoints/misc/getTop1000.md +++ b/docs/endpoints/misc/getTop1000.md @@ -1,5 +1,46 @@ # getTop1000.php +**Note: as of July 12th 2024, this endpoint does not work anymore. It now requires an empty user-agent and the generic secret just like 99% of other endpoints. But it only returns some empty HTML, which can be found here:** + +``` + + + + + +Top 1000 + + + + + +``` + +The old getTop1000 behavior can be found below. + + [getTop1000.php](http://boomlings.com/database/getTop1000.php) is one of the very few endpoints found on the servers that can be accessed via a [GET request](https://www.w3schools.com/tags/ref_httpmethods.asp). The purpose of this endpoint is to gather the top 1000 star grinders to be used on the star leaderboards. ## Parameters From 47c71af3bd4a8542b4431f0b6dc1d0f21d685f5b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:09:00 +0300 Subject: [PATCH 172/389] html --- docs/endpoints/misc/getTop1000.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/misc/getTop1000.md b/docs/endpoints/misc/getTop1000.md index e9b603219..ee9584037 100644 --- a/docs/endpoints/misc/getTop1000.md +++ b/docs/endpoints/misc/getTop1000.md @@ -2,7 +2,7 @@ **Note: as of July 12th 2024, this endpoint does not work anymore. It now requires an empty user-agent and the generic secret just like 99% of other endpoints. But it only returns some empty HTML, which can be found here:** -``` +```html From 6c91bc6282d4e11ce99212a76a9819e9054b9b0e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:11:40 +0300 Subject: [PATCH 173/389] 22 42 --- docs/endpoints/levels/updateGJDesc20.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/levels/updateGJDesc20.md b/docs/endpoints/levels/updateGJDesc20.md index e8cfd1974..bbd3eeabc 100644 --- a/docs/endpoints/levels/updateGJDesc20.md +++ b/docs/endpoints/levels/updateGJDesc20.md @@ -18,9 +18,9 @@ Updates the description of a level ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 From acbda6bd992e8b4d00f0cc8c53264badfca20c74 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:11:52 +0300 Subject: [PATCH 174/389] FUCK i forgot gjp2 --- docs/endpoints/levels/updateGJDesc20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/updateGJDesc20.md b/docs/endpoints/levels/updateGJDesc20.md index bbd3eeabc..c3ed04210 100644 --- a/docs/endpoints/levels/updateGJDesc20.md +++ b/docs/endpoints/levels/updateGJDesc20.md @@ -8,7 +8,7 @@ Updates the description of a level **accountID** - The account ID of the level's author -**gjp** - The [GJP](/topics/encryption/gjp.md) of the level's author +**gjp2** - The [GJP2](/topics/encryption/gjp.md) of the level's author **levelID** - The ID of the level From a19fcf60f68a9a028369d9b22c5f102bd4bdb2b2 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:15:00 +0300 Subject: [PATCH 175/389] Update rateGJStars211.md --- docs/endpoints/levels/rateGJStars211.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/levels/rateGJStars211.md b/docs/endpoints/levels/rateGJStars211.md index c18992641..7d69c6b76 100644 --- a/docs/endpoints/levels/rateGJStars211.md +++ b/docs/endpoints/levels/rateGJStars211.md @@ -10,9 +10,9 @@ Sends a star suggestion for a level ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -42,4 +42,4 @@ print(req.text) 1 ``` - \ No newline at end of file + From 7065c985386d026c0d9e4651045df3bece19337c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:15:15 +0300 Subject: [PATCH 176/389] Update rateGJDemon21.md --- docs/endpoints/levels/rateGJDemon21.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/levels/rateGJDemon21.md b/docs/endpoints/levels/rateGJDemon21.md index c251ddca2..391e27791 100644 --- a/docs/endpoints/levels/rateGJDemon21.md +++ b/docs/endpoints/levels/rateGJDemon21.md @@ -6,9 +6,9 @@ Rates the demon difficulty of a demon level - only works for Geometry Dash moder ### Required Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **secret** - Wmfp3897gc3 @@ -88,4 +88,4 @@ print(req.text) 4284013 ``` - \ No newline at end of file + From 9df97fc2e1f899b5f9741c94ab8bc2c5a8213d88 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:15:27 +0300 Subject: [PATCH 177/389] Update getGJMapPacks21.md --- docs/endpoints/levels/getGJMapPacks21.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/levels/getGJMapPacks21.md b/docs/endpoints/levels/getGJMapPacks21.md index 8f9de4fea..e0b75d4bd 100644 --- a/docs/endpoints/levels/getGJMapPacks21.md +++ b/docs/endpoints/levels/getGJMapPacks21.md @@ -10,9 +10,9 @@ Gets the map packs. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -47,4 +47,4 @@ print(req.text) 1:59:2:Cyclone Pack:3:1566116,946020,1100161:4:8:5:1:6:5:7:255,75,255:8:255,75,255|1:60:2:Colossus Pack:3:1350389,1215630,1724579:4:8:5:1:6:5:7:100,255,175:8:100,255,175|1:61:2:Diamond Pack:3:1267316,1670283,1205277:4:8:5:1:6:5:7:255,255,255:8:255,255,255|1:11:2:Chaos Pack:3:329929,188909,340602:4:9:5:1:6:5:7:255,125,0:8:255,125,0|1:44:2:Magma Pack:3:882417,884256,551979:4:9:5:1:6:5:7:255,100,50:8:255,100,50|1:62:2:Paradox Pack:3:1447246,1132530,1683722:4:9:5:1:6:5:7:50,255,75:8:50,255,75|1:63:2:Funky Pack:3:1728550,1799065,1311773:4:9:5:1:6:5:7:50,175,255:8:50,175,255|1:19:2:Remix Pack 4:3:341613,358750,369294:4:10:5:2:6:6:7:255,255,0:8:255,255,0|1:20:2:Demon Pack 1:3:70059,10109,135561:4:10:5:2:6:6:7:255,0,125:8:255,0,125|1:21:2:Demon Pack 2:3:57730,308891,102765:4:10:5:2:6:6:7:255,0,0:8:255,0,0#65:40:10#79c437d2cf75d2edf36a5094e0cc650c54440ba3 ``` - \ No newline at end of file + From ad54f6a0512f93973bf02d77bcbffaf4081691c1 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:15:50 +0300 Subject: [PATCH 178/389] Update getGJDailyLevel.md --- docs/endpoints/levels/getGJDailyLevel.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/levels/getGJDailyLevel.md b/docs/endpoints/levels/getGJDailyLevel.md index 4c4639549..fca8c8bcb 100644 --- a/docs/endpoints/levels/getGJDailyLevel.md +++ b/docs/endpoints/levels/getGJDailyLevel.md @@ -10,9 +10,9 @@ Gets which daily level we're on and gets how much time is left. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -49,4 +49,4 @@ print(req.text) 100146|121576 ``` - \ No newline at end of file + From e8cbf414dbfa69187886b45d310048be47606de8 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:17:04 +0300 Subject: [PATCH 179/389] Update getGJGauntlets21.md --- docs/endpoints/levels/getGJGauntlets21.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/levels/getGJGauntlets21.md b/docs/endpoints/levels/getGJGauntlets21.md index 100cac5f7..718421d53 100644 --- a/docs/endpoints/levels/getGJGauntlets21.md +++ b/docs/endpoints/levels/getGJGauntlets21.md @@ -10,9 +10,9 @@ Gets the gauntlet levels. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -44,4 +44,4 @@ print(req.text) 1:1:3:27732941,28200611,27483789,28225110,27448202|1:2:3:20635816,28151870,25969464,24302376,27399722|1:3:3:28179535,29094196,29071134,26317634,12107595|1:4:3:26949498,26095850,27973097,27694897,26070995|1:5:3:18533341,28794068,28127292,4243988,28677296|1:6:3:28255647,27929950,16437345,28270854,29394058|1:7:3:25886024,4259126,26897899,7485599,19862531|1:8:3:18025697,23189196,27786218,27728679,25706351#74aeff3cb009cbde1d7235e1c7e74b47d793eb82 ``` - \ No newline at end of file + From 7029f8ddaefabd7fdc16b9fdc3f160d2efc86081 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:17:27 +0300 Subject: [PATCH 180/389] Update getGJLevelScores211.md --- docs/endpoints/levels/getGJLevelScores211.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/levels/getGJLevelScores211.md b/docs/endpoints/levels/getGJLevelScores211.md index db130aafd..cb8d70318 100644 --- a/docs/endpoints/levels/getGJLevelScores211.md +++ b/docs/endpoints/levels/getGJLevelScores211.md @@ -16,9 +16,9 @@ Fetches the leaderboard for a level and submits your level stats to the server ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 From 0428f819adf07bce6d4b6cb8c5c108a105d39a16 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:19:14 +0300 Subject: [PATCH 181/389] Update getGJTopArtists.md --- docs/endpoints/songs/getGJTopArtists.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/songs/getGJTopArtists.md b/docs/endpoints/songs/getGJTopArtists.md index 87d5fa478..82be84556 100644 --- a/docs/endpoints/songs/getGJTopArtists.md +++ b/docs/endpoints/songs/getGJTopArtists.md @@ -10,9 +10,9 @@ Gets RobTop's handpicked top artists. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -47,4 +47,4 @@ print(req.text) 4:Dimrain47|4:MadhouseDUDE|4:paperskies|4:CloudierMusic|4:Stratales|4:Lockyn|4:DanJohansen|4:BurgeraX|4:ParagonX9|4:Kolkian|4:LemKuuja|4:meganeko:7:UCP3M2myndqXuAEKKnqm_7SQ|4:teminiteofficial:7:UCc_bv_5nmxy2xnPNg9kP3Rg|4:Sharks:7:UCQJuQY3hF4YCHlAR42A5trg|4:F-777|4:DrayxMusic:7:UCSn0s6RSeePeJOiUi6Vdj6g|4:ForeverBound|4:DJ-Zyzyx|4:canonblade|4:Xtrullor:7:UCejLri1RVC7kj8ZVNX2a53g#73:20:20 ``` - \ No newline at end of file + From 1dd0b6f2296db43ffb38ce1c0f072a6a113955cf Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:21:23 +0300 Subject: [PATCH 182/389] Update testSong.md --- docs/endpoints/songs/testSong.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/endpoints/songs/testSong.md b/docs/endpoints/songs/testSong.md index eca9e63fc..16f5e8756 100644 --- a/docs/endpoints/songs/testSong.md +++ b/docs/endpoints/songs/testSong.md @@ -1,5 +1,7 @@ # testSong.php +> This endpoint no longer exists. This page is kept for historical reasons. + Gets whitelist/artist info about a song. **THIS IS A GET REQUEST.** ## Parameters From 27d4bfb7ae7b7603e47088899530c58bd3101b31 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:24:41 +0300 Subject: [PATCH 183/389] Update getGJScores20.md --- docs/endpoints/users/getGJScores20.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index 0f4171cb7..2975f4327 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -10,15 +10,15 @@ Gets the leaderboard scores. ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 **accountID** - The account ID of the user viewing the leaderboards -**gjp** - The user's [GJP](/topics/encryption/gjp.md) +**gjp2** - The user's [GJP2](/topics/encryption/gjp.md) **type** - Can be `top`, `relative`, `friends`, or `creators`. If left out it defaults to `top` @@ -52,4 +52,4 @@ print(req.text) 1:xMiguel007:2:2866103:13:149:17:7219:6:1:9:37:10:35:11:3:14:0:15:2:16:70846:3:65710:8:0:46:12879:4:1073|1:shaggy23:2:1995959:13:149:17:4321:6:2:9:51:10:39:11:29:14:0:15:2:16:2888:3:65595:8:21:46:11847:4:1115|1:Michigun:2:703929:13:149:17:12312:6:3:9:22:10:15:11:12:14:0:15:2:16:34499:3:61161:8:16:46:14600:4:997|1:Cool Dash:2:1148292:13:149:17:7026:6:4:9:37:10:20:11:17:14:0:15:2:16:4825:3:52931:8:0:46:14630:4:641|1:Kaernk:2:1282100:13:149:17:11908:6:5:9:51:10:18:11:12:14:0:15:2:16:118843:3:51821:8:0:46:17073:4:533|1:DeathHogz:2:1396933:13:149:17:5250:6:6:9:57:10:37:11:12:14:0:15:2:16:104119:3:51791:8:2:46:11948:4:435|1:Franchet:2:9576358:13:149:17:9840:6:7:9:30:10:15:11:12:14:0:15:2:16:1999478:3:51504:8:0:46:18616:4:670|1:Leksitoo:2:933105:13:149:17:4125:6:8:9:29:10:5:11:12:14:0:15:2:16:205:3:50530:8:14:46:13852:4:666|1:Superchat:2:2945295:13:149:17:5150:6:9:9:98:10:12:11:17:14:0:15:0:16:1098021:3:45706:8:2:46:14101:4:1201|1:Darky84:2:8513170:13:149:17:5864:6:10:9:37:10:12:11:25:14:0:15:2:16:1244088:3:44313:8:0:46:7444:4:1031|1:IvanNyan:2:14999317:13:149:17:5693:6:11:9:35:10:11:11:23:14:1:15:2:16:5148877:3:43785:8:0:46:6:4:563|1:GK NK 98:2:4803050:13:147:17:6491:6:12:9:2:10:12:11:23:14:6:15:2:16:890741:3:43163:8:2:46:14155:4:586|1:BonnieABoss:2:18158058:13:149:17:5572:6:13:9:105:10:15:11:3:14:0:15:2:16:5810059:3:43099:8:0:46:4743:4:778|1:FixTop100:2:18119007:13:149:17:801:6:14:9:1:10:0:11:3:14:0:15:0:16:5316700:3:43099:8:0:46:3559:4:323|1:TheRealAir:2:9035779:13:149:17:1270:6:15:9:35:10:12:11:25:14:0:15:2:16:2382846:3:42096:8:0:46:12808:4:665|1:XShadowWizardX:2:10670782:13:149:17:6097:6:16:9:85:10:12:11:7:14:0:15:2:16:1919857:3:41209:8:6:46:14083:4:540|1:CleanTop100:2:6552455:13:149:17:7111:6:17:9:30:10:7:11:12:14:0:15:2:16:2835706:3:40810:8:0:46:13243:4:871|1:xSuwako:2:14287615:13:149:17:2778:6:18:9:96:10:37:11:12:14:0:15:2:16:3984642:3:40695:8:0:46:11827:4:878|1:Civitrex2:2:14674984:13:149:17:7418:6:19:9:37:10:12:11:13:14:0:15:2:16:4156730:3:40576:8:0:46:13981:4:922|1:AdrianDlaCruz:2:16219796:13:148:17:2689:6:20:9:103:10:12:11:40:14:0:15:2:16:4771465:3:40286:8:0:46:4489:4:982| ``` - \ No newline at end of file + From 692e4d3d5a629913508f355019c1dd9e531c7925 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:32:55 +0300 Subject: [PATCH 184/389] Update getGJScores20.md --- docs/endpoints/users/getGJScores20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index 2975f4327..a3db46873 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -22,7 +22,7 @@ Gets the leaderboard scores. **type** - Can be `top`, `relative`, `friends`, or `creators`. If left out it defaults to `top` -**count** - Returns the amount of players specified +**count** - Returns the amount of players specified. Limited to 100 ## Response From cb34a6d1ab21949736bc34ba99582def799bb990 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:42:45 +0300 Subject: [PATCH 185/389] Update updateGJUserScore22.md --- docs/endpoints/users/updateGJUserScore22.md | 40 +++++++++++++++------ 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/docs/endpoints/users/updateGJUserScore22.md b/docs/endpoints/users/updateGJUserScore22.md index 4956f041c..c8c0a3265 100644 --- a/docs/endpoints/users/updateGJUserScore22.md +++ b/docs/endpoints/users/updateGJUserScore22.md @@ -12,6 +12,8 @@ Updates a user's data **stars** - The amount of stars the user has +**moons** - The amount of moons the user has + **demons** - The amount of demons the user has **diamonds** - The amount of diamonds the user has @@ -26,31 +28,47 @@ Updates a user's data **accIcon** - The ID of the user's selected icon. -**accShip** - The ID of the user's selected icon. +**accShip** - The ID of the user's selected ship. + +**accBall** - The ID of the user's selected ball. + +**accBird** - The ID of the user's selected UFO. -**accBall** - The ID of the user's selected icon. +**accDart** - The ID of the user's selected wave. -**accBird** - The ID of the user's selected icon. +**accRobot** - The ID of the user's selected robot. -**accDart** - The ID of the user's selected icon. +**accGlow** - Whether the user has glow enabled. -**accRobot** - The ID of the user's selected icon. +**accSpider** - The ID of the user's selected spider. -**accGlow** - The ID of the user's selected icon. +**accExplosion** - The ID of the user's selected death effect. -**accSpider** - The ID of the user's selected icon. +**accSwing** - The ID of the user's selected swing. -**accExplosion** - The ID of the user's selected icon. +**accJetpack** - The ID of the user's selected jetpack. **seed2** - [See here](/topics/encryption/chk?id=user-profile) +**dinfo** - List of all completed demons (level IDs separated by `,`) + +**dinfow** - Same as dinfo but for weeklies + +**dinfog** - Same as dinfo but for gauntlets + +**sinfo** - List of all completed non-demon levels by star value, from 1 to 9, separated by `,` + +**sinfod** - List of completed dailies + +**sinfog** - List of completed gauntlet non-demon levels + **secret** - Wmfd2893gb7 ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -114,4 +132,4 @@ print(req.text) 17787971 ``` - \ No newline at end of file + From f7998b909af88dfe709cc832a1764acf2aed38c7 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:42:55 +0300 Subject: [PATCH 186/389] Update updateGJUserScore22.md --- docs/endpoints/users/updateGJUserScore22.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/updateGJUserScore22.md b/docs/endpoints/users/updateGJUserScore22.md index c8c0a3265..5f7fa08a1 100644 --- a/docs/endpoints/users/updateGJUserScore22.md +++ b/docs/endpoints/users/updateGJUserScore22.md @@ -8,7 +8,7 @@ Updates a user's data **accountID** - Account ID of the user updating their profile -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user updating their profile +**gjp2** - The [GJP2](/topics/encryption/gjp.md) of the user updating their profile **stars** - The amount of stars the user has From 1bb1836553bcf5b9ffe15bd14a74a34a9048eb42 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 17:19:06 +0300 Subject: [PATCH 187/389] k106 --- docs/resources/client/level.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 8fcc39276..68898c782 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -127,4 +127,5 @@ The build tab page is 5, and the button settings are 6x2 (default), meaning the | k93 | **Bool** | unlimited Objects? | | k94 | **Bool** | Platformer? | | k101 | **string** | seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | -| k111 | **integer** | seems to be 4 or 5 digits and seems to be platformer-exclusive | +| k106 | **integer** | corresponds to key 54 on the servers | +| k111 | **integer** | seems to be 4 or 5a digits and seems to be platformer-exclusive | From aeecb62f4c516cef25d34a96c7e2848a3895b6f8 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 17:20:35 +0300 Subject: [PATCH 188/389] key 54 --- docs/resources/server/level.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/server/level.md b/docs/resources/server/level.md index 2022b2fb2..290cdda09 100644 --- a/docs/resources/server/level.md +++ b/docs/resources/server/level.md @@ -67,6 +67,7 @@ Keys indicated with an asterisk (\*) are only returned from the downloadGJLevel2 | 48 | settingsString [Unused] | **String** | It was found in early 2.1 coming from the servers and was removed shortly after. The `December 2019 2.2 Leaks` however have information regarding it showing that it is called `settingsString` but, there is no information regarding its usage | | 52* | songIDs | **Comma-Separated List** | The list of all song IDs in the level, separated by commas | 53* | sfxIDs | **Comma-Separated List** | The list of all SFX IDs in the level, separated by commas +| 54 | unknown | **Integer** | Unknown value, perhaps robtop-only? (corresponds to k106 in the save file) | | 57* | verificationTime | **Integer** | How long the level took to verify (in frames, assume 240 FPS) ### Trivia From 41ca483d0008dbc4e9f25b6bc7e8ee95d3778c33 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 18:19:57 +0300 Subject: [PATCH 189/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index da971b72e..09aea1f3b 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -44,7 +44,7 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Small chest's rewards in a comma separated list - Orbs - Diamonds - - Shards (0 is Fire, 1 is Ice, 2 is Poison, 3 is Shadow, 4 is Lava, 10 is Earth) (TODO add more shards) + - Shards (0 is Fire, 1 is Ice, 2 is Poison, 3 is Shadow, 4 is Lava, 10 is Earth, 11 is Blood) (TODO add more shards) - Key (If it's not 0, give a key) - Large chest time remaining - Large chest's rewards in a comma separated list From 737571928facf7d8018d42c5c118fe95fb84c3ad Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 18:54:04 +0300 Subject: [PATCH 190/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 76cc70500..fedc20bae 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -234,6 +234,8 @@ GS_21 Contains the reward data for the gauntlets you have completed | 0023 | Help Button Chest | | 0024 | Reddit Chest | +All chests between 0011 and 0021 are Ad Chests. + ## GS_22 From 1c09ed43ae10204a2c09873377e2b2a6e6362d16 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 18:54:24 +0300 Subject: [PATCH 191/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index fedc20bae..1991977c0 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -234,7 +234,7 @@ GS_21 Contains the reward data for the gauntlets you have completed | 0023 | Help Button Chest | | 0024 | Reddit Chest | -All chests between 0011 and 0021 are Ad Chests. +All chests between 0012 and 0021 are Ad Chests from the free versions of the game. ## GS_22 From 653cca17485b55c132df05bd5be76d1b2e731c38 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 18:56:31 +0300 Subject: [PATCH 192/389] Update kCEK.md --- docs/resources/client/gamesave/kCEK.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/resources/client/gamesave/kCEK.md b/docs/resources/client/gamesave/kCEK.md index 5d25573d2..0edb179e5 100644 --- a/docs/resources/client/gamesave/kCEK.md +++ b/docs/resources/client/gamesave/kCEK.md @@ -37,6 +37,11 @@ | 7 | Orbs | | 8 | Diamonds | | 9 | Custom Object (shares the same ID for Demon guardian key, icons and colours) | +| 10| Earth Shard | +| 11| Blood Shard | +| 12| Metal Shard | +| 13| Light Shard | +| 14| Soul Shard | ### GJRewardItem GS Keys From 05b53a0e323720a3c0ef0c7dbfcaaea05c9614df Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 18:57:35 +0300 Subject: [PATCH 193/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index 09aea1f3b..523e0508e 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -44,7 +44,7 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Small chest's rewards in a comma separated list - Orbs - Diamonds - - Shards (0 is Fire, 1 is Ice, 2 is Poison, 3 is Shadow, 4 is Lava, 10 is Earth, 11 is Blood) (TODO add more shards) + - Shards (0 is Fire, 1 is Ice, 2 is Poison, 3 is Shadow, 4 is Lava, 10 is Earth, 11 is Blood, 12 is Metal, 13 is Light and 14 is Soul) - Key (If it's not 0, give a key) - Large chest time remaining - Large chest's rewards in a comma separated list From 78ec22b0d55aa4b5fb32be40c819f9db10c9bc7a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 18:59:53 +0300 Subject: [PATCH 194/389] i pulled a rateGJItem here --- docs/endpoints/lists/deleteGJLevelList.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/lists/deleteGJLevelList.md b/docs/endpoints/lists/deleteGJLevelList.md index 6c9a3b4a1..585504359 100644 --- a/docs/endpoints/lists/deleteGJLevelList.md +++ b/docs/endpoints/lists/deleteGJLevelList.md @@ -1,6 +1,6 @@ -# deleteGJLevelUser20.php +# deleteGJLevelList.php -Deletes a level from the server. +Deletes a list from the server. ## Parameters @@ -42,11 +42,11 @@ import requests data = { "accountID": 173831, # DevExit's account ID "gjp2": "********", # This would be DevExit's password encoded with GJP2 encryption - "levelID": 414808, + "listID": 414808, "secret": "Wmfv2898gc9" } -req = requests.post("http://boomlings.com/database/deleteGJLevelUser20.php", data=data) +req = requests.post("http://boomlings.com/database/deleteGJLevelList.php", data=data) print(req.text) ``` From b3d24f4081cc9df536f8ddabed7647e82de56888 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 22:38:40 +0300 Subject: [PATCH 195/389] forgor miffikk --- docs/resources/client/level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 68898c782..1f352ae56 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -71,7 +71,7 @@ A level is a playable object in Geometry Dash, namely coming with data that expl | k72 | hasLowDetailMode | **Bool** | If a level has LDM | | k73 | toggleLDM | **Bool** | If a LDM is Enabled | | k74 | timelyID | **integer** | the timelyID for a level | -| k75 | isEpic | **Bool** | if a level has been awarded an epic rating | +| k75 | epicRating | **integer** | The level's epic rating. 0 for None, 1 for Epic, 2 for Legendary, 3 for Mythic | | k76 | demon type | **integer** | Demon Type Enum | | k77 | isGauntlet | **Bool** | is the level in a gauntlet | | k78 | isAltGame | **Bool** | Levels that were completed on the free games | From 98fff75ad46ffab57dd3f16d80448a2bd0e1896f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 22:52:27 +0300 Subject: [PATCH 196/389] Update updateGJUserScore22.md --- docs/endpoints/users/updateGJUserScore22.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/users/updateGJUserScore22.md b/docs/endpoints/users/updateGJUserScore22.md index 5f7fa08a1..e620623cc 100644 --- a/docs/endpoints/users/updateGJUserScore22.md +++ b/docs/endpoints/users/updateGJUserScore22.md @@ -52,15 +52,15 @@ Updates a user's data **dinfo** - List of all completed demons (level IDs separated by `,`) -**dinfow** - Same as dinfo but for weeklies +**dinfow** - Amount of completed weeklies -**dinfog** - Same as dinfo but for gauntlets +**dinfog** - Amount of completed gauntlet demons **sinfo** - List of all completed non-demon levels by star value, from 1 to 9, separated by `,` -**sinfod** - List of completed dailies +**sinfod** - Amount of completed dailies -**sinfog** - List of completed gauntlet non-demon levels +**sinfog** - Amount of completed gauntlet non-demon levels **secret** - Wmfd2893gb7 From 7a575968530095c55372a44f0040ca13a37e9ff5 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Fri, 12 Jul 2024 22:55:51 +0300 Subject: [PATCH 197/389] Update updateGJUserScore22.md --- docs/endpoints/users/updateGJUserScore22.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/updateGJUserScore22.md b/docs/endpoints/users/updateGJUserScore22.md index e620623cc..44508c74c 100644 --- a/docs/endpoints/users/updateGJUserScore22.md +++ b/docs/endpoints/users/updateGJUserScore22.md @@ -56,7 +56,7 @@ Updates a user's data **dinfog** - Amount of completed gauntlet demons -**sinfo** - List of all completed non-demon levels by star value, from 1 to 9, separated by `,` +**sinfo** - `{autoClassic},{easyClassic},{normalClassic},{hardClassic},{harderClassic},{insaneClassic},{autoPlatformer},{easyPlatformer},{normalPlatformer},{hardPlatformer},{harderPlatformer},{insanePlatformer}` **sinfod** - Amount of completed dailies From 3de10929cafcc1cc3de425cf5f4ae7d5d71e7aad Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 02:50:57 +0300 Subject: [PATCH 198/389] YESSSS I FIGURED THE USER PROFILE CHK OUT --- docs/topics/encryption/chk.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/topics/encryption/chk.md b/docs/topics/encryption/chk.md index dcc7510fd..134f4c72d 100644 --- a/docs/topics/encryption/chk.md +++ b/docs/topics/encryption/chk.md @@ -140,6 +140,12 @@ Random number consisting of *5* digits. - Glow (0 = disabled, 1 = enabled) - SpiderID - ExplosionID +- Length of dinfo +- dinfow +- dinfog +- sinfo +- sinfod +- sinfog ## Level Leaderboard From 46f68963eca017c9c1695bb6d17039a8e1821e6e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 03:01:57 +0300 Subject: [PATCH 199/389] color3 --- docs/endpoints/users/updateGJUserScore22.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/endpoints/users/updateGJUserScore22.md b/docs/endpoints/users/updateGJUserScore22.md index 44508c74c..fc8184513 100644 --- a/docs/endpoints/users/updateGJUserScore22.md +++ b/docs/endpoints/users/updateGJUserScore22.md @@ -78,6 +78,8 @@ Updates a user's data **color2** - Color 2 of the player. Defaults to the default secondary color when left out +**color3** - Glow color of the player. Defaults to secondary color when left out + **special** - Glow (2 if enabled) **seed** - A random set of 10 numbers and letters in A-Za-z0-9 From e529d96bcc9acaf3feef50d2f3d93d1e6e3a2694 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 03:18:00 +0300 Subject: [PATCH 200/389] update python example --- docs/endpoints/users/updateGJUserScore22.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/users/updateGJUserScore22.md b/docs/endpoints/users/updateGJUserScore22.md index fc8184513..3a5cfe7be 100644 --- a/docs/endpoints/users/updateGJUserScore22.md +++ b/docs/endpoints/users/updateGJUserScore22.md @@ -102,11 +102,13 @@ data = { "gjp": "********", # This would be PasswordFinders' password encoded with GJP encryption "userName": "PasswordFinders", "stars": 6969, + "moons": 696, "demons": 69, "diamonds": 5000, "icon": 0, "color1": 21, "color2": 42, + "color3": -1, "iconType": 0, "coins": 150, "userCoins": 400, @@ -120,10 +122,18 @@ data = { "accGlow": 0, "accSpider": 0, "accExplosion": 1, + "accSwing": 0, + "accJetpack": 0, + "dinfo": "13519,10109", + "dinfow": 0, + "dinfog": 0, + "sinfo": "6,9,6,9,6,9,6,9,6,9,6,9", + "sinfod": 0, + "sinfog": 0, "secret": "Wmfd2893gb7", "seed": ''.join(random.sample("1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM", 10)) } -data['seed2'] = generate_chk([data['accountID'], data['userCoins'], data['demons'], data['stars'], data['coins'], data['iconType'], data['icon'], data['diamonds'], data['accIcon'], data['accShip'], data['accBall'], data['accBird'], data['accDart'], data['accRobot'], data['accGlow'], data['accSpider'], data['accExplosion']], "85271", "xI35fsAapCRg") +data['seed2'] = generate_chk([data['accountID'], data['userCoins'], data['demons'], data['stars'], data['coins'], data['iconType'], data['icon'], data['diamonds'], data['accIcon'], data['accShip'], data['accBall'], data['accBird'], data['accDart'], data['accRobot'], data['accGlow'], data['accSpider'], data['accExplosion'], len(data['dinfo']), data['dinfow'], data['dinfog'], data['sinfo'], data['sinfod'], data['sinfog']], "85271", "xI35fsAapCRg") r = requests.post('http://boomlings.com/database/updateGJUserScore22.php', data=data) print(req.text) From eb70e7c5f874802831ca983beabb501e00206beb Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 12:36:29 +0300 Subject: [PATCH 201/389] i figured out what GS_29 is --- docs/resources/client/gamesave/GS_Value.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 1991977c0..105f79fe4 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -300,4 +300,8 @@ GS_28 contains your enabled items (animations). All of them are strings (althoug ## GS_29 -This GS is unknown. It's also the only non-dict GS, instead being a boolean. +GS_29 indicates whether your currently selected path is completed or not. Contary to most GS's, it's a boolean value and not a dictionary. + +| Structure | +|:----------| +| `GS_29` | From 99964ff73b4bb2ce42de09de74ee7f7bb2266fd6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 12:37:00 +0300 Subject: [PATCH 202/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 105f79fe4..f5853248d 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -273,7 +273,7 @@ GS_25 Contains the reward data for every weekly demon you have completed ## GS_26 -GS_26 is your currently active path. The value is the same as the path key in GS_value. +GS_26 is your currently active path. The value is the same as the path key in GS_value. Contary to most GS's, it's an integer value and not a dictionary. | Structure | |:----------| From f335025b8d641ba4ffbee87d0cde7678545ca3c4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 12:50:45 +0300 Subject: [PATCH 203/389] Update kCEK.md --- docs/resources/client/gamesave/kCEK.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/kCEK.md b/docs/resources/client/gamesave/kCEK.md index 0edb179e5..49501b5a3 100644 --- a/docs/resources/client/gamesave/kCEK.md +++ b/docs/resources/client/gamesave/kCEK.md @@ -9,6 +9,7 @@ | 9 | [GJRewardObject](resources/client/gamesave/kCEK.md) | contains data for Rewards | | 10 | [GJSmartTemplate](resources/client/gamesave/template.md) | Contains data about smart template | | 11 | [GJSmartTemplate](resources/client/gamesave/template.md) | Contains data for presets in smart template | +| 12 | [GJLevelList](/resources/client/gamesave/list.md) | Contains keys for level lists | ## kCEK 8 and 9 Structure From 201c2c0f5a953a04e8b42b5f8215537cf2509859 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 13:45:43 +0300 Subject: [PATCH 204/389] Create list.md --- docs/resources/client/gamesave/list.md | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 docs/resources/client/gamesave/list.md diff --git a/docs/resources/client/gamesave/list.md b/docs/resources/client/gamesave/list.md new file mode 100644 index 000000000..17fadc25b --- /dev/null +++ b/docs/resources/client/gamesave/list.md @@ -0,0 +1,44 @@ +# Client List Resource + +## List + +A level list is a list of levels - playable objects in Geometry Dash, namely coming with data that explains on what this list is and which levels it contains. It is stored in [XML](https://en.wikipedia.org/wiki/XML) format, and each level entry is a dictionary, containing key/value pairs denoting the list's properties. + +### Level Data + +**Level Structure** + +| Key | Name/Value | Type | Description | +| :--- | :----------------------------- | :--------------------------------------------------------------- | :------------------------------------------------------------------------------- | +| k1 | Level ID | **integer** | the id of the list | +| k2 | Level Name | **string** | the name of the list | +| k3 | Description | **string** | the list description, encoded in [base64](https://en.wikipedia.org/wiki/Base64) | +| k5 | Creator | **[user](./user.md)Name** | the name of the level creator | +| k7 | list difficulty | **integer** | the difficulty the list has | +| k11 | Downloads | **integer** | the amount of times the list's been downloaded | +| k15 | Uploaded | **bool** | whether the list is uploaded to the server or not | +| k16 | List Version | **integer** | the version of the list | +| k21 | List Type | **Integer** | The List Type (2 = Local, 3 = Saved, 4 = Online) | +| k22 | Like Rating | **integer** | the level's like rating (`likes - dislikes`) | +| k25 | isDemon | **Bool** | if the level is demon or not | +| k26 | Stars | **integer** | the stars the level is worth | +| k27 | Featured | **Bool** | Whether the list is featured or not | +| k42 | Original | **integer** | The ID the of the original list (if the list was copied) | +| k46 | List Revision | **integer** | the revision of the list | +| k60 | AccountID | **integer** | the Creators AccountID | +| k79 | Unlisted | **bool** | Whether the list can only be found by searching the ID | +| k82 | Favourited | **Bool** | if you put the list in your favourites | +| k83 | levelOrder | **integer** | ordering for lists | +| k96 | Level IDs | **string** | Comma-separated list of all IDs in the list in order | +| k97 | Levels | **Dictionary** | Dictionary of all the [levels](/resources/client/level.md) in the list | +| k98 | Upload Date | **Integer** | UNIX timestamp of the level's upload date (in seconds) | +| k99 | Update Date | **Integer** | UNIX timestamp of the level's update date (in seconds) | +| k113 | Diamond Reward | **Integer** | Amount of diamonds awarded upon beating the required number of levels | +| k114 | Required Levels | **Integer** | How many levels have to be beaten to claim the award | + +**Current Unknown Values** + +| Key | Type | Info | +| :-- | :---------- | :------------------------------------------------------- | +| k94 | **Bool** | | +| k100 | **Bool** | | From 68cdbc1688d7cb60740d87ba33d06ec8ddc7b7eb Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 13:46:10 +0300 Subject: [PATCH 205/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 92a8a6311..fadda8456 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -34,6 +34,7 @@ - [Quests](/resources/client/gamesave/quests.md) - [Platformer UI](resources/client/gamesave/dpad.md) - [Smart Templates](resources/client/gamesave/template.md) + - [Lists](resources/client/gamesave/list.md) - [Level](/resources/client/level.md) - [Capacity String](/resources/client/level-components/capacity-string.md) From 6bb88c6a1abe0f620ddb57a0061ca5564a376f39 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 13:52:19 +0300 Subject: [PATCH 206/389] Update list.md --- docs/resources/client/gamesave/list.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/list.md b/docs/resources/client/gamesave/list.md index 17fadc25b..5ab2f1ac8 100644 --- a/docs/resources/client/gamesave/list.md +++ b/docs/resources/client/gamesave/list.md @@ -13,7 +13,7 @@ A level list is a list of levels - playable objects in Geometry Dash, namely com | k1 | Level ID | **integer** | the id of the list | | k2 | Level Name | **string** | the name of the list | | k3 | Description | **string** | the list description, encoded in [base64](https://en.wikipedia.org/wiki/Base64) | -| k5 | Creator | **[user](./user.md)Name** | the name of the level creator | +| k5 | Creator | **string** | the name of the level creator | | k7 | list difficulty | **integer** | the difficulty the list has | | k11 | Downloads | **integer** | the amount of times the list's been downloaded | | k15 | Uploaded | **bool** | whether the list is uploaded to the server or not | From a728726ba245d1ba15979adc0f95d01fd571357f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 14:09:41 +0300 Subject: [PATCH 207/389] better k111 info --- docs/resources/client/level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 1f352ae56..0cc5c953a 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -128,4 +128,4 @@ The build tab page is 5, and the button settings are 6x2 (default), meaning the | k94 | **Bool** | Platformer? | | k101 | **string** | seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | | k106 | **integer** | corresponds to key 54 on the servers | -| k111 | **integer** | seems to be 4 or 5a digits and seems to be platformer-exclusive | +| k111 | **integer** | seems to be some sort of platformer-exclusive hash | From 5327ca51fb02fa848c264c934b19a90642873ff5 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 14:20:59 +0300 Subject: [PATCH 208/389] :crab: :crab: :crab: k111 :crab: :crab: :crab: --- docs/resources/client/level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 0cc5c953a..2b0901067 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -94,6 +94,7 @@ A level is a playable object in Geometry Dash, namely coming with data that expl | k108 | Best Points | **integer** | Your point highscore on the level | | k109 | Local Best Times | **integer** | List of your best times on the level in milliseconds, separated by `,` | | k110 | Local Best Points | **integer** | List of your point highscores on the level, separated by `,` | +| k111 | Platformer Hash | **integer** | Hash for platformer completions according to this formula: `(((((bestTime + 7890) % 34567) * 601 + ((bestPoints + 3456) % 78901) * 967 + 94819) % 94433) * 829) % 77849` | k112 | No Shake | **bool** | Whether the player has disabled shake for this level | @@ -128,4 +129,3 @@ The build tab page is 5, and the button settings are 6x2 (default), meaning the | k94 | **Bool** | Platformer? | | k101 | **string** | seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | | k106 | **integer** | corresponds to key 54 on the servers | -| k111 | **integer** | seems to be some sort of platformer-exclusive hash | From 881dfaf63e02f6dd956fd35b8c3a7121ca9728de Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 14:57:23 +0300 Subject: [PATCH 209/389] Update level.md --- docs/resources/client/level.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 2b0901067..15c98adce 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -94,9 +94,18 @@ A level is a playable object in Geometry Dash, namely coming with data that expl | k108 | Best Points | **integer** | Your point highscore on the level | | k109 | Local Best Times | **integer** | List of your best times on the level in milliseconds, separated by `,` | | k110 | Local Best Points | **integer** | List of your point highscores on the level, separated by `,` | -| k111 | Platformer Hash | **integer** | Hash for platformer completions according to this formula: `(((((bestTime + 7890) % 34567) * 601 + ((bestPoints + 3456) % 78901) * 967 + 94819) % 94433) * 829) % 77849` +| k111 | Platformer Hash | **integer** | Hash for platformer completions, see below for code | | k112 | No Shake | **bool** | Whether the player has disabled shake for this level | +The platformer hash is generated like this: + +```py +def generatePlatformerHash(bestTime, bestPoints) { + number = (((bestTime + 7890) % 34567) * 601 + (((bestPoints) + 3456) % 78901) * 967 + 94819) % 94433 + return ((number ^ number >> 16) * 829) % 77849 +} +``` + **Last Editor State Key/Value Pairs** The last editor state key/value pairs contain a few values that indicate the last state of the editor before exiting the editor on that level. From f7b7d974b5169ce7599810b13843e0f48a9d41fe Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 14:57:45 +0300 Subject: [PATCH 210/389] i am dumb --- docs/resources/client/level.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 15c98adce..3c2545b0a 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -100,10 +100,10 @@ A level is a playable object in Geometry Dash, namely coming with data that expl The platformer hash is generated like this: ```py -def generatePlatformerHash(bestTime, bestPoints) { +def generatePlatformerHash(bestTime, bestPoints): number = (((bestTime + 7890) % 34567) * 601 + (((bestPoints) + 3456) % 78901) * 967 + 94819) % 94433 return ((number ^ number >> 16) * 829) % 77849 -} + ``` From 664b0513f33b6e33fd19df4e20365362c7b5bf98 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:16:19 +0300 Subject: [PATCH 211/389] Update GLM.md --- docs/resources/client/gamesave/GLM.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/resources/client/gamesave/GLM.md b/docs/resources/client/gamesave/GLM.md index 84a75df3e..cca409136 100644 --- a/docs/resources/client/gamesave/GLM.md +++ b/docs/resources/client/gamesave/GLM.md @@ -191,3 +191,15 @@ GLM_20 is a dictionary of all the editor smart templates you have saved | Key | description | |:----|:------------| | kCEK 10 | [level data](resources/client/gamesave/template.md) | + +## GLM_21 + +This GLM is unknown, but it presumably had something to do with lists. It was in 2.200 but is not in 2.206 + +## GLM_22 + +GLM_22 is a dictionary of all your favorited lists + +| Key | description | +|:----|:------------| +| kCEK 12 | [level data](resources/client/gamesave/list.md) | From 8b7f4d1ebee12dbd7f673c69f4a4e8dfb8380971 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:33:09 +0300 Subject: [PATCH 212/389] one singular gv part i lost track (audio visualizer) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index cfd768743..5e570f1ab 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -127,6 +127,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0140 | Disable Orb Scale | | gv_0141 | Disable Trigger Orb Scale | | gv_0142 | Reduce Audio Quality | +| gv_0144 | Audio Visualizer | | gv_0149 | Show Clicks (editor) | | gv_0150 | Auto Pause on Test (editor) | | gv_0151 | Start Optimization (editor) | From 6a1f69157b47308f28f51d62b12d32d13c4f3702 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:40:51 +0300 Subject: [PATCH 213/389] one singular gv (show time) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 5e570f1ab..f17728291 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -128,6 +128,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0141 | Disable Trigger Orb Scale | | gv_0142 | Reduce Audio Quality | | gv_0144 | Audio Visualizer | +| gv_0145 | Show Time | | gv_0149 | Show Clicks (editor) | | gv_0150 | Auto Pause on Test (editor) | | gv_0151 | Start Optimization (editor) | From 8731a66d52eff298fe47b4d4846b90670cbd2cff Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:43:03 +0300 Subject: [PATCH 214/389] one singular gv (disable checkpoints) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index f17728291..013ec6497 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -129,6 +129,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0142 | Reduce Audio Quality | | gv_0144 | Audio Visualizer | | gv_0145 | Show Time | +| gv_0146 | Disable Checkpoints | | gv_0149 | Show Clicks (editor) | | gv_0150 | Auto Pause on Test (editor) | | gv_0151 | Start Optimization (editor) | From d77b35c78173521c5e812916d9ebcf9558bbe015 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:47:20 +0300 Subject: [PATCH 215/389] one singular gv (ignore damage pause menu) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 013ec6497..f07d0b2eb 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -144,6 +144,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0169 | Small Warp Buttons (editor) | | gv_0170 | Borderless Fullscreen | | gv_0171 | Disable Player Hitbox | +| gv_0173 | Ignore Damage (playtesting outside of editor) | | gv_0174 | Hide Playtest Text | # Unlocked Game Variables From 6a2c1826889b3da3bc78cb509db4de79d31cb17d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:53:25 +0300 Subject: [PATCH 216/389] one singular gv (confirm exit) --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index f07d0b2eb..7ad2d16e1 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -140,6 +140,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0159 | Audio Fix 01 | | gv_0163 | Enable Quick Keys | | gv_0166 | Show Hitboxes (in practice mode) | +| gv_0167 | Confirm Exit | | gv_0168 | Fast Menu | | gv_0169 | Small Warp Buttons (editor) | | gv_0170 | Borderless Fullscreen | From d7b4abbd5659c21e52069e5c52109bfee4f2a4a6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:57:10 +0300 Subject: [PATCH 217/389] Update gv.md --- docs/resources/client/gamesave/gv.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 7ad2d16e1..6882091ec 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -53,7 +53,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0049 | buttonsPerRow (editor) | | gv_0050 | buttonRows (editor) | | gv_0051 | showedNGMessage (editor) | -| gv_0052 | fastPracticeReset| +| gv_0052 | Enable Faster Reset | | gv_0053 | Free Games Popup | | gv_0055 | checkIfServerOnline.php | | gv_0056 | disableObjectAlert | From 8f46abfb287bcfb989c53635a44968c32c46c1b6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:00:29 +0300 Subject: [PATCH 218/389] Update song.md --- docs/resources/server/song.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/song.md b/docs/resources/server/song.md index 89f877f41..a83ff909f 100644 --- a/docs/resources/server/song.md +++ b/docs/resources/server/song.md @@ -44,5 +44,5 @@ The IDs for Music Library songs start at 10,000,000 | 12 | extraArtistIDs | **Array\[Integer]** | IDs of extra artists, separated by `.` | 13 | new | **Boolean** | Whether the NEW icon shows up or not | 14 | newType | **Integer** | Type of NEW icon. 0 for Yellow, 1 for Blue -| 15 | extraArtistNames | **Array** | Seems to be an array of extra artist names, but seems to be unused. +| 15 | extraArtistNames | **Array** | Artist names in this format: `{id},{name},{id},{name}` From a7b54a5d0483373ea072edb66cd540535d09329e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:01:15 +0300 Subject: [PATCH 219/389] Update song.md --- docs/resources/server/song.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/resources/server/song.md b/docs/resources/server/song.md index a83ff909f..db7e4c055 100644 --- a/docs/resources/server/song.md +++ b/docs/resources/server/song.md @@ -1,4 +1,4 @@ -# Server Song Resource +# Client & Server Song Resource ## Song @@ -46,3 +46,5 @@ The IDs for Music Library songs start at 10,000,000 | 14 | newType | **Integer** | Type of NEW icon. 0 for Yellow, 1 for Blue | 15 | extraArtistNames | **Array** | Artist names in this format: `{id},{name},{id},{name}` +#### **Trivia** +- The savefile song structure uses the exact same keys as the server response From 35a0050cfd004b0bbb4bd921dda6d3ea37a6cbc5 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:09:22 +0300 Subject: [PATCH 220/389] Update musiclibrary.md --- docs/endpoints/songs/musiclibrary.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/songs/musiclibrary.md b/docs/endpoints/songs/musiclibrary.md index 784e83215..accb6357e 100644 --- a/docs/endpoints/songs/musiclibrary.md +++ b/docs/endpoints/songs/musiclibrary.md @@ -12,6 +12,12 @@ The old music library can be fetched via a GET request to `https://geometrydashf You can also fetch the latest version of the Music Library by sending a GET request to `https://geometrydashfiles.b-cdn.net/music/musiclibrary_version_02.txt` (for the old library, the link is `https://geometrydashfiles.b-cdn.net/music/musiclibrary_version.txt`. As of the writing, the latest version for the old library is `114` and this is unlikely to change in the future). +The Music library format is covered [here](/resources/client/musiclibrary.md). + +## Downloading Songs + You can download a track by sending a GET request to `https://geometrydashfiles.b-cdn.net/music/{id}.mp3`. All Music Library song IDs have an offset of 10,000,000 to not interfere with the Newgrounds songs. -The Music library format is covered [here](/resources/client/musiclibrary.md). +## Archive + +The music library and SFX library versions are auto-archived by Cvolton at https://cvolton.eu/sfx. From 6e74ce03fa5ce52fdc2a83e915d182fd064b1947 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:10:10 +0300 Subject: [PATCH 221/389] Update sfxlibrary.md --- docs/endpoints/songs/sfxlibrary.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/songs/sfxlibrary.md b/docs/endpoints/songs/sfxlibrary.md index 3ee886895..74fa1c6bf 100644 --- a/docs/endpoints/songs/sfxlibrary.md +++ b/docs/endpoints/songs/sfxlibrary.md @@ -6,6 +6,12 @@ In Geometry Dash 2.2, the Sound Effect library has been added. The library can b You can also fetch the latest version of the SFX Library by sending a GET request to `https://geometrydashfiles.b-cdn.net/sfx/sfxlibrary_version.txt`. -You can download a sound effect by sending a GET request to `https://geometrydashfiles.b-cdn.net/sfx/s{id}.ogg`. - The SFX library format is covered [here](/resources/client/sfxlibrary.md). + +## Downloading SFX + +You can download a sound effect by sending a GET request to `https://geometrydashfiles.b-cdn.net/sfx/s{id}.ogg`. Note that there are quite a bit of unused SFX that you won't find in the library. + +## Archive + +The music library and SFX library versions are auto-archived by Cvolton at https://cvolton.eu/sfx. From 43f9d1f1c0e3b9a5e25a60492ee16104ba79d43a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:38:27 +0300 Subject: [PATCH 222/389] still dont know what MDLM_002 is --- docs/resources/client/gamesave.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 7ef8ae10d..34bfd9aea 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -138,7 +138,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account | Key | Value | |:----|:------| -| MDLM_001 | Dictionary of SongInfoObject | +| MDLM_001 | Dictionary of [SongInfoObject](/resources/server/song.md) | | MDLM_002 | Song Priority of a song | ### KBM From f392d5f024721e2f0ffadd26f16d23465c5cd72b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:40:03 +0300 Subject: [PATCH 223/389] Update gamesave.md --- docs/resources/client/gamesave.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 34bfd9aea..e038695d5 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -131,8 +131,9 @@ Your CCGameManager.dat File contains a lot of information regarding your account | Key | Value| | :-- |:-----------| -| LLM_01 | Local Levels | +| LLM_01 | Local [Levels](/resources/client/level.md) | | LLM_02 | Hardcoded to `binaryVersion`| +| LLM_03 | Local [Lists](/resources/client/gamesave/list.md) | ### MDLM From deec309b37c7f52a329dc224bea4dac6009173b9 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:40:29 +0300 Subject: [PATCH 224/389] Update gamesave.md --- docs/resources/client/gamesave.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index e038695d5..d4acf1421 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -125,7 +125,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account | GJA_002 | Password (in plaintext) (2.1 and below)| | GJA_003 | AccountID | | GJA_004 | Session ID (unused) | -| GJA_005 | Your password with GJP2 Encryption| +| GJA_005 | Your password with [GJP2](/topics/gjp.md) Encryption| ### LLM From 8b206cb90a10fcb819ef596e7753619d8b39c0ee Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 16:44:58 +0300 Subject: [PATCH 225/389] Update likeGJItem211.md --- docs/endpoints/misc/likeGJItem211.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/misc/likeGJItem211.md b/docs/endpoints/misc/likeGJItem211.md index 296b730a6..1a32c65d0 100644 --- a/docs/endpoints/misc/likeGJItem211.md +++ b/docs/endpoints/misc/likeGJItem211.md @@ -10,13 +10,13 @@ Likes a level, comment, etc. **itemID** - The ID of the level, comment, or account comment -**type** - 1 for level, 2 for level comment, 3 for account comment. +**type** - 1 for level, 2 for level comment, 3 for account comment, 4 for list ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -58,4 +58,4 @@ print(req.text) 1 ``` - \ No newline at end of file + From 8224ec1eaef89338cd4a09a74c56b9a5990ed743 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 18:17:41 +0300 Subject: [PATCH 226/389] Update xor.md --- docs/topics/encryption/xor.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/topics/encryption/xor.md b/docs/topics/encryption/xor.md index 89980ff67..0f003dcbf 100644 --- a/docs/topics/encryption/xor.md +++ b/docs/topics/encryption/xor.md @@ -51,6 +51,7 @@ for (i = 0; i < input.length; i++) { | `39673` | Level Leaderboard Integrity | Cycled | | `41274` | Level Integrity | Cycled | | `48291` | Load Data | Cycled | +| `57709` | Musiclibrary UUID | Cycled | | `58281` | Rating Integrity | Cycled | | `59182` | Chest Rewards | Cycled | | `85271` | Stat Submission Integrity | Cycled | From e5d1321c116c9738139472405a3d6c5629e87871 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:27:37 +0300 Subject: [PATCH 227/389] Update musiclibrary.md --- docs/endpoints/songs/musiclibrary.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/endpoints/songs/musiclibrary.md b/docs/endpoints/songs/musiclibrary.md index accb6357e..39e5c0df3 100644 --- a/docs/endpoints/songs/musiclibrary.md +++ b/docs/endpoints/songs/musiclibrary.md @@ -18,6 +18,10 @@ The Music library format is covered [here](/resources/client/musiclibrary.md). You can download a track by sending a GET request to `https://geometrydashfiles.b-cdn.net/music/{id}.mp3`. All Music Library song IDs have an offset of 10,000,000 to not interfere with the Newgrounds songs. +## CDN Tokens + +The GD client currently sends two parameters for every `https://geometrydashfiles.b-cdn.net` request: `token` and `expires`. While these aren't required as of the time of writing, they may be required in the future. Click [here](/topics/cdn_token.md) to find out how to generate the CDN tokens. + ## Archive The music library and SFX library versions are auto-archived by Cvolton at https://cvolton.eu/sfx. From 1e95bce5ce93a267dfa0af3ad7b4550b681ef6b4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:27:56 +0300 Subject: [PATCH 228/389] Update musiclibrary.md --- docs/endpoints/songs/musiclibrary.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/songs/musiclibrary.md b/docs/endpoints/songs/musiclibrary.md index 39e5c0df3..df7ff60ed 100644 --- a/docs/endpoints/songs/musiclibrary.md +++ b/docs/endpoints/songs/musiclibrary.md @@ -20,7 +20,8 @@ You can download a track by sending a GET request to `https://geometrydashfiles. ## CDN Tokens -The GD client currently sends two parameters for every `https://geometrydashfiles.b-cdn.net` request: `token` and `expires`. While these aren't required as of the time of writing, they may be required in the future. Click [here](/topics/cdn_token.md) to find out how to generate the CDN tokens. +The GD client currently sends two parameters for every `https://geometrydashfiles.b-cdn.net` request: `token` and `expires`. While these aren't required as of the time of writing, they may be required in the future. Click [here](/topics/cdn_token.md) to find instructions +how to generate the CDN tokens. ## Archive From a510bda95224b1cdb2b0274ef5c92339312156bf Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:33:01 +0300 Subject: [PATCH 229/389] Create cdn_token.md --- docs/topics/cdn_token.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 docs/topics/cdn_token.md diff --git a/docs/topics/cdn_token.md b/docs/topics/cdn_token.md new file mode 100644 index 000000000..d74846040 --- /dev/null +++ b/docs/topics/cdn_token.md @@ -0,0 +1,19 @@ +# CDN Tokens + +For both musiclibrary and sfxlibrary, there are 2 optional parameters that are sent by the GD client but are currently **not** required to receive the data. One still may want to implement these into their code for future-proofing. + +> **`expires`** + +This is the UNIX timestamp (seconds) that is an hour later than the current timestamp. + +> **`token`** + +Tokens are generated this way (pseudocode): + +``` +# The endpoint is the part of the URL after https://geometrydashfiles.b-cdn.net. So, for example, the endpoint for https://geometrydashfiles.b-cdn.net/sfx/sfxlibrary_version.txt would be /sfx/sfxlibrary_version.txt +hash = md5("8501f9c2-75ba-4230-8188-51037c4da102{endpoint}{expires}") +base64EncodeUrlSafe(hash.digest(ASCII)) +``` + +Please note that the hash must be digested as ASCII, not hexadecimal! From 84442081a3286769f78e875a7425f4b81e913823 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:33:20 +0300 Subject: [PATCH 230/389] Update _sidebar.md --- docs/_sidebar.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index fadda8456..11dae96d5 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -124,7 +124,8 @@ - [Status Codes](/topics/status_codes.md) - [Vault Codes](/topics/vault_codes.md) - [Shop](/topics/shop) - - [Tags](/topics/tags) + - [Tags](/topics/tags) + - [CDN Tokens](/topics/cdn_token.md) - **Algorithms** From 4b7b11095dada5adb881e95187587789d14e45a2 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:46:05 +0300 Subject: [PATCH 231/389] new tag info (but not all) --- docs/topics/tags.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 7109c74a8..5f03cb69b 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -27,6 +27,11 @@ | `` | `0xFF5A4B` | Sample | | `` | `0xFF5A5A` | Sample | | `` | `0xFF00FF` | Sample | +| `` | `0x9632FF` | Sample | +| `` | `0xFF96FF` | Sample | +| `` | `0xFFFF96` | Sample | +| `` | `0x96FFFF` | Sample | +| `` | `0xFFDC41` | Sample | | `Default` | `0xFF0000` | Sample | ## Instant Tags @@ -41,6 +46,13 @@ **Usage:** `...` +## Shake Tags + +> Shake Tags are used to render shaky text on screen. The number denotes the intensity of the shake. + +**Usage:** `CHOPPER!` + + ## Notes - In 2.1, failing to add an end tag for Colour tags and Instant tags would result in the game crashing, but this was fixed in 2.2 From 4dd4c32efcc11e42bb037c4ce0fa1ce8d998f804 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 20:04:24 +0300 Subject: [PATCH 232/389] Create getGJLevelScoresPlat.md --- docs/endpoints/levels/getGJLevelScoresPlat.md | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/endpoints/levels/getGJLevelScoresPlat.md diff --git a/docs/endpoints/levels/getGJLevelScoresPlat.md b/docs/endpoints/levels/getGJLevelScoresPlat.md new file mode 100644 index 000000000..39216de2f --- /dev/null +++ b/docs/endpoints/levels/getGJLevelScoresPlat.md @@ -0,0 +1,100 @@ +# getGJLevelScoresPlat.php + +Fetches the leaderboard for a platformer level and submits your level stats to the server + +## Parameters + +### Required Parameters + +**accountID** - The user's account ID + +**gjp2** - The user's [GJP2](/topics/encryption/gjp.md) + +**levelID** - The ID of the level + +**secret** - Wmfd2893gb7 + +### Optional Parameters + +**gameVersion** - 22 + +**binaryVersion** - 42 + +**gdw** - 0 + +**time** - Your time in milliseconds + +**points** - Your points + +**percent** - The percent the user has on the level. Will not update if left out, but still retrieves data + +**type** - 0 for Friends, 1 for Top, 2 for Week. Defaults to 0 if left out + +**mode** - 0 for Time, 1 for Points + +**s1** - User's attempts + 8354 + +**s2** - User's clicks + 3991 + +**s3** - User's attempt time in seconds + 4085 + +**s4** - levelSeed + + - it can be generated like this +```py +def generate_leaderboard_seed( + clicks: int, percentage: int, seconds: int, has_played: bool = True +) -> int: + + return ( + 1482 * (has_played + 1) + + (clicks + 3991) * (percentage + 8354) + + ((seconds + 4085) ** 2) - 50028039 + ) +``` + +**s5** - Random number -> `(((GJGameLevel->0x1B8 ? 2000.0 : 0) + rand()) * 4.6566e-10) * 1999.0` + +**s6** - List of PB differences (For example from 0 to 50, then 69, it would be `50,19`) [XOR'd](topics/encryption/xor.md) with `41274` and [Base64](topics/encryption/base64.md) encoded + +**s7** - Randomly Generated 10 character string + +**s8** - Attempt Count + +**s9** - The amount of coins the user got + 5819 + +**s10** - Timely ID -> for dailies and weeklies + +**chk** - [See here](/topics/encryption/chk?id=level-leaderboard) + +## Response + +Returns a list of [Leaderboard Score](/resources/server/leaderboardscore.md) objects separated by a pipe `|`. + +## Example + + + +### **Python** + +```py +import requests + +data = { + "accountID": 173831, # DevExit's account ID + "gjp": "********", # This would be DevExit's password encoded with GJP encryption + "levelID": 98170000, + "type": 1, # Leaving this out would only show friends. This shows global. + "secret": "Wmfd2893gb7" +} + +req = requests.post("http://boomlings.com/database/getGJLevelScoresPlat.php", data=data) +print(req.text) +``` + +**Response** +``` +1:masonreyes:2:45182155:9:93:10:54:11:19:14:3:15:2:16:7990002:3:95:6:1:42:3 months|1:isabced:2:151237994:9:1:10:9:11:3:14:0:15:0:16:23561530:3:250:6:2:42:4 weeks|1:nohackedmeghac:2:247724179:9:172:10:15:11:3:14:0:15:0:16:28468442:3:416:6:3:42:3 months|1:winklywinkle:2:235238621:9:1:10:7:11:12:14:4:15:0:16:26247723:3:508:6:4:42:2 months|1:BlueSpaceUnive:2:238683163:9:35:10:84:11:5:14:1:15:2:16:28438697:3:533:6:5:42:3 months|1:DEADYE:2:237977180:9:30:10:106:11:83:14:0:15:2:16:26978146:3:583:6:6:42:4 months|1:Darkness50:2:97835992:9:93:10:98:11:70:14:3:15:2:16:21263931:3:662:6:7:42:2 months|1:fathom14:2:127866214:9:117:10:94:11:17:14:0:15:2:16:13487689:3:762:6:8:42:3 months|1:aquarelaniqqa:2:244851389:9:1:10:0:11:3:14:0:15:0:16:27976920:3:820:6:9:42:4 months|1:gaggaaaaaa:2:242445614:9:20:10:89:11:3:14:0:15:2:16:27672366:3:1779:6:10:42:3 months|1:SpectatorGaming:2:238179370:9:4:10:11:11:12:14:0:15:2:16:26616945:3:1945:6:11:42:5 months|1:lowlvtank:2:246598790:9:89:10:29:11:9:14:1:15:2:16:28282295:3:1945:6:12:42:3 months|1:vladesss:2:238558729:9:233:10:15:11:9:14:0:15:0:16:26692003:3:1950:6:13:42:3 months|1:Ang3LPC:2:216997894:9:1:10:15:11:8:14:8:15:0:16:24737089:3:1954:6:14:42:2 months|1:angelito78amay:2:242875539:9:143:10:104:11:15:14:1:15:0:16:27668380:3:1958:6:15:42:5 months|1:JauhariXD:2:234283978:9:4:10:0:11:3:14:0:15:0:16:26113897:3:1958:6:16:42:5 months|1:Reazxcccccccc:2:238474887:9:105:10:53:11:12:14:1:15:2:16:27252667:3:1962:6:17:42:4 months|1:ValeriaCastGG:2:218894550:9:204:10:98:11:70:14:0:15:0:16:24532364:3:1962:6:18:42:3 months|1:Gdcmvn261:2:237184894:9:98:10:17:11:12:14:0:15:2:16:26526935:3:1966:6:19:42:5 months|1:TheGamerNoo2YT:2:240243246:9:27:10:14:11:12:14:0:15:0:16:27619991:3:1966:6:20:42:3 months|1:Nuxxany:2:242757140:9:38:10:12:11:15:14:7:15:2:16:27637062:3:1975:6:21:42:5 months|1:franchy:2:244546855:9:459:10:12:11:15:14:0:15:2:16:27924817:3:1979:6:22:42:4 months|1:MFguy23:2:243031528:9:3:10:0:11:3:14:0:15:0:16:27669567:3:2162:6:23:42:5 months|1:XattGD:2:178531425:9:1:10:0:11:3:14:0:15:0:16:27810400:3:2195:6:24:42:4 months|1:1hat0neguy:2:236879379:9:34:10:15:11:12:14:7:15:0:16:27074550:3:2220:6:25:42:4 months|1:MunPhil:2:56467054:9:314:10:12:11:0:14:0:15:2:16:8492418:3:2229:6:26:42:4 months|1:vovaadidaski:2:238335890:9:5:10:107:11:107:14:8:15:2:16:27298371:3:2358:6:27:42:5 months|1:havilgd:2:198095157:9:106:10:3:11:6:14:2:15:2:16:25446396:3:2362:6:28:42:5 months|1:abduvx77:2:241907460:9:60:10:107:11:107:14:5:15:2:16:27655321:3:2416:6:29:42:2 months|1:jddddre:2:239361905:9:2:10:0:11:3:14:8:15:0:16:28013902:3:2454:6:30:42:4 months|1:waos59294:2:203329596:9:1:10:0:11:3:14:0:15:0:16:18508924:3:2458:6:31:42:5 months|1:franellocoXd:2:242399711:9:1:10:12:11:12:14:3:15:0:16:26948298:3:10254:6:32:42:4 months|1:sedvv8:2:244951081:9:1:10:98:11:43:14:8:15:0:16:27992986:3:10525:6:33:42:4 months|1:bloody2017:2:249251172:9:115:10:7:11:3:14:0:15:2:16:28961373:3:11258:6:34:42:1 month|1:QmrdMeleesF:2:243654561:9:92:10:15:11:9:14:1:15:0:16:27771775:3:11366:6:35:42:4 months|1:sp4rkiGD:2:235450165:9:14:10:16:11:12:14:6:15:2:16:27368912:3:11604:6:36:42:3 months|1:RedCircleGuy:2:238458866:9:117:10:15:11:9:14:2:15:0:16:26673094:3:12554:6:37:42:3 months|1:ruborubik:2:235798171:9:1:10:0:11:3:14:2:15:0:16:26609657:3:12900:6:38:42:5 months|1:dylan373:2:244908513:9:25:10:9:11:0:14:0:15:0:16:27989289:3:15829:6:39:42:4 months|1:shoprime:2:234190215:9:338:10:63:11:12:14:0:15:0:16:27293798:3:17908:6:40:42:5 months|1:sandyhookvictim:2:239239633:9:55:10:40:11:12:14:5:15:0:16:27796684:3:18458:6:41:42:4 months|1:lauttygdfSRRT:2:228368610:9:1:10:35:11:3:14:0:15:0:16:26255864:3:20291:6:42:42:4 months|1:Kyovki:2:216723736:9:1:10:3:11:3:14:0:15:0:16:24342713:3:21520:6:43:42:4 months|1:maucit0:2:227257195:9:158:10:20:11:18:14:1:15:2:16:27677649:3:22387:6:44:42:5 months|1:HoshiXYZ:2:237838765:9:383:10:42:11:12:14:0:15:2:16:26559690:3:22525:6:45:42:1 week|1:masterkill009:2:248926141:9:164:10:94:11:12:14:1:15:0:16:28644580:3:22837:6:46:42:2 months|1:DirtyBlonde12:2:231455140:9:141:10:13:11:11:14:0:15:0:16:25726325:3:23654:6:47:42:2 months|1:Ev212:2:241065335:9:4:10:11:11:7:14:0:15:2:16:27290448:3:24216:6:48:42:4 months|1:Xintu:2:242146348:9:459:10:12:11:15:14:0:15:2:16:27501641:3:25179:6:49:42:5 months|1:GeoKink:2:211397249:9:97:10:4:11:3:14:3:15:2:16:24041843:3:25237:6:50:42:2 weeks|1:EstebanGd29:2:224818168:9:43:10:9:11:12:14:7:15:2:16:25170955:3:27441:6:51:42:4 months|1:P1iko:2:119382587:9:30:10:16:11:12:14:4:15:0:16:11935532:3:30350:6:52:42:3 months|1:Druzz:2:20628604:9:114:10:54:11:15:14:0:15:2:16:5951333:3:33362:6:53:42:5 months|1:ghermanteg:2:233711857:9:1:10:3:11:12:14:6:15:0:16:26005052:3:35725:6:54:42:1 week|1:KaosKiDD:2:238054916:9:2:10:16:11:12:14:1:15:0:16:27139283:3:38379:6:55:42:3 months|1:CerealCamera:2:147668407:9:129:10:41:11:40:14:0:15:2:16:20583889:3:40075:6:56:42:5 months|1:n0va3:2:184538865:9:314:10:40:11:12:14:0:15:2:16:20502560:3:48808:6:57:42:5 months|1:Alonzie:2:247006049:9:161:10:4:11:3:14:1:15:2:16:28375277:3:52066:6:58:42:2 months|1:WeedWTF:2:126012661:9:32:10:18:11:17:14:6:15:2:16:13267979:3:66008:6:59:42:4 months|1:Cronos1954H:2:245503420:9:4:10:35:11:2:14:0:15:0:16:28084121:3:67116:6:60:42:4 months|1:zLxvxndxr:2:228864792:9:459:10:5:11:3:14:0:15:2:16:26187405:3:69616:6:61:42:4 months|1:SmileRR1608:2:165853358:9:30:10:12:11:13:14:4:15:0:16:18066269:3:76087:6:62:42:4 months|1:egrmir228:2:239084882:9:233:10:11:11:9:14:0:15:0:16:27920496:3:79170:6:63:42:3 months|1:PetrosAlt:2:247134244:9:1:10:0:11:3:14:0:15:0:16:28522306:3:83475:6:64:42:3 weeks|1:ThomasGaming64:2:157109234:9:31:10:11:11:18:14:0:15:0:16:15825883:3:87029:6:65:42:2 months|1:gercc:2:247353001:9:37:10:44:11:12:14:1:15:0:16:28388950:3:87658:6:66:42:3 months|1:Suovin:2:12852289:9:35:10:35:11:8:14:6:15:2:16:4943703:3:87745:6:67:42:6 months|1:GMDfrostbyte:2:244930781:9:2:10:86:11:5:14:2:15:0:16:27989605:3:88887:6:68:42:3 months|1:iKronnoi:2:163174203:9:2:10:12:11:15:14:8:15:0:16:17062684:3:90433:6:69:42:2 months|1:hectorpro03:2:238235908:9:49:10:0:11:3:14:1:15:0:16:26465216:3:93525:6:70:42:4 months|1:DashSans:2:206031573:9:175:10:9:11:1:14:0:15:2:16:26289314:3:93633:6:71:42:3 months|1:egordruzisteam:2:231573558:9:2:10:12:11:19:14:8:15:0:16:26146950:3:95962:6:72:42:4 months|1:thehattrickhero:2:236214082:9:1:10:29:11:3:14:0:15:0:16:26287695:3:96575:6:73:42:3 months|1:sweetiefemboy:2:246402023:9:2:10:8:11:8:14:8:15:2:16:28590595:3:97870:6:74:42:3 months|1:killua333333:2:238680925:9:60:10:15:11:12:14:0:15:0:16:27658945:3:99754:6:75:42:3 months|1:jdd0606:2:216780052:9:1:10:0:11:3:14:0:15:0:16:24326809:3:100720:6:76:42:5 months|1:Lianju23:2:240365767:9:35:10:89:11:40:14:6:15:2:16:27104642:3:101479:6:77:42:3 months|1:hahayeahbot2:2:138319396:9:394:10:52:11:12:14:0:15:2:16:16839912:3:101762:6:78:42:4 months|1:F1azGD:2:244860380:9:117:10:12:11:18:14:2:15:0:16:28122964:3:102491:6:79:42:4 months|1:ZyphonoxX:2:229148151:9:21:10:11:11:3:14:0:15:0:16:27335565:3:105091:6:80:42:5 months|1:ApcPlay:2:219831214:9:38:10:9:11:12:14:6:15:2:16:24629818:3:108858:6:81:42:3 months|1:nexenGD450:2:244990822:9:154:10:54:11:9:14:0:15:0:16:28259714:3:109483:6:82:42:2 weeks|1:cheshet:2:237061734:9:219:10:3:11:3:14:0:15:0:16:26408801:3:109541:6:83:42:1 week|1:valentin7893:2:245906348:9:98:10:94:11:12:14:0:15:2:16:28148148:3:109645:6:84:42:1 month|1:rainbow72148:2:243789071:9:3:10:11:11:14:14:8:15:2:16:28231089:3:110062:6:85:42:2 months|1:GatoKittypro1:2:216695479:9:3:10:15:11:6:14:8:15:2:16:24318885:3:110087:6:86:42:5 months|1:play331:2:240985569:9:107:10:2:11:3:14:0:15:0:16:28140154:3:110491:6:87:42:2 months|1:Mozani:2:243739009:9:1:10:49:11:41:14:8:15:2:16:27785322:3:111350:6:88:42:4 months|1:purkey803:2:126832365:9:2:10:2:11:12:14:4:15:0:16:26972877:3:111845:6:89:42:3 months|1:hoholock1992:2:242601071:9:7:10:31:11:18:14:7:15:0:16:27607172:3:113125:6:90:42:3 months|1:Collection:2:216547449:9:368:10:102:11:15:14:0:15:0:16:24326733:3:115650:6:91:42:6 months|1:GoldMimmo:2:123451382:9:111:10:12:11:106:14:0:15:0:16:20548195:3:115983:6:92:42:6 months|1:demonrobot:2:1322539:9:116:10:10:11:3:14:0:15:2:16:3725519:3:116354:6:93:42:5 months|1:molemelvindash:2:11858394:9:31:10:9:11:12:14:5:15:2:16:3183046:3:116558:6:94:42:6 months|1:CoYzN:2:207867574:9:132:10:12:11:106:14:0:15:0:16:23347587:3:116754:6:95:42:6 months|1:kevle:2:238433022:9:48:10:15:11:15:14:0:15:2:16:27098663:3:117416:6:96:42:6 months|1:BradenbowlPro:2:49064662:9:22:10:12:11:9:14:7:15:0:16:7516531:3:117429:6:97:42:6 months|1:Nomiix:2:2717875:9:407:10:2:11:43:14:0:15:2:16:3786069:3:118004:6:98:42:6 months|1:ShInigamI4ever:2:134024259:9:21:10:15:11:15:14:7:15:2:16:18097714:3:118512:6:99:42:4 months|1:d0nK:2:42863178:9:62:10:13:11:9:14:4:15:2:16:7113081:3:119420:6:100:42:6 months|1:HekkaPekka:2:23028544:9:1:10:0:11:3:14:7:15:0:16:12273185:3:119595:6:101:42:6 months|1:TheRealKimizan:2:21031323:9:467:10:90:11:3:14:0:15:2:16:6776466:3:119625:6:102:42:6 months|1:GD Baio:2:21651324:9:141:10:8:11:16:14:0:15:2:16:7129730:3:119662:6:103:42:6 months|1:LonelySpy:2:12278574:9:334:10:18:11:70:14:0:15:2:16:2955213:3:119929:6:104:42:5 months|1:mrspoh:2:241261972:9:2:10:9:11:3:14:8:15:0:16:27350485:3:119962:6:105:42:4 months|1:PHon7om:2:236027378:9:482:10:63:11:6:14:0:15:0:16:28934192:3:120037:6:106:42:2 months|1:pi6:2:240771687:9:1:10:0:11:3:14:0:15:0:16:27225105:3:120170:6:107:42:5 months|1:577Nik:2:249293888:9:35:10:0:11:20:14:1:15:2:16:28753094:3:121216:6:108:42:2 months|1:Jimenezmigue:2:11133617:9:463:10:9:11:11:14:0:15:2:16:2194402:3:121845:6:109:42:6 months|1:nnum:2:241633053:9:140:10:94:11:107:14:0:15:2:16:27389698:3:122258:6:110:42:5 months|1:Penguinguy333:2:15290962:9:109:10:40:11:3:14:0:15:0:16:4469484:3:122691:6:111:42:6 months|1:wartouk:2:225800534:9:1:10:98:11:12:14:7:15:0:16:25280409:3:122770:6:112:42:3 months|1:Saturnb4:2:195255958:9:61:10:40:11:74:14:5:15:2:16:26246569:3:122958:6:113:42:6 months|1:PicorGD:2:99096154:9:98:10:0:11:12:14:0:15:2:16:10614877:3:123037:6:114:42:6 months|1:Kaal:2:50172055:9:92:10:30:11:17:14:0:15:2:16:9214388:3:123041:6:115:42:6 months|1:eXp3rienc:2:167991384:9:5:10:0:11:16:14:8:15:2:16:19672755:3:124395:6:116:42:3 months|1:BartektusOtPL:2:6913271:9:246:10:17:11:1:14:0:15:2:16:2027679:3:124466:6:117:42:6 months|1:retromanGD:2:163856600:9:41:10:18:11:12:14:7:15:0:16:17341242:3:124812:6:118:42:5 months|1:BestEliteGamer:2:222263605:9:84:10:3:11:12:14:0:15:2:16:26893674:3:124912:6:119:42:3 months|1:Cade2005:2:79209836:9:78:10:6:11:23:14:3:15:0:16:10924116:3:125287:6:120:42:6 months|1:SUSLICEK:2:247945575:9:41:10:18:11:12:14:7:15:2:16:28484245:3:125375:6:121:42:2 months|1:MiniJimmy123:2:234250821:9:35:10:9:11:15:14:0:15:0:16:26073291:3:125887:6:122:42:1 month|1:imnotrex:2:34234252:9:407:10:14:11:11:14:0:15:2:16:6779570:3:125995:6:123:42:6 months|1:picoil99:2:243070280:9:52:10:1:11:14:14:6:15:2:16:28057949:3:126328:6:124:42:2 months|1:EndFriends:2:138591659:9:66:10:18:11:17:14:0:15:0:16:13736559:3:126712:6:125:42:3 months|1:CallMeSnow:2:27485488:9:78:10:6:11:43:14:2:15:2:16:6975428:3:126729:6:126:42:6 months|1:SettingMark:2:247912868:9:132:10:16:11:12:14:0:15:0:16:28522319:3:126729:6:127:42:1 month|1:BankIt:2:148650715:9:37:10:12:11:12:14:0:15:0:16:16032202:3:127041:6:128:42:3 months|1:pinpunch:2:8154467:9:88:10:29:11:15:14:1:15:2:16:1164835:3:127333:6:129:42:6 months|1:Kilesk:2:168793062:9:13:10:12:11:12:14:4:15:0:16:26434355:3:127438:6:130:42:4 months|1:drahnoel:2:60203890:9:342:10:85:11:73:14:0:15:2:16:8130568:3:127483:6:131:42:6 months|1:Nobume:2:28403056:9:1:10:0:11:3:14:2:15:0:16:6701563:3:127600:6:132:42:6 months|1:sfdasantiga:2:158288219:9:88:10:98:11:12:14:1:15:0:16:15966193:3:128079:6:133:42:5 months|1:MgeeN:2:19042963:9:138:10:38:11:0:14:0:15:2:16:5637936:3:128558:6:134:42:6 months|1:NinSam:2:176809988:9:107:10:4:11:16:14:0:15:2:16:20754112:3:129270:6:135:42:6 months|1:Mars122:2:243796135:9:35:10:9:11:12:14:0:15:2:16:27894030:3:130350:6:136:42:1 month|1:monotyper:2:231890264:9:1:10:5:11:11:14:8:15:0:16:25763510:3:130779:6:137:42:2 months|1:persona45:2:246250839:9:394:10:3:11:7:14:0:15:2:16:28332532:3:131391:6:138:42:3 months|1:Draksou2:2:148982809:9:90:10:12:11:9:14:1:15:2:16:14687276:3:131395:6:139:42:6 months|1:sonixray:2:3834218:9:25:10:16:11:12:14:0:15:0:16:1137675:3:132437:6:140:42:6 months|1:IzzyBoiYT:2:147826314:9:79:10:4:11:3:14:0:15:0:16:15150005:3:132608:6:141:42:6 months|1:deimostrx:2:247640406:9:13:10:12:11:102:14:4:15:0:16:28432515:3:133054:6:142:42:3 months|1:SwaggyRabbit:2:141263944:9:8:10:8:11:10:14:6:15:2:16:17307505:3:133062:6:143:42:6 months|1:Tertawa:2:241750964:9:140:10:94:11:3:14:0:15:2:16:27417195:3:133141:6:144:42:5 months|1:Fritor9:2:143832918:9:163:10:12:11:11:14:0:15:0:16:14319046:3:133158:6:145:42:4 months|1:excelluijGD:2:113083743:9:368:10:12:11:17:14:0:15:0:16:11085475:3:133662:6:146:42:5 months|1:LithiumGD:2:142126978:9:5:10:25:11:12:14:8:15:0:16:14225177:3:133883:6:147:42:6 months|1:KNOEPPEL:2:12348083:9:80:10:15:11:15:14:4:15:0:16:3009121:3:134083:6:148:42:6 months|1:barreradash:2:9604468:9:24:10:5:11:11:14:6:15:0:16:2740614:3:134675:6:149:42:5 months|1:fromager:2:234339502:9:47:10:11:11:18:14:0:15:0:16:26368501:3:134870:6:150:42:6 months|1:khalllkh:2:243314432:9:2:10:15:11:3:14:7:15:0:16:27822896:3:135208:6:151:42:4 months|1:RandomGuy888:2:224136174:9:233:10:15:11:20:14:0:15:0:16:25223299:3:135220:6:152:42:5 months|1:BEHOLDER19871:2:242797177:9:32:10:53:11:18:14:6:15:2:16:27630367:3:135312:6:153:42:4 months|1:buramtyplayer:2:236077295:9:1:10:0:11:12:14:0:15:2:16:27222891:3:135758:6:154:42:4 months|1:Fictinium:2:48287882:9:426:10:12:11:16:14:0:15:2:16:7602382:3:136004:6:155:42:5 months|1:ShaderMan:2:37845304:9:31:10:10:11:9:14:0:15:0:16:6877985:3:136700:6:156:42:6 months|1:ItsBullseye:2:7040242:9:59:10:8:11:3:14:5:15:2:16:1060689:3:137875:6:157:42:6 months|1:gameboyemm:2:183506706:9:368:10:17:11:17:14:0:15:2:16:20577750:3:137879:6:158:42:2 months|1:D0inky:2:116789992:9:64:10:13:11:6:14:1:15:0:16:11549766:3:138325:6:159:42:6 months|1:Gryff64:2:146960676:9:78:10:15:11:3:14:3:15:2:16:16528711:3:138362:6:160:42:5 months|1:p0up0u:2:245155666:9:22:10:2:11:6:14:7:15:2:16:28033929:3:138412:6:161:42:2 months|1:Pazu42:2:228104804:9:32:10:63:11:4:14:1:15:2:16:26824977:3:138583:6:162:42:4 months|1:Davcity:2:37783728:9:123:10:41:11:40:14:0:15:0:16:6786848:3:139079:6:163:42:6 months|1:Lake:2:16516212:9:76:10:7:11:3:14:2:15:2:16:4861064:3:139129:6:164:42:6 months|1:stevenoct:2:14518486:9:123:10:15:11:12:14:0:15:2:16:4778390:3:139145:6:165:42:2 months|1:nng122:2:225314792:9:1:10:0:11:3:14:0:15:0:16:25476944:3:139429:6:166:42:6 months|1:eqekto:2:225890052:9:22:10:12:11:12:14:7:15:0:16:25291366:3:139575:6:167:42:5 months|1:Sisup:2:30132853:9:16:10:12:11:59:14:5:15:2:16:6676029:3:139795:6:168:42:6 months|1:nobik33:2:138315212:9:31:10:3:11:11:14:0:15:0:16:16619280:3:140250:6:169:42:5 months|1:BobTheBylder:2:191956136:9:13:10:18:11:37:14:3:15:2:16:21267772:3:140350:6:170:42:6 months|1:Woofdog90:2:100569144:9:1:10:12:11:12:14:4:15:0:16:11973055:3:140412:6:171:42:5 months|1:czumpi:2:44290064:9:2:10:6:11:18:14:7:15:0:16:8281323:3:140550:6:172:42:6 months|1:Blobflop:2:58199190:9:31:10:27:11:19:14:4:15:0:16:8771053:3:140883:6:173:42:6 months|1:BimFlauschiq:2:234287333:9:48:10:86:11:70:14:1:15:0:16:27099292:3:140883:6:174:42:6 months|1:minebox230:2:5758295:9:133:10:3:11:12:14:0:15:0:16:441312:3:140916:6:175:42:6 months|1:HueVesuvius:2:182496168:9:30:10:9:11:12:14:0:15:0:16:20507827:3:141350:6:176:42:3 months|1:therealmrnuggz:2:174941428:9:1:10:12:11:12:14:0:15:2:16:19281325:3:141379:6:177:42:1 month|1:Kammantop:2:238529976:9:1:10:0:11:3:14:0:15:0:16:26686302:3:141475:6:178:42:3 months|1:PyroMan1a:2:115665575:9:371:10:29:11:10:14:0:15:0:16:13467645:3:141658:6:179:42:5 months|1:JamesGDlol:2:238032234:9:1:10:15:11:12:14:6:15:0:16:26802260:3:141937:6:180:42:2 months|1:TheZeroStar:2:246107699:9:1:10:0:11:3:14:0:15:0:16:28184814:3:142104:6:181:42:3 months|1:Qualpyn:2:129095315:9:1:10:47:11:12:14:8:15:0:16:13459350:3:142204:6:182:42:4 months|1:EnzoGDYtbs:2:244666314:9:107:10:15:11:12:14:0:15:0:16:28133822:3:142375:6:183:42:4 months|1:KobaGD:2:14683518:9:98:10:5:11:3:14:0:15:2:16:4948816:3:142433:6:184:42:6 months|1:lolorob7017:2:218382479:9:18:10:12:11:15:14:6:15:0:16:26573344:3:142550:6:185:42:6 months|1:J1oToS:2:27003063:9:16:10:20:11:23:14:0:15:2:16:8261398:3:142575:6:186:42:3 months|1:Uuniverse:2:184882843:9:32:10:15:11:8:14:2:15:2:16:21212394:3:142604:6:187:42:6 months|1:mrstealuroculus:2:116744714:9:1:10:9:11:12:14:7:15:0:16:15983207:3:142800:6:188:42:6 months|1:DenDanDen:2:93090716:9:108:10:98:11:12:14:0:15:2:16:10052796:3:142825:6:189:42:5 months|1:kirbycube:2:109802289:9:18:10:74:11:40:14:7:15:0:16:10858186:3:143079:6:190:42:6 months|1:KvasirGD:2:239251151:9:1:10:0:11:3:14:0:15:0:16:26840022:3:143533:6:191:42:6 months|1:5Live:2:229674653:9:1:10:0:11:3:14:6:15:0:16:25731871:3:143854:6:192:42:4 months|1:GDshowcased:2:230995371:9:483:10:16:11:1:14:0:15:0:16:25656277:3:143883:6:193:42:2 months|1:N4thack3r:2:44243030:9:3:10:54:11:12:14:6:15:2:16:10306571:3:143970:6:194:42:3 months|1:Rakks:2:5192461:9:28:10:89:11:17:14:5:15:0:16:251518:3:144158:6:195:42:6 months|1:TrevellGDT:2:236658582:9:482:10:12:11:18:14:0:15:2:16:26418824:3:144425:6:196:42:3 months|1:spoakygd:2:212891504:9:11:10:12:11:78:14:6:15:0:16:24846941:3:144441:6:197:42:4 months|1:FlyingKnife:2:31122725:9:3:10:103:11:19:14:8:15:2:16:6396462:3:144812:6:198:42:6 months|1:SuperAppleMeow:2:238149034:9:5:10:9:11:11:14:8:15:2:16:27223906:3:144925:6:199:42:3 months|1:RelaxUndertale:2:194073544:9:2:10:12:11:19:14:0:15:0:16:21544523:3:145016:6:200:42:1 month +``` + + From e2b0ba83eb82c8938782f718a734d830fc025500 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 20:04:48 +0300 Subject: [PATCH 233/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 11dae96d5..fe12ca0d4 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -67,6 +67,7 @@ - [getGJGauntlets21](/endpoints/levels/getGJGauntlets21.md) - [getGJLevels21](/endpoints/levels/getGJLevels21.md) - [getGJLevelScores211](/endpoints/levels/getGJLevelScores211.md) + - [getGJLevelScoresPlat](/endpoints/levels/getGJLevelScoresPlat.md) - [getGJMapPacks21](/endpoints/levels/getGJMapPacks21.md) - [rateGJDemon21](/endpoints/levels/rateGJDemon21.md) - [rateGJStars211](/endpoints/levels/rateGJStars211.md) From 60f0c1abd61e277d99606a264fd52444c563f96e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 20:08:05 +0300 Subject: [PATCH 234/389] Update getGJLevelScoresPlat.md --- docs/endpoints/levels/getGJLevelScoresPlat.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/endpoints/levels/getGJLevelScoresPlat.md b/docs/endpoints/levels/getGJLevelScoresPlat.md index 39216de2f..53af064a0 100644 --- a/docs/endpoints/levels/getGJLevelScoresPlat.md +++ b/docs/endpoints/levels/getGJLevelScoresPlat.md @@ -26,6 +26,8 @@ Fetches the leaderboard for a platformer level and submits your level stats to t **points** - Your points +**plat** - Always 1 for this endpoint + **percent** - The percent the user has on the level. Will not update if left out, but still retrieves data **type** - 0 for Friends, 1 for Top, 2 for Week. Defaults to 0 if left out From 2a27510c8adef5fc17bcd683fdc05396b54a77db Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sat, 13 Jul 2024 20:08:37 +0300 Subject: [PATCH 235/389] Update getGJLevelScores211.md --- docs/endpoints/levels/getGJLevelScores211.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJLevelScores211.md b/docs/endpoints/levels/getGJLevelScores211.md index cb8d70318..9ba64ba6d 100644 --- a/docs/endpoints/levels/getGJLevelScores211.md +++ b/docs/endpoints/levels/getGJLevelScores211.md @@ -8,7 +8,7 @@ Fetches the leaderboard for a level and submits your level stats to the server **accountID** - The user's account ID -**gjp** - The user's [GJP](/topics/encryption/gjp.md) +**gjp2** - The user's [GJP2](/topics/encryption/gjp.md) **levelID** - The ID of the level @@ -22,6 +22,12 @@ Fetches the leaderboard for a level and submits your level stats to the server **gdw** - 0 +**time** - Your time in milliseconds. Always 0 for this endpoint + +**points** - Your points. Always 0 for this endpoint + +**plat** - Always 0 for this endpoint + **percent** - The percent the user has on the level. Will not update if left out, but still retrieves data **type** - 0 for Friends, 1 for Top, 2 for Week. Defaults to 0 if left out From a84defaf8a527a966f25cde201a611ba7aa7ee0f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:05:05 +0300 Subject: [PATCH 236/389] Update salts.md --- docs/reference/salts.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/reference/salts.md b/docs/reference/salts.md index 5d691faaa..8b4589c42 100644 --- a/docs/reference/salts.md +++ b/docs/reference/salts.md @@ -12,6 +12,7 @@ | `xI35fsAapCRg` | Update Profile Chk | | `yPg6pUrtWn0J` | Level Leaderboard Chk | | `ask2fpcaqCQ2` | Vault of Secrets & Chamber of Time Codes | +| `mI29fmAnxgTs` | [GJP2](/topics/gjp.md) | ## How Salts are used @@ -32,4 +33,4 @@ Below is an example of a salt being implemented within **Vault Codes** } ``` -Please refer to the Encryption Section for more information about the implementation \ No newline at end of file +Please refer to the Encryption Section for more information about the implementation From 81bb48b61084d03e4d3248da1d0f85cfaea3e91b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:12:38 +0300 Subject: [PATCH 237/389] rate chk --- docs/topics/encryption/chk.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/topics/encryption/chk.md b/docs/topics/encryption/chk.md index 134f4c72d..2ce63a307 100644 --- a/docs/topics/encryption/chk.md +++ b/docs/topics/encryption/chk.md @@ -121,6 +121,15 @@ Random number consisting of *5* digits. - [UDID](topics/encryption/id.md?id=udid) - [UUID](topics/encryption/id.md?id=uuid) +## Rate + +- LevelID +- Stars +- [RS](topics/encryption/id.md?id=rs) +- AccountID +- [UDID](topics/encryption/id.md?id=udid) +- "UUID" (user ID) + ## User Profile - AccountID From 24c971367f5b36d2a5b413893b44f4673b7c3cef Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:15:14 +0300 Subject: [PATCH 238/389] Update chk.md --- docs/topics/encryption/chk.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/topics/encryption/chk.md b/docs/topics/encryption/chk.md index 2ce63a307..9e2125390 100644 --- a/docs/topics/encryption/chk.md +++ b/docs/topics/encryption/chk.md @@ -119,7 +119,7 @@ Random number consisting of *5* digits. - [RS](topics/encryption/id.md?id=rs) - AccountID - [UDID](topics/encryption/id.md?id=udid) -- [UUID](topics/encryption/id.md?id=uuid) +- "UUID" (player/user ID, different from the account ID) ## Rate @@ -128,7 +128,7 @@ Random number consisting of *5* digits. - [RS](topics/encryption/id.md?id=rs) - AccountID - [UDID](topics/encryption/id.md?id=udid) -- "UUID" (user ID) +- "UUID" (player/user ID, different from the account ID) ## User Profile From e5fda11917ed0016d4286b453383ad83ab57deef Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:16:50 +0300 Subject: [PATCH 239/389] Update rateGJStars211.md --- docs/endpoints/levels/rateGJStars211.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/levels/rateGJStars211.md b/docs/endpoints/levels/rateGJStars211.md index 7d69c6b76..30eaa5a71 100644 --- a/docs/endpoints/levels/rateGJStars211.md +++ b/docs/endpoints/levels/rateGJStars211.md @@ -8,6 +8,22 @@ Sends a star suggestion for a level **secret** - Wmfd2893gb7 +**levelID** - The ID of the level receiving the star suggestion + +**stars** - The amount of stars being suggested + +**rs** - 10 randomly generated characters from `[A-Za-z0-9]` + +**accountID** - Your account ID + +**gjp2** - Your password, encrypted with [GJP2](/topics/gjp.md) + +**udid** - Your UDID + +**uuid** - Your player ID (different from account ID) + +**chk** - [See here](/topics/encryption/chk.md?id=rate) + ### Optional Parameters **gameVersion** - 22 @@ -18,7 +34,7 @@ Sends a star suggestion for a level ## Response - +Always 1 if the parameters `secret`, `levelID` and `stars` are specified. `chk`, `udid`, `uuid`, `rs`, `accountID` and `gjp2` are technically not required but the star rating will not go through if these parameters aren't specified ## Example @@ -30,10 +46,12 @@ Sends a star suggestion for a level import requests data = { - "secret": "Wmfd2893gb7" + "secret": "Wmfd2893gb7", + "levelID": 15254724, + "stars": 3 } -req = requests.post('http://boomlings.com/database/getSaveData.php', data=data) +req = requests.post('http://boomlings.com/database/rateGJStars211.php', data=data) print(req.text) ``` From 24b7a752d09d9c7f177eb6bfe56c29681971eb49 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:21:28 +0300 Subject: [PATCH 240/389] Update suggestGJStars.md --- docs/endpoints/levels/suggestGJStars.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/levels/suggestGJStars.md b/docs/endpoints/levels/suggestGJStars.md index d8a1acc16..684c6f862 100644 --- a/docs/endpoints/levels/suggestGJStars.md +++ b/docs/endpoints/levels/suggestGJStars.md @@ -20,7 +20,7 @@ Endpoint used by moderators to send levels to RobTop **binaryVersion** - the binary version -**feature** - 1 for feature, 0 for star rate +**feature** - 0 for star rate, 1 for feature, 2 for epic, 3 for legendary, 4 for mythic **gdw** - 0 @@ -56,4 +56,4 @@ print(req.text) **Response** ```py 1 -``` \ No newline at end of file +``` From b1718a9da5af9f1e33a663d2603526e53106575e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:21:46 +0300 Subject: [PATCH 241/389] Update suggestGJStars.md --- docs/endpoints/levels/suggestGJStars.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/levels/suggestGJStars.md b/docs/endpoints/levels/suggestGJStars.md index 684c6f862..42a7d39c0 100644 --- a/docs/endpoints/levels/suggestGJStars.md +++ b/docs/endpoints/levels/suggestGJStars.md @@ -1,4 +1,4 @@ -# suggestGJStars.md +# suggestGJStars20.php Endpoint used by moderators to send levels to RobTop @@ -48,7 +48,7 @@ data = { "secret": "Wmfp3879gc3" } -req = requests.post("http://boomlings.com/database/suggestGJStars.php", data=data) +req = requests.post("http://boomlings.com/database/suggestGJStars20.php", data=data) print(req.text) ``` From 063a68b7326e573d552eaf322c8d7d9e744b7453 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:22:16 +0300 Subject: [PATCH 242/389] Update _sidebar.md --- docs/_sidebar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index fe12ca0d4..803aee7fe 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -72,7 +72,7 @@ - [rateGJDemon21](/endpoints/levels/rateGJDemon21.md) - [rateGJStars211](/endpoints/levels/rateGJStars211.md) - [reportGJLevel](/endpoints/levels/reportGJLevel.md) - - [suggestGJStars](/endpoints/levels/suggestGJStars.md) + - [suggestGJStars20](/endpoints/levels/suggestGJStars.md) - [updateGJDesc20](/endpoints/levels/updateGJDesc20.md) - [uploadGJLevel21](/endpoints/levels/uploadGJLevel21.md) **Lists** From 434f226dccace053f19875c6850022924ab93b33 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:39:15 +0300 Subject: [PATCH 243/389] Update xor.md --- docs/topics/encryption/xor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/encryption/xor.md b/docs/topics/encryption/xor.md index 0f003dcbf..354348a00 100644 --- a/docs/topics/encryption/xor.md +++ b/docs/topics/encryption/xor.md @@ -51,7 +51,7 @@ for (i = 0; i < input.length; i++) { | `39673` | Level Leaderboard Integrity | Cycled | | `41274` | Level Integrity | Cycled | | `48291` | Load Data | Cycled | -| `57709` | Musiclibrary UUID | Cycled | +| `57709` | Music/SFX Library Secret | Cycled | | `58281` | Rating Integrity | Cycled | | `59182` | Chest Rewards | Cycled | | `85271` | Stat Submission Integrity | Cycled | From e4bebb857c54db94266ee3fd4b18418fa85dfd20 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:42:27 +0300 Subject: [PATCH 244/389] Update likeGJItem211.md --- docs/endpoints/misc/likeGJItem211.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/endpoints/misc/likeGJItem211.md b/docs/endpoints/misc/likeGJItem211.md index 1a32c65d0..bf91bed5e 100644 --- a/docs/endpoints/misc/likeGJItem211.md +++ b/docs/endpoints/misc/likeGJItem211.md @@ -30,6 +30,8 @@ Likes a level, comment, etc. **like** - 0 is dislike, 1 is like. Not sure what it defaults to if left out, but it can be left out. +**chk** - [See here](/topics/encryption/chk.md?id=like) + ## Response Always returns 1, regardless of whether the item was liked/disliked or not. From ff3a8d45e85f9eb82db7726ca104ebc62713aff2 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:47:34 +0300 Subject: [PATCH 245/389] Update secrets.md --- docs/reference/secrets.md | 100 ++++++++++++++++++++------------------ 1 file changed, 52 insertions(+), 48 deletions(-) diff --git a/docs/reference/secrets.md b/docs/reference/secrets.md index eab443dfb..a984410a9 100644 --- a/docs/reference/secrets.md +++ b/docs/reference/secrets.md @@ -15,7 +15,7 @@ | `Wmfx2878gb9` | Admin | ### Secret Types -**As of Geometry Dash version 2.113, there are 4 *publicly* known secrets** +**As of Geometry Dash version 2.206, there are 4 *publicly* known secrets** - Common Secret - Account Secret @@ -24,61 +24,64 @@ ### **Common Secret** -> As of Geometry Dash 2.113, there are 41 endpoints on the server which use the `Common Secret`. Below is a table of all known endpoints which use the Common Secret. +> As of Geometry Dash 2.206, there are 44 endpoints on the server which use the `Common Secret`. Below is a table of all known endpoints which use the Common Secret.
Endpoints - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Endpoint
http://www.boomlings.com/database/getAccountURL.php
http://www.boomlings.com/database/acceptGJFriendRequest20.php
http://www.boomlings.com/database/blockGJUser20.php
http://www.boomlings.com/database/deleteGJAccComment20.php
http://www.boomlings.com/database/deleteGJComment20.php
http://www.boomlings.com/database/deleteGJFriendRequests20.php
http://www.boomlings.com/database/deleteGJMessages20.php
http://www.boomlings.com/database/downloadGJLevel22.php
http://www.boomlings.com/database/downloadGJMessage20.php
http://www.boomlings.com/database/getGJAccountComments20.php
http://www.boomlings.com/database/getGJChallenges.php
http://www.boomlings.com/database/getGJCommentHistory.php
http://www.boomlings.com/database/getGJComments21.php
http://www.boomlings.com/database/getGJDailyLevel.php
http://www.boomlings.com/database/getGJFriendRequests20.php
http://www.boomlings.com/database/getGJGauntlets21.php
http://www.boomlings.com/database/getGJLevelScores211.php
http://www.boomlings.com/database/getGJLevels21.php
http://www.boomlings.com/database/getGJMapPacks21.php
http://www.boomlings.com/database/getGJMessages20.php
http://www.boomlings.com/database/getGJRewards.php
http://www.boomlings.com/database/getGJScores20.php
http://www.boomlings.com/database/getGJSongInfo.php
http://www.boomlings.com/database/getGJTopArtists.php
http://www.boomlings.com/database/getGJUserList20.php
http://www.boomlings.com/database/getGJUsers20.php
http://www.boomlings.com/database/getSaveData.php
http://www.boomlings.com/database/likeGJItem211.php
http://www.boomlings.com/database/rateGJStars211.php
http://www.boomlings.com/database/readGJFriendRequest20.php
http://www.boomlings.com/database/removeGJFriend20.php
http://www.boomlings.com/database/reportGJLevel.php
http://www.boomlings.com/database/requestUserAccess.php
http://www.boomlings.com/database/restoreGJItems.php
http://www.boomlings.com/database/unblockGJUser20.php
http://www.boomlings.com/database/updateGJDesc20.php
http://www.boomlings.com/database/updateGJUserScore22.php
http://www.boomlings.com/database/uploadFriendRequest20.php
http://www.boomlings.com/database/uploadGJAccComment20.php
http://www.boomlings.com/database/uploadGJComment21.php
http://www.boomlings.com/database/uploadGJLevel21.php
http://www.boomlings.com/database/uploadGJMessage20.php
https://www.boomlings.com/database/getAccountURL.php
https://www.boomlings.com/database/acceptGJFriendRequest20.php
https://www.boomlings.com/database/blockGJUser20.php
https://www.boomlings.com/database/deleteGJAccComment20.php
https://www.boomlings.com/database/deleteGJComment20.php
https://www.boomlings.com/database/deleteGJFriendRequests20.php
https://www.boomlings.com/database/deleteGJMessages20.php
https://www.boomlings.com/database/downloadGJLevel22.php
https://www.boomlings.com/database/downloadGJMessage20.php
https://www.boomlings.com/database/getGJAccountComments20.php
https://www.boomlings.com/database/getGJChallenges.php
https://www.boomlings.com/database/getGJCommentHistory.php
https://www.boomlings.com/database/getGJComments21.php
https://www.boomlings.com/database/getGJDailyLevel.php
https://www.boomlings.com/database/getGJFriendRequests20.php
https://www.boomlings.com/database/getGJGauntlets21.php
https://www.boomlings.com/database/getGJLevelLists.php
https://www.boomlings.com/database/getGJLevelScores211.php
https://www.boomlings.com/database/getGJLevelScoresPlat.php
https://www.boomlings.com/database/getGJLevels21.php
https://www.boomlings.com/database/getGJMapPacks21.php
https://www.boomlings.com/database/getGJMessages20.php
https://www.boomlings.com/database/getGJRewards.php
https://www.boomlings.com/database/getGJScores20.php
https://www.boomlings.com/database/getGJSongInfo.php
https://www.boomlings.com/database/getGJTopArtists.php
https://www.boomlings.com/database/getGJUserList20.php
https://www.boomlings.com/database/getGJUsers20.php
https://www.boomlings.com/database/getSaveData.php
https://www.boomlings.com/database/likeGJItem211.php
https://www.boomlings.com/database/rateGJStars211.php
https://www.boomlings.com/database/readGJFriendRequest20.php
https://www.boomlings.com/database/removeGJFriend20.php
https://www.boomlings.com/database/reportGJLevel.php
https://www.boomlings.com/database/requestUserAccess.php
https://www.boomlings.com/database/restoreGJItems.php
https://www.boomlings.com/database/unblockGJUser20.php
https://www.boomlings.com/database/updateGJDesc20.php
https://www.boomlings.com/database/updateGJUserScore22.php
https://www.boomlings.com/database/uploadFriendRequest20.php
https://www.boomlings.com/database/uploadGJAccComment20.php
https://www.boomlings.com/database/uploadGJComment21.php
https://www.boomlings.com/database/uploadGJLevel21.php
https://www.boomlings.com/database/uploadGJLevelList.php
https://www.boomlings.com/database/uploadGJMessage20.php
**

Account Secret

** -> As of Geometry Dash 2.113, there are 5 endpoints which use the `Account Secret`. The Account Secret was created for endpoints that deal with important account features such as save data and privacy settings. Below is a table of each endpoint which uses the Account Secret. +> As of Geometry Dash 2.206, there are 5 endpoints which use the `Account Secret`. The Account Secret was created for endpoints that deal with important account features such as save data and privacy settings. Below is a table of each endpoint which uses the Account Secret.
Endpoints @@ -95,7 +98,7 @@
**

Level Secret

** -> As of Geometry Dash 2.113, there is only a single endpoint that uses the `Level Secret`. The Level Secret is used to handle level deletions. Below you can find the endpoint which uses the Level Secret +> As of Geometry Dash 2.206, there are only 2 endpoints that use the `Level Secret`. The Level Secret is used to handle level deletions. Below you can find the 2 endpoints which use the Level Secret
Endpoints @@ -103,11 +106,12 @@ +
Endpoint
http://www.boomlings.com/database/deleteGJLevelUser20.php
http://www.boomlings.com/database/deleteGJLevelList.php
**

Mod Secret

** -> As of Geometry Dash 2.113, there are only 2 endpoints which use the `Mod Secret`. These endpoints allow hand-picked users called moderators to send in-game levels to the server which then have a chance to earn a star rating. Below are the endpoints in question. +> As of Geometry Dash 2.206, there are only 2 endpoints which use the `Mod Secret`. These endpoints allow hand-picked users called moderators to send in-game levels to the server which then have a chance to earn a star rating. Below are the endpoints in question.
Endpoints @@ -164,4 +168,4 @@ A Secret is split into 5 components and can be divided as such: `x|xxx|xxxx|xx|x - **The fifth component seems to be overall power the endpoints have.** `3` being able to submit data that can greatly affect in-game levels `7` being able to perform general activities on the server - `9` being able to alter accounts and remove levels from the server \ No newline at end of file + `9` being able to alter accounts and remove levels from the server From d01d2e3d72697e1a3bca7d389b4bc22a61112a28 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 01:49:16 +0300 Subject: [PATCH 246/389] Update colour_tags.css --- docs/stylesheets/colour_tags.css | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/stylesheets/colour_tags.css b/docs/stylesheets/colour_tags.css index a1fd81d2f..1959dbf7e 100644 --- a/docs/stylesheets/colour_tags.css +++ b/docs/stylesheets/colour_tags.css @@ -30,6 +30,26 @@ cp { color: #FF00FF; } +ca { + color: #9632FF; +} + +cd { + color: #FF96FF; +} + +cc { + color: #FFFF96; +} + +cf { + color: #96FFFF; +} + +cs { + color: #FFDC41; +} + ccDefault { color: #FF0000; -} \ No newline at end of file +} From 92be1618abe2c60825d92757199c13c90b967f12 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 02:03:12 +0300 Subject: [PATCH 247/389] Update tags.md --- docs/topics/tags.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 5f03cb69b..3c511896d 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -34,15 +34,15 @@ | `` | `0xFFDC41` | Sample | | `Default` | `0xFF0000` | Sample | -## Instant Tags +## Instant/Fade Tags -> Instant Tags are used to render text on screen immediately without any delay. Similarly to colour tags, Instant tags have a start and end tag to denote which piece of text should appear instantly. +> Fade Tags are used to render text on screen with each character appearing slower/faster. Similarly to colour tags, Instant tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in hectoseconds, which is 1/100th of a second. You can omit the number and the text will appear instantly. -**Usage:** `WHAT???!` +**Usage:** `Freaky` ## Delay Tags -> Delay tags are used to create a delay before a specific string in dialog boxes. The game detects a Delay Tag if the string contains a ` Delay tags are used to create a delay before a specific string in dialog boxes. The game detects a Delay Tag if the string contains a `...` From 61d22c907ca5b01cabd853b62e522ab82d2ea8dd Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 02:08:17 +0300 Subject: [PATCH 248/389] Update tags.md --- docs/topics/tags.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 3c511896d..7a7d3e32e 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -1,10 +1,11 @@ # Tags -> Various text interfaces within the Geometry Dash client can be manipulated using special tags similar to markup languages such as `HTML.` Geometry Dash has 3 primary types of tags +> Various text interfaces within the Geometry Dash client can be manipulated using special tags similar to markup languages such as `HTML.` Geometry Dash has 4 primary types of tags - Colour Tags -- Instant Tags +- Instant/Fade Tags - Delay Tags +- Shake Tags ## Colour Tags From 4003580fe98d672f805cf96ec16fde9a40604254 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 02:19:26 +0300 Subject: [PATCH 249/389] Update tags.md --- docs/topics/tags.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 7a7d3e32e..f40319b6b 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -37,7 +37,7 @@ ## Instant/Fade Tags -> Fade Tags are used to render text on screen with each character appearing slower/faster. Similarly to colour tags, Instant tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in hectoseconds, which is 1/100th of a second. You can omit the number and the text will appear instantly. +> Fade Tags are used to fade in a block of text on screen instead of making it appear character by character. Similarly to colour tags, Instant tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in hectoseconds, which is 1/100th of a second. You can omit the number and the text will appear instantly. **Usage:** `Freaky` From 5c316823448b66173715d0d806d7a88aa6044b9e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 02:22:15 +0300 Subject: [PATCH 250/389] Update tags.md --- docs/topics/tags.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index f40319b6b..c98db6f28 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -3,7 +3,7 @@ > Various text interfaces within the Geometry Dash client can be manipulated using special tags similar to markup languages such as `HTML.` Geometry Dash has 4 primary types of tags - Colour Tags -- Instant/Fade Tags +- Fade Tags - Delay Tags - Shake Tags @@ -37,7 +37,7 @@ ## Instant/Fade Tags -> Fade Tags are used to fade in a block of text on screen instead of making it appear character by character. Similarly to colour tags, Instant tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in hectoseconds, which is 1/100th of a second. You can omit the number and the text will appear instantly. +> Fade Tags are used to fade in a block of text on screen instead of making it appear character by character. Similarly to colour tags, Fade tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in hectoseconds, which is 1/100th of a second. **Usage:** `Freaky` From 9728402abf881e574ea4dab26bd7942e7668370a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 02:23:29 +0300 Subject: [PATCH 251/389] Update tags.md --- docs/topics/tags.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index c98db6f28..fcb4f0a8a 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -58,6 +58,8 @@ - In 2.1, failing to add an end tag for Colour tags and Instant tags would result in the game crashing, but this was fixed in 2.2 +- In 2.1, the Fade tags actually made the block of text appear instantly, and so no number was required. To emulate the old behavior, you can use `` + - Only Colour tags are usable without modifying the client - via level descriptions and comment bans - The tags are defined within the `MultilineBitmapFont` class and are sometimes disabled within the create method using a bool From bc2e7ced1073c20b4ae59bfaa7b89dbe90b9e82b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 09:59:36 +0300 Subject: [PATCH 252/389] Update gamesave.md --- docs/resources/client/gamesave.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index d4acf1421..9c63fbf71 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -47,8 +47,8 @@ Your CCGameManager.dat File contains a lot of information regarding your account | bootups| integer | The ammount of times you have opened Geometry Dash | | hasRatedGame| Bool | if you have rated the game | | binaryVersion| integer | The Games Binary Version | -| resolution| integer | The games resolution? | -| texQuality| integer | how high the text quality is | +| resolution| integer | The games resolution | +| texQuality| integer | how high the text quality is (0 for Auto, 1 for Low, 2 for Medium and 3 for High) | | timeOffset| integer | music offset in milliseconds | | customFPSTarget| float | the FPS target value | | dpad01 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #1 | From b8d99ad41c78a6c49c81f97a25b66b5da4f86e5d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:02:04 +0300 Subject: [PATCH 253/389] Update gamesave.md --- docs/resources/client/gamesave.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 9c63fbf71..3b6df2d6f 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -56,6 +56,8 @@ Your CCGameManager.dat File contains a lot of information regarding your account | dpad03 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #3 | | dpad04 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #4 | | dpad05 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #5 | +| dpadLayout01 | [Platformer UI](/resources/client/gamesave/dpad.md) | Default UI? | +| dpadLayoutDual01 | [Platformer UI](/resources/client/gamesave/dpad.md) | 2 platformer UIs separated by `;`, then 2 gamepad placements, also separated by `;` | practiceOpacity | float | The opacity of the practice UI, from 0 to 1| | practicePosX | float | The X position of the practice UI | | practicePosY | float | The Y position of the practice UI | From 5acf196cc6dca39cad3d6f8df5a502065ee5b188 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:12:34 +0300 Subject: [PATCH 254/389] Update gamesave.md --- docs/resources/client/gamesave.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 3b6df2d6f..02bfc66b8 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -54,8 +54,8 @@ Your CCGameManager.dat File contains a lot of information regarding your account | dpad01 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #1 | | dpad02 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #2 | | dpad03 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #3 | -| dpad04 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #4 | -| dpad05 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #5 | +| dpad04 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #4, however it's missing the last 5 options | +| dpad05 | [Platformer UI](/resources/client/gamesave/dpad.md) | Platformer UI configuration #5, however it's missing the last 5 options | | dpadLayout01 | [Platformer UI](/resources/client/gamesave/dpad.md) | Default UI? | | dpadLayoutDual01 | [Platformer UI](/resources/client/gamesave/dpad.md) | 2 platformer UIs separated by `;`, then 2 gamepad placements, also separated by `;` | practiceOpacity | float | The opacity of the practice UI, from 0 to 1| From fe4bff54119b20d064f61817b2da6e6caa794525 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:26:08 +0300 Subject: [PATCH 255/389] Update id.md --- docs/topics/encryption/id.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/docs/topics/encryption/id.md b/docs/topics/encryption/id.md index c8bf5fcd8..374feaaef 100644 --- a/docs/topics/encryption/id.md +++ b/docs/topics/encryption/id.md @@ -31,7 +31,7 @@ def generate_rs(n: int) -> str: ## UUID [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) stands for Universally Unique IDentifier. -It has format of `aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeee` and is sent as `uuid` in requests. +It has format of `aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeee` and used to be sent as `uuid` in requests, but now the player ID (not to be confused with the account ID) is sent in its place instead. It can be randomly generated using our `generate_rs()` function: @@ -50,11 +50,10 @@ def generate_uuid(parts: [int] = (8, 4, 4, 4, 10)) -> str: ## UDID [UDID](https://en.wikipedia.org/wiki/UDID) is an abbreviation for Unique Device IDentifier that is sent as `udid` in requests. -It does not really have a defined format, -but frequently has structure like `Sxxx...` where `x` are digits, -or it is the same as PlayerID of a user. -Generating UDID should be simpler because we can just generate a random integer: +On Android, your UDID is generated by making a UUIDv4 from your SSAID (`Settings.Secure.ANDROID_ID`). However, there's a common bug with the SSAID returning the value `9774d56d682e549c` on multiple devices. If the SSAID matches that string, a random UUIDv4 is generated instead. This UUID is also generated in the Java part of the code. + +On Windows, the game tries to obtain either the thread or the process [SID](https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-security-identifiers) and removes all the dashes from it, which is a really long number starting with `S`. If it fails, the UDID is `NoUDID_`, followed by a random value from 0 to 1,000,000,000. @@ -65,7 +64,7 @@ import random def generate_udid(start: int = 100_000, end: int = 100_000_000) -> str: - return "S" + str(random.randint(start, end)) + return "S15" + str(random.randint(start, end)) + str(random.randint(start, end)) + str(random.randint(start, end)) + str(random.randint(start, end)) ``` From e59f754f67770716934ed17f62edce5fa0b7476e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:27:43 +0300 Subject: [PATCH 256/389] Update id.md --- docs/topics/encryption/id.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/encryption/id.md b/docs/topics/encryption/id.md index 374feaaef..9ed04f302 100644 --- a/docs/topics/encryption/id.md +++ b/docs/topics/encryption/id.md @@ -51,7 +51,7 @@ def generate_uuid(parts: [int] = (8, 4, 4, 4, 10)) -> str: [UDID](https://en.wikipedia.org/wiki/UDID) is an abbreviation for Unique Device IDentifier that is sent as `udid` in requests. -On Android, your UDID is generated by making a UUIDv4 from your SSAID (`Settings.Secure.ANDROID_ID`). However, there's a common bug with the SSAID returning the value `9774d56d682e549c` on multiple devices. If the SSAID matches that string, a random UUIDv4 is generated instead. This UUID is also generated in the Java part of the code. +On Android, your UDID is generated by making a UUIDv4 from your SSAID (`Settings.Secure.ANDROID_ID`). However, there's a common bug with the SSAID returning the value `9774d56d682e549c` on multiple devices. If the SSAID matches that string, a random UUIDv4 is generated instead. What's interesting is that the UDID on Android is one of the few parts of the Java code, so it's easily decompilable. On Windows, the game tries to obtain either the thread or the process [SID](https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/understand-security-identifiers) and removes all the dashes from it, which is a really long number starting with `S`. If it fails, the UDID is `NoUDID_`, followed by a random value from 0 to 1,000,000,000. From 4a3b57cab5a1f17dc813154cfd9f33b4080fbea8 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:36:19 +0300 Subject: [PATCH 257/389] Update robtop-cipher.md --- docs/topics/encryption/robtop-cipher.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/encryption/robtop-cipher.md b/docs/topics/encryption/robtop-cipher.md index dc6c9d48d..1e966b51b 100644 --- a/docs/topics/encryption/robtop-cipher.md +++ b/docs/topics/encryption/robtop-cipher.md @@ -1,6 +1,6 @@ # The RobTop Cipher The RobTop Cipher refers to the combination of Base64 (url-safe) + XOR used frequently within Geometry Dash as a form of encryption. -It is used within places such as passwords (GJP) or save data on Windows. +It is used within places such as vault codes, passwords before 2.2 (GJP) or save data on Windows. The cipher may utilise either the cycled or static variant of the XOR cipher depending on where the ciphertext originates from (such as save data or the encoded password). To find out which variant is used, you may consult the [key reference material](/reference/keys.md#xor-keys). From a7012b3f663d86550fc1ef1fd02f8939633f0489 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:38:22 +0300 Subject: [PATCH 258/389] Update AES.md --- docs/topics/encryption/AES.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/topics/encryption/AES.md b/docs/topics/encryption/AES.md index 8464be159..73e8e7cd9 100644 --- a/docs/topics/encryption/AES.md +++ b/docs/topics/encryption/AES.md @@ -8,10 +8,17 @@ - The key used by Geometry Dash is: + +- **Hexadecimal** ```md 69 70 75 39 54 55 76 35 34 79 76 5d 69 73 46 4d 68 35 40 3b 74 2e 35 77 33 34 45 32 52 79 40 7b ``` +- **Plaintext** + ``` + ipu9TUv54yv]isFMh5@;t.5w34E2Ry@{ + ``` + ## Padding - The plaintext data sometimes may not perfectly align and therefore, some padding is implemented From 03470dd960156ccbefe9feb0a17859f0d82dc155 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 10:39:26 +0300 Subject: [PATCH 259/389] Update localfiles_encrypt_decrypt.md --- docs/topics/localfiles_encrypt_decrypt.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/topics/localfiles_encrypt_decrypt.md b/docs/topics/localfiles_encrypt_decrypt.md index 75a1a5d18..7b3a38a4e 100644 --- a/docs/topics/localfiles_encrypt_decrypt.md +++ b/docs/topics/localfiles_encrypt_decrypt.md @@ -54,11 +54,16 @@ On MacOS, decryption is quite simpler. Saves are encrypted with -### **Plain** +### **Hexadecimal** + ```md + 69 70 75 39 54 55 76 35 34 79 76 5d 69 73 46 4d 68 35 40 3b 74 2e 35 77 33 34 45 32 52 79 40 7b + ``` + +### **Plaintext** + ``` + ipu9TUv54yv]isFMh5@;t.5w34E2Ry@{ + ``` -```plain -69 70 75 39 54 55 76 35 34 79 76 5d 69 73 46 4d 68 35 40 3b 74 2e 35 77 33 34 45 32 52 79 40 7b -``` ### **Python** From 806e1a6776a98ad4b093bcd5f3f0c06b8ca80d65 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 13:40:13 +0300 Subject: [PATCH 260/389] Update keys.md --- docs/reference/keys.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/reference/keys.md b/docs/reference/keys.md index 20ee85518..dc098beda 100644 --- a/docs/reference/keys.md +++ b/docs/reference/keys.md @@ -6,7 +6,7 @@ | Key | Usage | XOR Type | | :------ | :-------------------------- | :------- | -| `11` | Player Save Data | Static | +| `11` | Player Save Data | Singular | | `14251` | Player Messages | Cycled | | `19283` | Vault Codes | Cycled | | `19847` | Daily Challenges | Cycled | @@ -16,9 +16,10 @@ | `39673` | Level Leaderboard Integrity | Cycled | | `41274` | Level Integrity | Cycled | | `48291` | Load Data | Cycled | -| `58281` | Rating Integry | Cycled | +| `57709` | Music/SFX Library Secret | Cycled | +| `58281` | Rating Integrity | Cycled | | `59182` | Chest Rewards | Cycled | -| `85271` | Stat submission Integrity | Cycled | +| `85271` | Stat Submission Integrity | Cycled | ## XOR Types From 667655a7d527a6d4ce982d901dacf963da4e1d80 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:35:34 +0300 Subject: [PATCH 261/389] hashes wip --- docs/resources/server/hashes.md | 73 +++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/resources/server/hashes.md diff --git a/docs/resources/server/hashes.md b/docs/resources/server/hashes.md new file mode 100644 index 000000000..229acb6e8 --- /dev/null +++ b/docs/resources/server/hashes.md @@ -0,0 +1,73 @@ +# Hashes + +The hash is a segment commonly sent in requests, which is checked by the GD Client to ensure the validity of the request. This was added in 2.02 to combat GDPSes (GD Private Servers). + +The hash is commonly generated by adding some segments from the response all into one string, then adding a salt and SHA-1 hashing it. + +## getGJLevels + +For each level, add these segments: + +- The first digit of the level ID +- The last digit of the level ID +- The stars the level awards +- The amount of coins in the level +- 0 if the level has unverified coins, 1 if verified + +Salt: `xI25fpAapCQg` + +## downloadGJLevel + +This endpoint has 2 hashes, the first of which is generated differently from most of the hashes. + +### downloadGJLevel Hash 1 + +This hash is generated from the undecoded level string by splitting the level string into 40 equal segments and taking 40 characters evenly, then adding the salt and SHA-1 hashing the result. Here's a JS function that does just that: + +```js +function generateDownloadHash(levelString) { + if (levelString.length < 41) return sha1(`${levelString}xI25fpAapCQg`); + let hash = `????????????????????????????????????????xI25fpAapCQg`; + let m = Math.floor(levelString.length / 40); + let i = 40; + while (i) { + hash = hash.slice(0, --i) + levelString[i*m] + hash.slice(i+1); + } + return sha1(hash); +} +``` + +### downloadGJLevel Hash 2 + +Segments: + +- Player ID of the creator +- The stars the level awards +- 0 if the level is not demon, 1 if the level is demon +- The ID of the level +- 0 if the coins are unverified, 1 if verified +- The level's feature score. 0 if not featured +- The level's password (0 for no copy, 1 for free copy, and for any other password if the number is less than 1,000,000, add 1,000,000 to it) +- The level's daily number (if the level was never daily or you don't get a daily number from the response, just put 0) + +Salt: `xI25fpAapCQg` + +## getGJMapPacks + +For each pack, add these segments: + +- The first digit of the pack ID +- The last digit of the pack ID +- The stars the pack awards +- The coins the pack awards + +Salt: `xI25fpAapCQg` + +## getGJGauntlets + +For each gauntlet, add these segments: + +- The gauntlet ID +- The IDs of the levels in the gauntlet, separated by `,` + +Salt: `xI25fpAapCQg` From 0fcfbfa9a1970d8e6d4e45ddabe050b4dced46ad Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:40:25 +0300 Subject: [PATCH 262/389] Update hashes.md --- docs/resources/server/hashes.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/resources/server/hashes.md b/docs/resources/server/hashes.md index 229acb6e8..9e940b128 100644 --- a/docs/resources/server/hashes.md +++ b/docs/resources/server/hashes.md @@ -71,3 +71,7 @@ For each gauntlet, add these segments: - The IDs of the levels in the gauntlet, separated by `,` Salt: `xI25fpAapCQg` + +## getGJLevelLists + +This endpoint returns a hash, but since the GD client doesn't check it, the way to generate this hash is unknown. From 930648d7dc1ca61d842acf7060d2ca989460d2f8 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:40:52 +0300 Subject: [PATCH 263/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 803aee7fe..c321248a4 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -15,6 +15,7 @@ - [Comment](/resources/server/comment.md) - [Friend Request](/resources/server/friendrequest.md) - [Gauntlet](/resources/server/gauntlet.md) + - [Hashes](/resources/server/hashes.md) - [Leaderboard Score](/resources/server/leaderboardscore.md) - [Level](/resources/server/level.md) - [List](/resources/server/list.md) From 88e7cd740f74ce48622f54dd3184ff0ecfc1190a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:46:09 +0300 Subject: [PATCH 264/389] hashes!! yippee!!!! --- docs/endpoints/levels/getGJLevels21.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index 7b033881c..b43b0f738 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -127,7 +127,7 @@ where: - `total` - total number of levels for the query - `offset` - offset from which the current page starts - `amount` - number of levels per page (always 10 for the gd servers) -- `hash` is a hash of every level, see [Hashes](#) +- `hash` is a hash of every level, see [Hashes](/resources/server/hashes.md) If the request is not successful, it will return `-1` From 1441073807cef21caba1d0f49a97440baeab3af4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:46:42 +0300 Subject: [PATCH 265/389] hashes 2 --- docs/endpoints/levels/downloadGJLevel22.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/downloadGJLevel22.md b/docs/endpoints/levels/downloadGJLevel22.md index 57240bcab..c3e0a3f4d 100644 --- a/docs/endpoints/levels/downloadGJLevel22.md +++ b/docs/endpoints/levels/downloadGJLevel22.md @@ -42,7 +42,7 @@ Returns a [level object](/resources/server/level.md) along with 2 hashes. All of ``` where: - `{level}` is the level object -- `{hash1}` and `{hash2}` are integrity hashes the GD client uses to validate the response +- `{hash1}` and `{hash2}` are integrity [hashes](/resources/server/hashes.md) the GD client uses to validate the response - `{unk}` is always an empty string. It's unknown if this segment even exists or if the response is just split with 2 `#` characters. - `{songMetadata}` is the metadata of all the [songs](/resources/server/song.md) used in the level. - `{extraArtists}` is a key-value pair map of extra artists in the songs. It uses the following format: `{id},{name},{id},{name}...` From 6b302d0e334b60a4f106c1390db967c047caba7d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:47:09 +0300 Subject: [PATCH 266/389] Update downloadGJLevel22.md --- docs/endpoints/levels/downloadGJLevel22.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/downloadGJLevel22.md b/docs/endpoints/levels/downloadGJLevel22.md index c3e0a3f4d..2919a8e06 100644 --- a/docs/endpoints/levels/downloadGJLevel22.md +++ b/docs/endpoints/levels/downloadGJLevel22.md @@ -42,7 +42,7 @@ Returns a [level object](/resources/server/level.md) along with 2 hashes. All of ``` where: - `{level}` is the level object -- `{hash1}` and `{hash2}` are integrity [hashes](/resources/server/hashes.md) the GD client uses to validate the response +- `{hash1}` and `{hash2}` are integrity [hashes](/resources/server/hashes.md?id=downloadgjlevel) the GD client uses to validate the response - `{unk}` is always an empty string. It's unknown if this segment even exists or if the response is just split with 2 `#` characters. - `{songMetadata}` is the metadata of all the [songs](/resources/server/song.md) used in the level. - `{extraArtists}` is a key-value pair map of extra artists in the songs. It uses the following format: `{id},{name},{id},{name}...` From 8932c0c692d77e3c393fdb0574828a95cf4eaacd Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:50:40 +0300 Subject: [PATCH 267/389] Update getGJLevels21.md --- docs/endpoints/levels/getGJLevels21.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index b43b0f738..06ddfac59 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -127,7 +127,7 @@ where: - `total` - total number of levels for the query - `offset` - offset from which the current page starts - `amount` - number of levels per page (always 10 for the gd servers) -- `hash` is a hash of every level, see [Hashes](/resources/server/hashes.md) +- `hash` is a hash of every level, see [Hashes](/resources/server/hashes.md?id=getgjlevels) If the request is not successful, it will return `-1` From f98f45b63868099530a49788c1b903465573186d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:51:04 +0300 Subject: [PATCH 268/389] fnnuuy --- docs/endpoints/levels/getGJLevels21.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index 06ddfac59..b1e4af037 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -129,6 +129,7 @@ where: - `amount` - number of levels per page (always 10 for the gd servers) - `hash` is a hash of every level, see [Hashes](/resources/server/hashes.md?id=getgjlevels) + If the request is not successful, it will return `-1` From 71a60051406d677c64cc5cbeae597b7980a09082 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:51:53 +0300 Subject: [PATCH 269/389] Update getGJGauntlets21.md --- docs/endpoints/levels/getGJGauntlets21.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJGauntlets21.md b/docs/endpoints/levels/getGJGauntlets21.md index 718421d53..667a5b180 100644 --- a/docs/endpoints/levels/getGJGauntlets21.md +++ b/docs/endpoints/levels/getGJGauntlets21.md @@ -20,7 +20,7 @@ Gets the gauntlet levels. ## Response -A list of [gauntlet objects](/resources/server/gauntlet.md), separated by a pipe `|`. +A list of [gauntlet objects](/resources/server/gauntlet.md), separated by a pipe `|`, followed by a `#` and then a [hash](/resources/server/hashes.md?id=getgjgauntlets). ## Example From 744b7a20cac5c8f450b13036750b3f9cc8501bf9 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 14:53:59 +0300 Subject: [PATCH 270/389] Update getGJMapPacks21.md --- docs/endpoints/levels/getGJMapPacks21.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJMapPacks21.md b/docs/endpoints/levels/getGJMapPacks21.md index e0b75d4bd..9dc4c1cce 100644 --- a/docs/endpoints/levels/getGJMapPacks21.md +++ b/docs/endpoints/levels/getGJMapPacks21.md @@ -20,7 +20,15 @@ Gets the map packs. ## Response -A list of [map pack](/resources/server/mappack.md) objects, separated by a pipe `|`. +The response is formatted as follows: + +`packs#page#hash` + +where: + +- Packs is a list of [map pack](/resources/server/mappack.md) objects, separated by a pipe `| +- Page is the page data in this format: `{total packs}:{current offset}:{page size}` +- [Hash](/resources/server/hashes.md?id=getgjmappacks) used to validate the request by the GD client ## Example From 794f295c5142700bc89cba97f7b9969640d92eb1 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 15:42:17 +0300 Subject: [PATCH 271/389] Update hashes.md --- docs/resources/server/hashes.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/resources/server/hashes.md b/docs/resources/server/hashes.md index 9e940b128..6b60bc5ff 100644 --- a/docs/resources/server/hashes.md +++ b/docs/resources/server/hashes.md @@ -72,6 +72,12 @@ For each gauntlet, add these segments: Salt: `xI25fpAapCQg` +## getGJRewards + +The hash just takes the entire response string. + +Salt: `pC26fpYaQCtg` + ## getGJLevelLists This endpoint returns a hash, but since the GD client doesn't check it, the way to generate this hash is unknown. From c3d268ec31ab8290bf91278f0f80c40b693c93eb Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 15:42:46 +0300 Subject: [PATCH 272/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index 523e0508e..8ea7e9e9f 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -51,7 +51,7 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Maybe the amount of rewards claimed? - `rewardType` -This list is then [XOR](/topics/encryption/xor.md)'d and [URL-Safe Base64](/topics/encryption/base64.md) encoded. Then it is separated with its hash by a pipe `|`. It also has a random string of 5 characters appended to the front. +This list is then [XOR](/topics/encryption/xor.md)'d and [URL-Safe Base64](/topics/encryption/base64.md) encoded. Then it is separated with its [hash](/resources/server/hashes.md?id=getgjrewards) by a pipe `|`. It also has a random string of 5 characters appended to the front. ## Example From 4519d3f04f80fa395e7274473dd4656c794ad578 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 15:49:48 +0300 Subject: [PATCH 273/389] Update hashes.md --- docs/resources/server/hashes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/hashes.md b/docs/resources/server/hashes.md index 6b60bc5ff..1908f178f 100644 --- a/docs/resources/server/hashes.md +++ b/docs/resources/server/hashes.md @@ -74,7 +74,7 @@ Salt: `xI25fpAapCQg` ## getGJRewards -The hash just takes the entire response string. +The hash just takes the entire **undecoded** response string. Salt: `pC26fpYaQCtg` From f8f734adb7b37d1d161e299fcaa8411b16955766 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 15:52:47 +0300 Subject: [PATCH 274/389] Update salts.md --- docs/reference/salts.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/reference/salts.md b/docs/reference/salts.md index 8b4589c42..ca1c2af74 100644 --- a/docs/reference/salts.md +++ b/docs/reference/salts.md @@ -12,6 +12,7 @@ | `xI35fsAapCRg` | Update Profile Chk | | `yPg6pUrtWn0J` | Level Leaderboard Chk | | `ask2fpcaqCQ2` | Vault of Secrets & Chamber of Time Codes | +| `pC26fpYaQCtg` | getGJRewards hash | | `mI29fmAnxgTs` | [GJP2](/topics/gjp.md) | ## How Salts are used From 1c783c1de12173aa846d7061893946a5f17cfb70 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 18:44:11 +0300 Subject: [PATCH 275/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index 8ea7e9e9f..2d32cb63e 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -26,7 +26,7 @@ Gets the rewards from the chests. **uuid** - Seemingly a random number also used for identifying someone -**rewardType** - 1 for small chest, 2 for large chest. Defaults to 0 if left out +**rewardType** - 0 for getting info about the chests, 1 for small chest, 2 for large chest. Defaults to 0 if left out **r1** - A random 3-5 digit number @@ -45,7 +45,7 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Orbs - Diamonds - Shards (0 is Fire, 1 is Ice, 2 is Poison, 3 is Shadow, 4 is Lava, 10 is Earth, 11 is Blood, 12 is Metal, 13 is Light and 14 is Soul) - - Key (If it's not 0, give a key) + - Key (If it's not 0, give a key. The usual value is 6) - Large chest time remaining - Large chest's rewards in a comma separated list - Maybe the amount of rewards claimed? From d7823ed09f578f9e9104b0449629c0dfa525795c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 18:45:25 +0300 Subject: [PATCH 276/389] Update hashes.md --- docs/resources/server/hashes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/server/hashes.md b/docs/resources/server/hashes.md index 1908f178f..ac52f56ea 100644 --- a/docs/resources/server/hashes.md +++ b/docs/resources/server/hashes.md @@ -74,7 +74,7 @@ Salt: `xI25fpAapCQg` ## getGJRewards -The hash just takes the entire **undecoded** response string. +The hash just takes the entire **undecoded** response string (excluding the 5 characters appended to the front). Salt: `pC26fpYaQCtg` From 0bfe6d7f38baa4c821cf6fa95592da08eaa51f8b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:46:12 +0300 Subject: [PATCH 277/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index 2d32cb63e..cedcb8244 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -44,8 +44,8 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Small chest's rewards in a comma separated list - Orbs - Diamonds - - Shards (0 is Fire, 1 is Ice, 2 is Poison, 3 is Shadow, 4 is Lava, 10 is Earth, 11 is Blood, 12 is Metal, 13 is Light and 14 is Soul) - - Key (If it's not 0, give a key. The usual value is 6) + - Item 1 (1 is Fire, 2 is Ice, 3 is Poison, 4 is Shadow, 5 is Lava, 6 is key, 10 is Earth, 11 is Blood, 12 is Metal, 13 is Light and 14 is Soul) + - Item 2 - Large chest time remaining - Large chest's rewards in a comma separated list - Maybe the amount of rewards claimed? From 3cd6ea13e369c27d09552b910444271f04de5c4c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:46:26 +0300 Subject: [PATCH 278/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index cedcb8244..a572a2d8e 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -44,7 +44,7 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Small chest's rewards in a comma separated list - Orbs - Diamonds - - Item 1 (1 is Fire, 2 is Ice, 3 is Poison, 4 is Shadow, 5 is Lava, 6 is key, 10 is Earth, 11 is Blood, 12 is Metal, 13 is Light and 14 is Soul) + - Item 1 (1 is Fire, 2 is Ice, 3 is Poison, 4 is Shadow, 5 is Lava, 6 is Demon Key, 10 is Earth, 11 is Blood, 12 is Metal, 13 is Light and 14 is Soul) - Item 2 - Large chest time remaining - Large chest's rewards in a comma separated list From 1a93960d0d2e40e3a260c87ba4de5ccfa6d68522 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:59:03 +0300 Subject: [PATCH 279/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index a572a2d8e..e81c11db0 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -47,8 +47,9 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Item 1 (1 is Fire, 2 is Ice, 3 is Poison, 4 is Shadow, 5 is Lava, 6 is Demon Key, 10 is Earth, 11 is Blood, 12 is Metal, 13 is Light and 14 is Soul) - Item 2 - Large chest time remaining +- Amount of small chests claimed - Large chest's rewards in a comma separated list -- Maybe the amount of rewards claimed? +- Amount of large chests claimed - `rewardType` This list is then [XOR](/topics/encryption/xor.md)'d and [URL-Safe Base64](/topics/encryption/base64.md) encoded. Then it is separated with its [hash](/resources/server/hashes.md?id=getgjrewards) by a pipe `|`. It also has a random string of 5 characters appended to the front. From 1405bcf746ac17eef6bfe027aac4451d86e5715b Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 20:59:22 +0300 Subject: [PATCH 280/389] Update getGJRewards.md --- docs/endpoints/rewards/getGJRewards.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/rewards/getGJRewards.md b/docs/endpoints/rewards/getGJRewards.md index e81c11db0..4792115be 100644 --- a/docs/endpoints/rewards/getGJRewards.md +++ b/docs/endpoints/rewards/getGJRewards.md @@ -46,8 +46,8 @@ A list of attributes of the Rewards, separated by colons `:` as follows: - Diamonds - Item 1 (1 is Fire, 2 is Ice, 3 is Poison, 4 is Shadow, 5 is Lava, 6 is Demon Key, 10 is Earth, 11 is Blood, 12 is Metal, 13 is Light and 14 is Soul) - Item 2 -- Large chest time remaining - Amount of small chests claimed +- Large chest time remaining - Large chest's rewards in a comma separated list - Amount of large chests claimed - `rewardType` From 2c21ed0448c2c0ee04a37919d551624dc634c9a2 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:06:24 +0300 Subject: [PATCH 281/389] fixed formatting (looked ugly on the website) --- docs/topics/cdn_token.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/topics/cdn_token.md b/docs/topics/cdn_token.md index d74846040..bb59e7601 100644 --- a/docs/topics/cdn_token.md +++ b/docs/topics/cdn_token.md @@ -2,11 +2,11 @@ For both musiclibrary and sfxlibrary, there are 2 optional parameters that are sent by the GD client but are currently **not** required to receive the data. One still may want to implement these into their code for future-proofing. -> **`expires`** +- **`expires`** This is the UNIX timestamp (seconds) that is an hour later than the current timestamp. -> **`token`** +- **`token`** Tokens are generated this way (pseudocode): From bfa112f1f9263a0fc167a1daf552e106901c6fa8 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:06:47 +0300 Subject: [PATCH 282/389] that still looked ugly --- docs/topics/cdn_token.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/topics/cdn_token.md b/docs/topics/cdn_token.md index bb59e7601..89e896d5b 100644 --- a/docs/topics/cdn_token.md +++ b/docs/topics/cdn_token.md @@ -2,11 +2,11 @@ For both musiclibrary and sfxlibrary, there are 2 optional parameters that are sent by the GD client but are currently **not** required to receive the data. One still may want to implement these into their code for future-proofing. -- **`expires`** +#### `expires` This is the UNIX timestamp (seconds) that is an hour later than the current timestamp. -- **`token`** +#### `token` Tokens are generated this way (pseudocode): From d34e1404106f5bef60858887f92b8709c5128275 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:10:14 +0300 Subject: [PATCH 283/389] Update hashes.md --- docs/resources/server/hashes.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/resources/server/hashes.md b/docs/resources/server/hashes.md index ac52f56ea..2849ac75f 100644 --- a/docs/resources/server/hashes.md +++ b/docs/resources/server/hashes.md @@ -72,10 +72,16 @@ For each gauntlet, add these segments: Salt: `xI25fpAapCQg` -## getGJRewards +## getGJChallenges The hash just takes the entire **undecoded** response string (excluding the 5 characters appended to the front). +Salt: `oC36fpYaPtdg` + +## getGJRewards + +The hash is generated the same way as getGJChallenges, with the exception of a different salt. + Salt: `pC26fpYaQCtg` ## getGJLevelLists From 7a6b64ab61e4845d2093dcc1beb526a70f94fb98 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:10:33 +0300 Subject: [PATCH 284/389] Update salts.md --- docs/reference/salts.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/reference/salts.md b/docs/reference/salts.md index ca1c2af74..fcde94c7c 100644 --- a/docs/reference/salts.md +++ b/docs/reference/salts.md @@ -12,6 +12,7 @@ | `xI35fsAapCRg` | Update Profile Chk | | `yPg6pUrtWn0J` | Level Leaderboard Chk | | `ask2fpcaqCQ2` | Vault of Secrets & Chamber of Time Codes | +| `oC36fpYaPtdg` | getGJChallenges hash | | `pC26fpYaQCtg` | getGJRewards hash | | `mI29fmAnxgTs` | [GJP2](/topics/gjp.md) | From 494b420973644393425b42d1757e4284a54e6c9f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:11:06 +0300 Subject: [PATCH 285/389] Update getGJChallenges.md --- docs/endpoints/rewards/getGJChallenges.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/rewards/getGJChallenges.md b/docs/endpoints/rewards/getGJChallenges.md index 3c2522604..1327a52ab 100644 --- a/docs/endpoints/rewards/getGJChallenges.md +++ b/docs/endpoints/rewards/getGJChallenges.md @@ -46,7 +46,7 @@ A list of attributes of the quests, separated by colons `:` as follows: - Second quest's attributes in a comma separated list - Third quest's attributes in a comma separated list -This list is then [XOR](/topics/encryption/xor.md)'d and [URL-Safe Base64](/topics/encryption/base64.md) encoded. Then it is separated with its hash by a pipe `|`. It also has a random string of 5 characters appended to the front. +This list is then [XOR](/topics/encryption/xor.md)'d and [URL-Safe Base64](/topics/encryption/base64.md) encoded. Then it is separated with its [hash](/resources/server/hashes.md?id-getgjchallenges) by a pipe `|`. It also has a random string of 5 characters appended to the front. ## Example From 295ec1f3e11a1aae5891c2645a9549c178fbe128 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:12:34 +0300 Subject: [PATCH 286/389] Update getSaveData.md --- docs/endpoints/misc/getSaveData.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/misc/getSaveData.md b/docs/endpoints/misc/getSaveData.md index 68992c0e9..c0f59174b 100644 --- a/docs/endpoints/misc/getSaveData.md +++ b/docs/endpoints/misc/getSaveData.md @@ -18,7 +18,7 @@ Unknown ## Response -Returns seemingly random [urlsafe base64](/topics/encryption/base64.md) encoded text +Used to return seemingly random [urlsafe base64](/topics/encryption/base64.md) encoded text, but as of 2.2 just returns nothing. The base64 text can be found below ## Example From 54e445cbcaff346e205864a6c835629b5edc4eb4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:21:02 +0300 Subject: [PATCH 287/389] Update requestUserAccess.md --- docs/endpoints/misc/requestUserAccess.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/misc/requestUserAccess.md b/docs/endpoints/misc/requestUserAccess.md index 05e0f1814..11fd6b0b3 100644 --- a/docs/endpoints/misc/requestUserAccess.md +++ b/docs/endpoints/misc/requestUserAccess.md @@ -22,7 +22,7 @@ Requests moderator access ## Response -1 if granted, -1 if not +1 if granted Moderator, 2 if granted Elder Moderator, -1 if not granted ## Example From 38db827297e87b184b78fed0e69aeaa354d9df37 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 00:37:48 +0300 Subject: [PATCH 288/389] two gv's (use nearby as reference and dont delete) --- docs/resources/client/gamesave/gv.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 6882091ec..cd5d4f8bd 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -121,6 +121,8 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0128 | Lock Cursor In-Game | | gv_0129 | Disable Portal Labels | | gv_0130 | Enable Orb Labels | +| gv_0131 | Use Nearby as Reference (smart template) | +| gv_0132 | Dont Delete (smart template) | | gv_0134 | Hide Attempts | | gv_0135 | Hide Attempts in Practice Mode | | gv_0137 | Hide Particle Icons (editor) | From ac549119997fb4debb814a8ca2558b4f23f11533 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 00:44:13 +0300 Subject: [PATCH 289/389] Update gv.md --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index cd5d4f8bd..ba90d0876 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -138,6 +138,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0152 | Hide Path (editor) | | gv_0155 | Disable Shader Anti-Aliasing | | gv_0156 | Disable Paste State Groups (editor) | +| gv_0157 | Level Upload Guidelines Shown | | gv_0158 | Preview Shaders (editor) | | gv_0159 | Audio Fix 01 | | gv_0163 | Enable Quick Keys | From 652eb256440a3741fbfd7b3c21107d1960c371e0 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 00:50:11 +0300 Subject: [PATCH 290/389] Update gv.md --- docs/resources/client/gamesave/gv.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index ba90d0876..6a3610d4f 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -136,6 +136,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0150 | Auto Pause on Test (editor) | | gv_0151 | Start Optimization (editor) | | gv_0152 | Hide Path (editor) | +| gv_0153 | Explode Player on Death | | gv_0155 | Disable Shader Anti-Aliasing | | gv_0156 | Disable Paste State Groups (editor) | | gv_0157 | Level Upload Guidelines Shown | From 95e90ba3317fe5db74d30c8a6831fe2adb057ed0 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 01:02:52 +0300 Subject: [PATCH 291/389] Update gv.md --- docs/resources/client/gamesave/gv.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 6a3610d4f..fe704c074 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -125,6 +125,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0132 | Dont Delete (smart template) | | gv_0134 | Hide Attempts | | gv_0135 | Hide Attempts in Practice Mode | +| gv_0136 | Enable Extra LDM | | gv_0137 | Hide Particle Icons (editor) | | gv_0140 | Disable Orb Scale | | gv_0141 | Disable Trigger Orb Scale | @@ -149,6 +150,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0169 | Small Warp Buttons (editor) | | gv_0170 | Borderless Fullscreen | | gv_0171 | Disable Player Hitbox | +| gv_0172 | Disable Shake (2.2) | | gv_0173 | Ignore Damage (playtesting outside of editor) | | gv_0174 | Hide Playtest Text | From 09c48abc7b363859e62f44d0cf5f89cc25d0ab0e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 01:10:48 +0300 Subject: [PATCH 292/389] there are gv's related to sfx library --- docs/resources/client/gamesave/gv.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index fe704c074..d67af0634 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -133,6 +133,8 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0144 | Audio Visualizer | | gv_0145 | Show Time | | gv_0146 | Disable Checkpoints | +| gv_0147 | Search Folder Name (SFX Library) | +| gv_0148 | Compact Mode (SFX Library) | | gv_0149 | Show Clicks (editor) | | gv_0150 | Auto Pause on Test (editor) | | gv_0151 | Start Optimization (editor) | From de2ec9ae6fe3fd2861e73f28192dbbc3d2eb2190 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 01:15:36 +0300 Subject: [PATCH 293/389] the last gv's? --- docs/resources/client/gamesave/gv.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index d67af0634..5ef7254b2 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -146,6 +146,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0158 | Preview Shaders (editor) | | gv_0159 | Audio Fix 01 | | gv_0163 | Enable Quick Keys | +| gv_0164 | Level Leaderboard Mode | | gv_0166 | Show Hitboxes (in practice mode) | | gv_0167 | Confirm Exit | | gv_0168 | Fast Menu | @@ -217,3 +218,5 @@ Unlocked Game Variables (ugv) are used to check if ingame events have been compl | 0087 | **False** || | 0114 | **True** | Used in `PlayerObject` (**2019 Leak**) | | 0120 | **True** | Shown in RobTop's 2020 Twitch Streams | +| 0133 | **True** | Something related to some editor filter | +| 0139 | **True** | Something related to some editor filter | From ae64b1e504c904fc1f29603a8f8a57836404de98 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 01:18:33 +0300 Subject: [PATCH 294/389] The End? --- docs/resources/client/gamesave/gv.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 5ef7254b2..714c9c721 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -123,10 +123,12 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0130 | Enable Orb Labels | | gv_0131 | Use Nearby as Reference (smart template) | | gv_0132 | Dont Delete (smart template) | +| gv_0133 | Group ID Filter (editor) | | gv_0134 | Hide Attempts | | gv_0135 | Hide Attempts in Practice Mode | | gv_0136 | Enable Extra LDM | | gv_0137 | Hide Particle Icons (editor) | +| gv_0139 | Color Channel Filter (editor) | | gv_0140 | Disable Orb Scale | | gv_0141 | Disable Trigger Orb Scale | | gv_0142 | Reduce Audio Quality | @@ -218,5 +220,3 @@ Unlocked Game Variables (ugv) are used to check if ingame events have been compl | 0087 | **False** || | 0114 | **True** | Used in `PlayerObject` (**2019 Leak**) | | 0120 | **True** | Shown in RobTop's 2020 Twitch Streams | -| 0133 | **True** | Something related to some editor filter | -| 0139 | **True** | Something related to some editor filter | From 0288db8f7c06c39eb0cca75f042725437386c571 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:17:06 +0300 Subject: [PATCH 295/389] Update keys.md --- docs/reference/keys.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/reference/keys.md b/docs/reference/keys.md index dc098beda..e9314bcac 100644 --- a/docs/reference/keys.md +++ b/docs/reference/keys.md @@ -16,6 +16,7 @@ | `39673` | Level Leaderboard Integrity | Cycled | | `41274` | Level Integrity | Cycled | | `48291` | Load Data | Cycled | +| `52832` | Multiplayer | Cycled | | `57709` | Music/SFX Library Secret | Cycled | | `58281` | Rating Integrity | Cycled | | `59182` | Chest Rewards | Cycled | From 7aa36fb45a7127dc1e146cf946105627f199d977 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:17:35 +0300 Subject: [PATCH 296/389] Update xor.md --- docs/topics/encryption/xor.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/topics/encryption/xor.md b/docs/topics/encryption/xor.md index 354348a00..79e6b8caa 100644 --- a/docs/topics/encryption/xor.md +++ b/docs/topics/encryption/xor.md @@ -51,6 +51,7 @@ for (i = 0; i < input.length; i++) { | `39673` | Level Leaderboard Integrity | Cycled | | `41274` | Level Integrity | Cycled | | `48291` | Load Data | Cycled | +| `52832` | Multiplayer | Cycled | | `57709` | Music/SFX Library Secret | Cycled | | `58281` | Rating Integrity | Cycled | | `59182` | Chest Rewards | Cycled | From 58fd89ad49d9ae245477f6cb41f6b2783a1a81eb Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:20:13 +0300 Subject: [PATCH 297/389] Update secrets.md --- docs/reference/secrets.md | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/docs/reference/secrets.md b/docs/reference/secrets.md index a984410a9..6ab2294cc 100644 --- a/docs/reference/secrets.md +++ b/docs/reference/secrets.md @@ -6,13 +6,13 @@ ### Table of Secrets -| Secret | Type | -|:--------------|:--------| -| `Wmfd2893gb7` | Common | -| `Wmfv3899gc9` | Account | -| `Wmfv2898gc9` | Level | -| `Wmfp3879gc3` | Mod | -| `Wmfx2878gb9` | Admin | +| Secret | Type | +|:--------------|:-----------| +| `Wmfd2893gb7` | Common | +| `Wmfv3899gc9` | Account/MP | +| `Wmfv2898gc9` | Level | +| `Wmfp3879gc3` | Mod | +| `Wmfx2878gb9` | Admin | ### Secret Types **As of Geometry Dash version 2.206, there are 4 *publicly* known secrets** @@ -81,7 +81,7 @@
**

Account Secret

** -> As of Geometry Dash 2.206, there are 5 endpoints which use the `Account Secret`. The Account Secret was created for endpoints that deal with important account features such as save data and privacy settings. Below is a table of each endpoint which uses the Account Secret. +> As of Geometry Dash 2.206, there are 5 endpoints which use the `Account Secret`. The Account Secret was created for endpoints that deal with important account features such as save data and privacy settings. However, some unused code in 2.2 also reveals that the secret could be used for the upcoming multiplayer mode, however this is subject to change. Below is a table of each endpoint which uses the Account Secret.
Endpoints @@ -97,6 +97,18 @@
+
+Known Multiplayer Endpoints + + + + + + +
Endpoint
http://www.boomlings.com/database/exitMPLobby.php
http://www.boomlings.com/database/joinMPLobby.php
http://www.boomlings.com/database/uploadMPComment.php
+ +
+ **

Level Secret

** > As of Geometry Dash 2.206, there are only 2 endpoints that use the `Level Secret`. The Level Secret is used to handle level deletions. Below you can find the 2 endpoints which use the Level Secret From 1e4f6f18d243d54651010558d0d9ff823919b047 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:35:56 +0300 Subject: [PATCH 298/389] Create uploadMPComment.md --- docs/endpoints/multiplayer/uploadMPComment.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 docs/endpoints/multiplayer/uploadMPComment.md diff --git a/docs/endpoints/multiplayer/uploadMPComment.md b/docs/endpoints/multiplayer/uploadMPComment.md new file mode 100644 index 000000000..c5656ed4c --- /dev/null +++ b/docs/endpoints/multiplayer/uploadMPComment.md @@ -0,0 +1,35 @@ +# uploadMPComment.php + +> Note: everything here is based on leaks, unused code and educated guesses. As such, everything you see here is subject to change, and most likely **will** be changed! + +Uploads a comment (chat message?) to a multiplayer lobby. This endpoint is hosted on `geometrydash.com`, not `boomlings.com`. + +## Parameters + +### Required Parameters + +**accountID** - The commenter's account ID + +**gjp2** - The commenter's [GJP2](/topics/encryption/gjp.md) + +**extra** - 10 random characters from `[A-Za-z0-9]` + +**comment** - The comment, with some delimiter characters stripped out + +**secret** - Wmfv3899gc9 + +**gameID** - The ID of the multiplayer lobby + +[**chk**](/topics/encryption/chk) - `accountID` + `comment` + `gameID` + `extra` + +### Optional Parameters + +**gameVersion** - 22 + +**binaryVersion** - 42 + +**gdw** - 0 + +## Response + +Currently unknown, but most likely the comment ID if it was posted and -1 if the request was rejected. From 4f9383a653691f3b55eac49f2fe0d770afdfe6ba Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:37:42 +0300 Subject: [PATCH 299/389] Create joinMPLobby.md --- docs/endpoints/multiplayer/joinMPLobby.md | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/endpoints/multiplayer/joinMPLobby.md diff --git a/docs/endpoints/multiplayer/joinMPLobby.md b/docs/endpoints/multiplayer/joinMPLobby.md new file mode 100644 index 000000000..b684dd9bc --- /dev/null +++ b/docs/endpoints/multiplayer/joinMPLobby.md @@ -0,0 +1,31 @@ +# joinMPLobby.php + +> Note: everything here is based on leaks, unused code and educated guesses. As such, everything you see here is subject to change, and most likely **will** be changed! + +Joins a multiplayer lobby. This endpoint is hosted on `geometrydash.com`, not `boomlings.com`. + +## Parameters + +### Required Parameters + +**accountID** - The commenter's account ID + +**gjp2** - The commenter's [GJP2](/topics/encryption/gjp.md) + +**secret** - Wmfv3899gc9 + +**gameID** - The ID of the multiplayer lobby + +**lastCommentID** - Your last multiplayer comment ID + +### Optional Parameters + +**gameVersion** - 22 + +**binaryVersion** - 42 + +**gdw** - 0 + +## Response + +Currently unknown, but most likely 1 if successful and -1 if the request was rejected. From 3af49ffd75c3b8c8465fb7e436f63749e2697dbb Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:38:47 +0300 Subject: [PATCH 300/389] Create exitMPLobby.md --- docs/endpoints/multiplayer/exitMPLobby.md | 29 +++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/endpoints/multiplayer/exitMPLobby.md diff --git a/docs/endpoints/multiplayer/exitMPLobby.md b/docs/endpoints/multiplayer/exitMPLobby.md new file mode 100644 index 000000000..e5bae29b9 --- /dev/null +++ b/docs/endpoints/multiplayer/exitMPLobby.md @@ -0,0 +1,29 @@ +# exitMPLobby.php + +> Note: everything here is based on leaks, unused code and educated guesses. As such, everything you see here is subject to change, and most likely **will** be changed! + +Exits from a multiplayer lobby. This endpoint is hosted on `geometrydash.com`, not `boomlings.com`. + +## Parameters + +### Required Parameters + +**accountID** - The player's account ID + +**gjp2** - The player's [GJP2](/topics/encryption/gjp.md) + +**secret** - Wmfv3899gc9 + +**gameID** - The ID of the multiplayer lobby + +### Optional Parameters + +**gameVersion** - 22 + +**binaryVersion** - 42 + +**gdw** - 0 + +## Response + +Currently unknown, but most likely 1 if successful and -1 if the request was rejected. From 841198cf9d015561518e925884ba07acbda5e3e7 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:39:19 +0300 Subject: [PATCH 301/389] Update joinMPLobby.md --- docs/endpoints/multiplayer/joinMPLobby.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/multiplayer/joinMPLobby.md b/docs/endpoints/multiplayer/joinMPLobby.md index b684dd9bc..2052c0cf9 100644 --- a/docs/endpoints/multiplayer/joinMPLobby.md +++ b/docs/endpoints/multiplayer/joinMPLobby.md @@ -8,15 +8,15 @@ Joins a multiplayer lobby. This endpoint is hosted on `geometrydash.com`, not `b ### Required Parameters -**accountID** - The commenter's account ID +**accountID** - The player's account ID -**gjp2** - The commenter's [GJP2](/topics/encryption/gjp.md) +**gjp2** - The player's [GJP2](/topics/encryption/gjp.md) **secret** - Wmfv3899gc9 **gameID** - The ID of the multiplayer lobby -**lastCommentID** - Your last multiplayer comment ID +**lastCommentID** - Your last multiplayer comment ID. It's unknown what the initial value is ### Optional Parameters From bc39df9a21f7b76045e2d0bed365756b4ceb343a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:41:12 +0300 Subject: [PATCH 302/389] Update chk.md --- docs/topics/encryption/chk.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/topics/encryption/chk.md b/docs/topics/encryption/chk.md index 9e2125390..0c8ec7603 100644 --- a/docs/topics/encryption/chk.md +++ b/docs/topics/encryption/chk.md @@ -195,6 +195,13 @@ For example, `0%` - `13%` - `100%` -> `(13 - 0), (100 - 13)` -> `13,87` - TimelyID - [RS](topics/encryption/id.md?id=rs) +## Upload Multiplayer Comment + +- AccountID +- Comment +- GameID +- Extra + ## Salts | Value | Type | From a86e5667719d3c60196b8d9b1cb72724b1ca2119 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:42:58 +0300 Subject: [PATCH 303/389] Update _sidebar.md --- docs/_sidebar.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index c321248a4..e8bc8aafd 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -80,6 +80,10 @@ - [deleteGJLevelList](/endpoints/lists/deleteGJLevelList.md) - [getGJLevelLists](/endpoints/lists/getGJLevelLists.md) - [uploadGJLevelList](/endpoints/lists/uploadGJLevelList.md) +**Multiplayer** + - [exitMPLobby](/endpoints/multiplayer/exitMPLobby.md) + - [joinMPLobby](/endpoints/multiplayer/joinMPLobby.md) + - [uploadMPComment](/endpoints/multiplayer/uploadMPComment.md) **Comments** - [deleteGJAccComment20](/endpoints/comments/deleteGJAccComment20.md) - [deleteGJComment20](/endpoints/comments/deleteGJComment20.md) From 1cfcfccfbc4db94891694d96c8392f335de181b6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 17:43:19 +0300 Subject: [PATCH 304/389] Update joinMPLobby.md --- docs/endpoints/multiplayer/joinMPLobby.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/multiplayer/joinMPLobby.md b/docs/endpoints/multiplayer/joinMPLobby.md index 2052c0cf9..e8cc6c22f 100644 --- a/docs/endpoints/multiplayer/joinMPLobby.md +++ b/docs/endpoints/multiplayer/joinMPLobby.md @@ -28,4 +28,4 @@ Joins a multiplayer lobby. This endpoint is hosted on `geometrydash.com`, not `b ## Response -Currently unknown, but most likely 1 if successful and -1 if the request was rejected. +Currently unknown, but most likely some info about the lobby if successful and -1 if the request was rejected. From 2e60a5345db29e9c9da445678bf3fbfec2460be6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 21:15:05 +0300 Subject: [PATCH 305/389] Update chk.md --- docs/topics/encryption/chk.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/topics/encryption/chk.md b/docs/topics/encryption/chk.md index 0c8ec7603..e678eb956 100644 --- a/docs/topics/encryption/chk.md +++ b/docs/topics/encryption/chk.md @@ -165,14 +165,14 @@ Random number consisting of *5* digits. - Attempts - Seed -Seed can be generated like this: +Seed for classic levels can be generated like this: ### **Python** ```py -def generate_leaderboard_seed( +def generate_classic_leaderboard_seed( jumps: int, percentage: int, seconds: int, has_played: bool = True ) -> int: @@ -185,6 +185,20 @@ def generate_leaderboard_seed( +For platformer levels: + + + +### **Python** + +```py +def generatePlatformerHash(bestTime, bestPoints): + number = (((bestTime + 7890) % 34567) * 601 + (((bestPoints) + 3456) % 78901) * 967 + 94819) % 94433 + return ((number ^ number >> 16) * 829) % 77849 +``` + + + - Best Differences For example, `0%` - `13%` - `100%` -> `(13 - 0), (100 - 13)` -> `13,87` From cf96c04ff106d18a4f03170ae58c3f3a296a0bed Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 21:35:11 +0300 Subject: [PATCH 306/389] Update level.md --- docs/resources/client/level.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 3c2545b0a..4d56d408f 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -94,10 +94,24 @@ A level is a playable object in Geometry Dash, namely coming with data that expl | k108 | Best Points | **integer** | Your point highscore on the level | | k109 | Local Best Times | **integer** | List of your best times on the level in milliseconds, separated by `,` | | k110 | Local Best Points | **integer** | List of your point highscores on the level, separated by `,` | -| k111 | Platformer Hash | **integer** | Hash for platformer completions, see below for code | +| k111 | Platformer Seed | **integer** | Checksum for platformer completions, see below for code | | k112 | No Shake | **bool** | Whether the player has disabled shake for this level | -The platformer hash is generated like this: +The classic level seed is generated like this (please note you need to add another `1482` when submitting the level score): + +```py +def generate_classic_leaderboard_seed( + jumps: int, percentage: int, seconds: int, has_played: bool = True +) -> int: + + return ( + 1482 * has_played + + (jumps + 3991) * (percentage + 8354) + + ((seconds + 4085) ** 2) - 50028039 + ) +``` + +The platformer seed is generated like this: ```py def generatePlatformerHash(bestTime, bestPoints): From 1a530f3cb14d1a18df1fb1fc02af3c3e73cf1829 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 22:20:33 +0300 Subject: [PATCH 307/389] Create particle-string.md --- .../level-components/particle-string.md | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 docs/resources/client/level-components/particle-string.md diff --git a/docs/resources/client/level-components/particle-string.md b/docs/resources/client/level-components/particle-string.md new file mode 100644 index 000000000..cdcc9660b --- /dev/null +++ b/docs/resources/client/level-components/particle-string.md @@ -0,0 +1,86 @@ +# Particle String + +The particle string is a long string of values separated by the `a` character that defines how particle systems in-game such as the particle object behave. Here is an example of a particle string: + +``` +30a-1a1.3a0.2a20a90a0a10a5a20a20a0a0a8a0a0a0a4a1a0a0a0a0a1a0a1a0a1a0a1a1a0a0a0 a0a0.784314a0a1a0a1a0a0.27a0a0.27a0a0a0a0a0a0a0a0a2a1a0a0a0a0a0a0a0.25a0a0a0a0a0a0a0a0a0a0a0 +``` + +(this is the particle string of the particles around the Mythic rating fire) + +## The Values + +| Index | Name | Description | +| :-----| :------------------------| :------------------------------------------------------------------------| +| 1 | Max Particles | The maximum number of particles to be generated | +| 2 | Duration | The animation duration. `-1` for indefinite | +| 3 | Lifetime | How long the particles last. `-1` for indefinite | +| 4 | Lifetime +- | Random offset for Lifetime | +| 5 | Emission | Particle spawn rate. `-1` for max | +| 6 | Angle | In what direction the particles are generated towards | +| 7 | Angle +- | Random offset for Angle | +| 8 | Speed | How fast the particles are | +| 9 | Speed +- | Random offset for Speed | +| 10 | PosVar X | The horizontal particle spawn area | +| 11 | PosVar Y | The vertical particle spawn area | +| 12 | Gravity X | The horizontal gravitational pull | +| 13 | Gravity Y | The vertical gravitational pull | +| 14 | AccelRad | Radial particle acceleration | +| 15 | AccelRad +- | Random offset for AccelRad | +| 16 | AccelTan | Tangential particle acceleration | +| 17 | AccelTan +- | Random offset for AccelTan | +| 18 | StartSize | The scale the particles start at | +| 19 | StartSize +- | Random offset for StartSize | +| 20 | StartSpin | The rotation of the particles when they spawn | +| 21 | StartSpin +- | Random offset for StartSpin | +| 22 | StartR | The red color value the particles start at | +| 23 | StartR +- | Random offset for StartR | +| 24 | StartG | The green color value the particles start at | +| 25 | StartG +- | Random offset for StartG | +| 26 | StartB | The blue color value the particles start at | +| 27 | StartB +- | Random offset for StartB | +| 28 | StartA | The opacity the particles start at | +| 29 | StartA +- | Random offset for StartA | +| 30 | EndSize | The scale the particles end at | +| 31 | EndSize +- | Random offset for EndSize | +| 32 | EndSpin | The rotation of the particles at the end of their lifetime | +| 33 | EndSpin +- | Random offset for EndSpin | +| 34 | EndR | The red color value the particles end at | +| 35 | EndR +- | Random offset for EndR | +| 36 | EndG | The green color value the particles end at | +| 37 | EndG +- | Random offset for EndG | +| 38 | EndB | The blue color value the particles end at | +| 39 | EndB +- | Random offset for EndB | +| 40 | EndA | The opacity the particles end at | +| 41 | EndA +- | Random offset for EndA | +| 42 | Fade in | Fade time for particles to appear | +| 43 | Fade in +- | Random offset for Fade in | +| 44 | Fade out | Fade time for particles to disappear | +| 45 | Fade out +- | Random offset for Fade out | +| 46 | StartRad | Start radius of the particles | +| 47 | StartRad +- | Random offset for StartRad | +| 48 | EndRad | End radius of the particles | +| 49 | EndRad +- | Random offset for EndRad | +| 50 | RotSec | Rotation per second | +| 51 | RotSec +- | Random offset for RotSec | +| 52 | Mode | 0 for Gravity, 1 for Radius | +| 53 | Mode 2 | 0 for Free, 1 for Relative, 2 for Grouped | +| 54 | Additive | Whether the particles color is blending or not | +| 55 | Start spin = end | Whether the particles have the same rotation through their lifetime | +| 56 | Start rot is dir | Whether the particles' direction will be their starting rotation | +| 57 | Dynamic rotation | Whether particles rotate towards the direction they are going towards | +| 58 | Texture | The particle texture. 0 for Square, and the ID matches the order in the particle object | +| 59 | Uniform obj color | Whether the particles color is the same through their lifetime | +| 60 | FrictionP | Particle friction | +| 61 | FrictionP +- | Random offset for FrictionP | +| 62 | Respawn | Particle respawning rate | +| 63 | Respawn +- | Random offset for Respawn | +| 64 | Order Sensitive | The newest particles are layered on top of the older ones | +| 65 | Start size = end | Whether the particles have the same size through their lifetime | +| 66 | Start rad = end | Whether the particles have the same radius through their lifetime | +| 67 | StartRGB Var Sync | Whether to sync the Start R/G/B values | +| 68 | EndRGB Var Sync | Whether to sync the End R/G/B values | +| 69 | FrictionS | Particle speed friction | +| 70 | FrictionS +- | Random offset for FrictionS | +| 71 | FrictionR | Particle rotation friction | +| 72 | FrictionR +- | Random offset for FrictionR | From cde3dd710abd54639ab5e936a630f8f5955a7dff Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 22:21:10 +0300 Subject: [PATCH 308/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index e8bc8aafd..c7db86f3c 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -45,6 +45,7 @@ - [Level Object](/resources/client/level-components/level-object.md) - [Color String](/resources/client/level-components/color-string.md) - [Guideline String](/resources/client/level-components/guideline-string.md) + - [Particle String](/resources/client/level-components/particle-string.md) - [Music Library](/resources/client/musiclibrary.md) - [SFX Library](/resources/client/sfxlibrary.md) From ef89b6011ab7443c8856c3e7b7de4ad116ce7eae Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 22:45:39 +0300 Subject: [PATCH 309/389] Update kCEK.md --- docs/resources/client/gamesave/kCEK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/kCEK.md b/docs/resources/client/gamesave/kCEK.md index 49501b5a3..a7b9f42bf 100644 --- a/docs/resources/client/gamesave/kCEK.md +++ b/docs/resources/client/gamesave/kCEK.md @@ -8,7 +8,7 @@ | 8 | [GJRewardItem](resources/client/gamesave/kCEK.md) | object that holds `GJRewardObject` | | 9 | [GJRewardObject](resources/client/gamesave/kCEK.md) | contains data for Rewards | | 10 | [GJSmartTemplate](resources/client/gamesave/template.md) | Contains data about smart template | -| 11 | [GJSmartTemplate](resources/client/gamesave/template.md) | Contains data for presets in smart template | +| 11 | [GJSmartRefab](resources/client/gamesave/template.md) | Contains data for presets in smart template | | 12 | [GJLevelList](/resources/client/gamesave/list.md) | Contains keys for level lists | ## kCEK 8 and 9 Structure From ce202999fa6855af52eb7b035e19e7a1e092997e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 22:48:19 +0300 Subject: [PATCH 310/389] Update template.md --- docs/resources/client/gamesave/template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/template.md b/docs/resources/client/gamesave/template.md index 22285c10c..8959a2d17 100644 --- a/docs/resources/client/gamesave/template.md +++ b/docs/resources/client/gamesave/template.md @@ -32,7 +32,7 @@ kCEK 11's are stored in key 3 of kCEK 10 in the following format: ``` -kCEK 11 key 1 is the object string of the template variation. The object string is **unencoded** and stored raw. The center point is at X: 0, Y: -90. +kCEK 11 key 1 is the [object string](/resources/client/level-components/level-object.md) of the template variation. The object string is **unencoded** and stored raw. The center point is at X: 0, Y: -90. The keys of the dictionary are 9-bit bitfields (binary numbers) representing the exact type of template variation. The first bit is reserved and is always set to `1`. Other bits represent: From 70e8daf24e521a1e291851cafc0e061ec9b63ad3 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Mon, 15 Jul 2024 22:52:25 +0300 Subject: [PATCH 311/389] Update template.md --- docs/resources/client/gamesave/template.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/resources/client/gamesave/template.md b/docs/resources/client/gamesave/template.md index 8959a2d17..19617d223 100644 --- a/docs/resources/client/gamesave/template.md +++ b/docs/resources/client/gamesave/template.md @@ -9,6 +9,10 @@ Smart Templates are user-made templates used for the Auto Build feature. They ar | 1 | Smart Template ID | integer | | 2 | Name | string | | 3 | Template Variations| dict | +| 4 | Unknown | integer | +| 5 | Unknown | integer | +| 6 | Unknown | integer | +| 7 | Unknown | integer | ## kCEK 11 From 5b22969ef52f926e3e40f4f482864b621416bae3 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 10:39:59 +0300 Subject: [PATCH 312/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index f5853248d..67bb49916 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -300,7 +300,7 @@ GS_28 contains your enabled items (animations). All of them are strings (althoug ## GS_29 -GS_29 indicates whether your currently selected path is completed or not. Contary to most GS's, it's a boolean value and not a dictionary. +GS_29 is unknown but is related to paths. Contary to most GS's, it's a boolean value and not a dictionary. | Structure | |:----------| From 391b1cd47166bb18c5ddd14557609f1330e9cefd Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:24:58 +0300 Subject: [PATCH 313/389] Update getTop1000.md --- docs/endpoints/misc/getTop1000.md | 61 ++----------------------------- 1 file changed, 4 insertions(+), 57 deletions(-) diff --git a/docs/endpoints/misc/getTop1000.md b/docs/endpoints/misc/getTop1000.md index ee9584037..0d23524a3 100644 --- a/docs/endpoints/misc/getTop1000.md +++ b/docs/endpoints/misc/getTop1000.md @@ -1,47 +1,6 @@ # getTop1000.php -**Note: as of July 12th 2024, this endpoint does not work anymore. It now requires an empty user-agent and the generic secret just like 99% of other endpoints. But it only returns some empty HTML, which can be found here:** - -```html - - - - - -Top 1000 - - - - - -``` - -The old getTop1000 behavior can be found below. - - -[getTop1000.php](http://boomlings.com/database/getTop1000.php) is one of the very few endpoints found on the servers that can be accessed via a [GET request](https://www.w3schools.com/tags/ref_httpmethods.asp). The purpose of this endpoint is to gather the top 1000 star grinders to be used on the star leaderboards. +[getTop1000.php](http://boomlings.com/database/accounts/getTop1000.php) is one of the very few endpoints found on the servers that can be accessed via a [GET request](https://www.w3schools.com/tags/ref_httpmethods.asp). The purpose of this endpoint is to gather the top 1000 star grinders to be used on the star leaderboards. ## Parameters @@ -52,25 +11,13 @@ This endpoint does not require any parameters ```py import requests -req = requests.get("http://boomlings.com/database/getTop1000.php") +req = requests.get("http://boomlings.com/database/accounts/getTop1000.php") print(req.text) ``` ## Response Structure -The structure for this endpoint is fairly simple - Using only a single key with 3 pieces of data assigned to the key with a `,` to seperate them. Each player is seperated by a newline `(
)` making it easy to parse. - -Below is a small snippet of the response - - 1: Smiffy777, 167677, 1413859 - 2: Gormuck, 161467, 1775477 - 3: Steekmen, 158704, 4310927 - 4: Superchat, 157872, 1098021 - 5: Cool, 157561, 4825 - -The Values for each segment are: +This endpoint returns an HTML response with a table in the following format: -| Structure | -|:----------| -|`: , , `| +`{Rank},{AccountID},{Username},{Stars},{Diamonds},{Demons},{UserCoins},{Coins}` From 99ac3cbac9ee5348c046de819b4de3d5ec26daf3 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:27:38 +0300 Subject: [PATCH 314/389] Update getAccountURL.md --- docs/endpoints/misc/getAccountURL.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/misc/getAccountURL.md b/docs/endpoints/misc/getAccountURL.md index 4d83a658d..3f51fc118 100644 --- a/docs/endpoints/misc/getAccountURL.md +++ b/docs/endpoints/misc/getAccountURL.md @@ -1,6 +1,6 @@ # getAccountURL.php -Gets the URL for the data server. Official domain name is [http://geometrydash.com](http://geometrydash.com), but the server returns [http://69.164.210.48](http://69.164.210.48). +Gets the URL for the data server. ## Parameters @@ -14,7 +14,7 @@ Gets the URL for the data server. Official domain name is [http://geometrydash.c ## Response -[http://69.164.210.48](http://69.164.210.48) +[https://www.robtopgames.net](https://www.robtopgames.net) ## Example @@ -40,4 +40,4 @@ print(req.text) http://69.164.210.48 ``` - \ No newline at end of file + From 873562f8a622fdfc1d7930924b0e68286443d3ae Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:27:50 +0300 Subject: [PATCH 315/389] Update getAccountURL.md --- docs/endpoints/misc/getAccountURL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/misc/getAccountURL.md b/docs/endpoints/misc/getAccountURL.md index 3f51fc118..f1315d2ee 100644 --- a/docs/endpoints/misc/getAccountURL.md +++ b/docs/endpoints/misc/getAccountURL.md @@ -37,7 +37,7 @@ print(req.text) **Response** ```py -http://69.164.210.48 +https://www.robtopgames.net ``` From 7e45c32a852331f0043b93a50a9d7004165aba61 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:28:28 +0300 Subject: [PATCH 316/389] Update getAccountURL.md --- docs/endpoints/misc/getAccountURL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/misc/getAccountURL.md b/docs/endpoints/misc/getAccountURL.md index f1315d2ee..90795f19e 100644 --- a/docs/endpoints/misc/getAccountURL.md +++ b/docs/endpoints/misc/getAccountURL.md @@ -14,7 +14,7 @@ Gets the URL for the data server. ## Response -[https://www.robtopgames.net](https://www.robtopgames.net) +[https://www.robtopgames.org](https://www.robtopgames.org) for type 1, [https://www.robtopgames.net](https://www.robtopgames.net) for type 2 ## Example From a9ff73fbe45a9114b6c4d98d3fffd0f7dc82ed63 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:28:55 +0300 Subject: [PATCH 317/389] Update getAccountURL.md --- docs/endpoints/misc/getAccountURL.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/endpoints/misc/getAccountURL.md b/docs/endpoints/misc/getAccountURL.md index 90795f19e..f17edb58f 100644 --- a/docs/endpoints/misc/getAccountURL.md +++ b/docs/endpoints/misc/getAccountURL.md @@ -6,8 +6,6 @@ Gets the URL for the data server. ### Required Parameters -**accountID** - Anyone's account ID - **type** - used to decide which endpoint is used after the data server is found - 1 = backup data/ 2 = sync data **secret** - Wmfd2893gb7 From 451a38b4be471eeedd9c4e7a066e4d5bf55709b3 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:30:28 +0300 Subject: [PATCH 318/389] Update getAccountURL.md --- docs/endpoints/misc/getAccountURL.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/misc/getAccountURL.md b/docs/endpoints/misc/getAccountURL.md index f17edb58f..100b8d709 100644 --- a/docs/endpoints/misc/getAccountURL.md +++ b/docs/endpoints/misc/getAccountURL.md @@ -6,13 +6,15 @@ Gets the URL for the data server. ### Required Parameters +**accountID** - Any valid account ID + **type** - used to decide which endpoint is used after the data server is found - 1 = backup data/ 2 = sync data **secret** - Wmfd2893gb7 ## Response -[https://www.robtopgames.org](https://www.robtopgames.org) for type 1, [https://www.robtopgames.net](https://www.robtopgames.net) for type 2 +Usually [https://www.robtopgames.org](https://www.robtopgames.org). However, without a valid accountID and at type 2, [https://www.robtopgames.net](https://www.robtopgames.net) is returned instead ## Example @@ -24,7 +26,7 @@ Gets the URL for the data server. import requests data = { - "accountID": 173831, + "accountID": 71, "type": 2, "secret": "Wmfd2893gb7" } From a717663ecb3c384d3f6e37c05862e443e1208745 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:34:10 +0300 Subject: [PATCH 319/389] Update syncGJAccountNew.md --- docs/endpoints/accounts/syncGJAccountNew.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/accounts/syncGJAccountNew.md b/docs/endpoints/accounts/syncGJAccountNew.md index e5480e760..e051ea865 100644 --- a/docs/endpoints/accounts/syncGJAccountNew.md +++ b/docs/endpoints/accounts/syncGJAccountNew.md @@ -2,7 +2,7 @@ Loads account data -**Note:** This page is on the account server. You can find the domain name by sending a request to /database/getAccountURL.php (currently http://www.robtopgames.net) +**Note:** This page is on the account server. You can find the domain name by sending a request to /database/accounts/getAccountURL.php (currently http://www.robtopgames.org) ## Parameters @@ -16,9 +16,9 @@ Loads account data ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **gdw** - 0 @@ -51,7 +51,7 @@ data = { "secret": "Wmfv3899gc9" } -req = requests.post("http://www.robtopgames.net/database/accounts/syncGJAccountNew.php", data=data) +req = requests.post("http://www.robtopgames.org/database/accounts/syncGJAccountNew.php", data=data) print(req.text) ``` From 80f421fccb3d8539cbfbae83bdedc07757ea4ab0 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:35:21 +0300 Subject: [PATCH 320/389] Update syncGJAccountNew.md --- docs/endpoints/accounts/syncGJAccountNew.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/accounts/syncGJAccountNew.md b/docs/endpoints/accounts/syncGJAccountNew.md index e051ea865..69b11a1e7 100644 --- a/docs/endpoints/accounts/syncGJAccountNew.md +++ b/docs/endpoints/accounts/syncGJAccountNew.md @@ -2,7 +2,7 @@ Loads account data -**Note:** This page is on the account server. You can find the domain name by sending a request to /database/accounts/getAccountURL.php (currently http://www.robtopgames.org) +**Note:** This page is on the account server. You can find the domain name by sending a request to /database/getAccountURL.php (currently http://www.robtopgames.org) ## Parameters From df5252e763cab5b8d58787746940d78999e6795d Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:55:03 +0300 Subject: [PATCH 321/389] Update backupGJAccountNew.md --- docs/endpoints/accounts/backupGJAccountNew.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/accounts/backupGJAccountNew.md b/docs/endpoints/accounts/backupGJAccountNew.md index 3be1dbceb..4c0db903a 100644 --- a/docs/endpoints/accounts/backupGJAccountNew.md +++ b/docs/endpoints/accounts/backupGJAccountNew.md @@ -2,7 +2,7 @@ Saves account data -**Note:** This page is on the account server. You can find the domain name by sending a request to /database/getAccountURL.php (currently http://www.robtopgames.net) +**Note:** This page is on the account server. You can find the domain name by sending a request to /database/getAccountURL.php (currently http://www.robtopgames.org) ## Parameters @@ -12,9 +12,9 @@ Saves account data **password** - The password of the account to be added -**gameVersion** - 21 +**gameVersion** - 22 -**binaryVersion** - 35 +**binaryVersion** - 42 **saveData** - The save data for CCGameManager.dat compressed with gzip, then a semicolon `;` and the save data for CCLocalLevels.dat compressed with gzip. @@ -46,7 +46,7 @@ data = { "secret": "Wmfv3899gc9" } -req = requests.post("http://www.robtopgames.net/database/accounts/backupGJAccountNew.php", data=data) +req = requests.post("http://www.robtopgames.org/database/accounts/backupGJAccountNew.php", data=data) print(req.text) ``` From ec0e35bba00b8bea21367df5f5cd78f1aff2e8e3 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:55:42 +0300 Subject: [PATCH 322/389] Update updateGJAccSettings20.md --- docs/endpoints/accounts/updateGJAccSettings20.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/accounts/updateGJAccSettings20.md b/docs/endpoints/accounts/updateGJAccSettings20.md index 867031771..b08d1c2ce 100644 --- a/docs/endpoints/accounts/updateGJAccSettings20.md +++ b/docs/endpoints/accounts/updateGJAccSettings20.md @@ -8,7 +8,7 @@ Updates a user's account settings **accountID** - The accountID of the user whose account is being updated -**gjp** - The [GJP](/topics/encryption/gjp.md) of the user whose account is being updated +**gjp2** - The [GJP2](/topics/encryption/gjp.md) of the user whose account is being updated **secret** - Wmfv3899gc9 @@ -60,4 +60,4 @@ print(req.text) 1 ``` - \ No newline at end of file + From 85e158b9a857cf45c09bccbf4c8109f770e2a116 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:56:18 +0300 Subject: [PATCH 323/389] Update updateGJAccSettings20.md --- docs/endpoints/accounts/updateGJAccSettings20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/accounts/updateGJAccSettings20.md b/docs/endpoints/accounts/updateGJAccSettings20.md index b08d1c2ce..8df641e25 100644 --- a/docs/endpoints/accounts/updateGJAccSettings20.md +++ b/docs/endpoints/accounts/updateGJAccSettings20.md @@ -51,7 +51,7 @@ data = { "twitch": "devexit" } -req = requests.post('http://boomlings.com/database/updateGJAccSettings20.php', data=data) +req = requests.post('https://www.boomlings.com/database/updateGJAccSettings20.php', data=data) print(req.text) ``` From 2cd944bdbc2e42ea10f71e28a867253ccb49cb46 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 12:17:01 +0300 Subject: [PATCH 324/389] Update syncGJAccountNew.md --- docs/endpoints/accounts/syncGJAccountNew.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/accounts/syncGJAccountNew.md b/docs/endpoints/accounts/syncGJAccountNew.md index 69b11a1e7..a516d9ac3 100644 --- a/docs/endpoints/accounts/syncGJAccountNew.md +++ b/docs/endpoints/accounts/syncGJAccountNew.md @@ -8,9 +8,9 @@ Loads account data ### Required Parameters -**userName** - The username of the account to be added +**accountID** - The account ID of the account to be added -**password** - The password of the account to be added +**gjp2** - The password of the account to be added with [GJP2](/topics/gjp.md) encryption **secret** - Wmfv3899gc9 @@ -46,8 +46,8 @@ A list of values, separated by semicolons `;`: import requests data = { - "userName": "APIAccount", - "password": "********", # This would be APIAccount's password + "accountID": 23590959, # This would be APIAccount's account ID + "gjp2": "********", # This would be APIAccount's password with GJP2 encryption "secret": "Wmfv3899gc9" } From e4ba6a2b93f125faa34f20272c9a9e11cc7b5695 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 12:34:29 +0300 Subject: [PATCH 325/389] Update syncGJAccountNew.md --- docs/endpoints/accounts/syncGJAccountNew.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/accounts/syncGJAccountNew.md b/docs/endpoints/accounts/syncGJAccountNew.md index a516d9ac3..92872ef5b 100644 --- a/docs/endpoints/accounts/syncGJAccountNew.md +++ b/docs/endpoints/accounts/syncGJAccountNew.md @@ -34,7 +34,7 @@ A list of values, separated by semicolons `;`: - a list of rated levels separated by commas `,`, in the format `[levelID],[stars]`, compressed with deflate and a random string of *20* characters at the front and back -- a list of map pack objects separated by pipes `|`, with keys 1, 3, 4 and 5, compressed with deflate and a random string of *20* characters at the front and back +- a list of [map pack objects](/resources/server/mappack.md) separated by pipes `|`, with keys 1, 3, 4 and 5, compressed with deflate and a random string of *20* characters at the front and back ## Example From 7b7dee5019087422ebe10da86446c66b040fb58e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 15:51:43 +0300 Subject: [PATCH 326/389] Update gamesave.md --- docs/resources/client/gamesave.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 02bfc66b8..8b6d5e175 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -143,6 +143,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account |:----|:------| | MDLM_001 | Dictionary of [SongInfoObject](/resources/server/song.md) | | MDLM_002 | Song Priority of a song | +| MDLM_003 | Unknown (dict) | ### KBM From b8fb318bef7243f4e0bd6cf857230b6217e2b049 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 16:47:32 +0300 Subject: [PATCH 327/389] Update valueKeeper.md --- docs/resources/client/gamesave/valueKeeper.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/valueKeeper.md b/docs/resources/client/gamesave/valueKeeper.md index 4794c45fa..c5c362973 100644 --- a/docs/resources/client/gamesave/valueKeeper.md +++ b/docs/resources/client/gamesave/valueKeeper.md @@ -20,3 +20,4 @@ Value Keeper is a giant Dictionary found in CCGameManager.dat that contains the | c0_{ID} | The Colour1's you have unlocked | | c1_{ID} | The Colour2's you have unlocked | | death_{ID} | Unlocked Death Effects | +| shipstreak_{ID} | Unlocked ship streaks | From 0ddafadd4e3165e2c04b886447c0dc71c872801f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 23:03:06 +0300 Subject: [PATCH 328/389] Update level.md --- docs/resources/client/level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 4d56d408f..5e9783349 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -115,7 +115,7 @@ The platformer seed is generated like this: ```py def generatePlatformerHash(bestTime, bestPoints): - number = (((bestTime + 7890) % 34567) * 601 + (((bestPoints) + 3456) % 78901) * 967 + 94819) % 94433 + number = (((bestTime + 7890) % 34567) * 601 + ((abs(bestPoints) + 3456) % 78901) * 967 + 94819) % 94433 return ((number ^ number >> 16) * 829) % 77849 ``` From 719d0c929d375e07d3199c61b561e858435fff9a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 23:04:09 +0300 Subject: [PATCH 329/389] Update chk.md --- docs/topics/encryption/chk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/encryption/chk.md b/docs/topics/encryption/chk.md index e678eb956..6236de250 100644 --- a/docs/topics/encryption/chk.md +++ b/docs/topics/encryption/chk.md @@ -193,7 +193,7 @@ For platformer levels: ```py def generatePlatformerHash(bestTime, bestPoints): - number = (((bestTime + 7890) % 34567) * 601 + (((bestPoints) + 3456) % 78901) * 967 + 94819) % 94433 + number = (((bestTime + 7890) % 34567) * 601 + ((abs(bestPoints) + 3456) % 78901) * 967 + 94819) % 94433 return ((number ^ number >> 16) * 829) % 77849 ``` From f9e9ee87a855f84ce910121f66916e268a7a57b6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Tue, 16 Jul 2024 23:05:56 +0300 Subject: [PATCH 330/389] Update level.md --- docs/resources/client/level.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index 5e9783349..c45d59be0 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -150,5 +150,5 @@ The build tab page is 5, and the button settings are 6x2 (default), meaning the | k92 | **integer** | | | k93 | **Bool** | unlimited Objects? | | k94 | **Bool** | Platformer? | -| k101 | **string** | seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | +| k101 | **string** | seems to be 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0. Seems to also correlate with k47 | | k106 | **integer** | corresponds to key 54 on the servers | From 390f8904e4fe1567ac5867d08bda3f43298bd45f Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 00:29:06 +0300 Subject: [PATCH 331/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 67bb49916..54260c5d6 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -48,6 +48,7 @@ GS values contain Information regarding certain aspects of the game | 40 | Amount of Completed Gauntlets | | 41 | List Rewards | | unique_{LevelID}_{Coins Collected} | The Coins Collected on the Official Levels +| unique_secretB03 | Glubfub coin | ## GS_completed From d0ca7d3149c9fdce0ccc79dc2f52b7cebffeafc6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 00:32:00 +0300 Subject: [PATCH 332/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 54260c5d6..1930a36a6 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -49,6 +49,8 @@ GS values contain Information regarding certain aspects of the game | 41 | List Rewards | | unique_{LevelID}_{Coins Collected} | The Coins Collected on the Official Levels | unique_secretB03 | Glubfub coin | +| unique_secret04 | Official level page secret coin | +| unique_secret06 | 'Sparky' coin | ## GS_completed From 48aaa775719e28d51767a061794348589b48b06a Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 00:46:05 +0300 Subject: [PATCH 333/389] Update GLM.md --- docs/resources/client/gamesave/GLM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GLM.md b/docs/resources/client/gamesave/GLM.md index cca409136..587117b5f 100644 --- a/docs/resources/client/gamesave/GLM.md +++ b/docs/resources/client/gamesave/GLM.md @@ -12,7 +12,7 @@ GLM_01 is used to store all progress the player has made on official levels ## GLM_02 -GLM_02 was used before the account system to keep track of who owned Specific levels, currently unused +GLM_02 was used in the earliest versions of the game back when your local levels were stored in CCGameManager.dat instead of being separated to CCLocalLevels.dat, currently unused | Key | description | |:----|:------------| From 5e8052a3b1a47b91c75b57b18c78284459ac0c10 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 02:20:15 +0300 Subject: [PATCH 334/389] Update gamesave.md --- docs/resources/client/gamesave.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 8b6d5e175..43e5674ba 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -47,7 +47,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account | bootups| integer | The ammount of times you have opened Geometry Dash | | hasRatedGame| Bool | if you have rated the game | | binaryVersion| integer | The Games Binary Version | -| resolution| integer | The games resolution | +| resolution| [resolution](/resources/client/gamesave/enums.md) | The games resolution | | texQuality| integer | how high the text quality is (0 for Auto, 1 for Low, 2 for Medium and 3 for High) | | timeOffset| integer | music offset in milliseconds | | customFPSTarget| float | the FPS target value | From 922387efb56c66177ee0a5136cb7a2baaaeb5861 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 02:31:49 +0300 Subject: [PATCH 335/389] Create enums.md --- docs/resources/client/gamesave/enums.md | 35 +++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 docs/resources/client/gamesave/enums.md diff --git a/docs/resources/client/gamesave/enums.md b/docs/resources/client/gamesave/enums.md new file mode 100644 index 000000000..675982910 --- /dev/null +++ b/docs/resources/client/gamesave/enums.md @@ -0,0 +1,35 @@ +# Enums + +## Resolution + +This enum represents the game window's resoution. + +| Value | Width | Height | Aspect Ratio | +|:------|:------|:-------|:-------------| +| 1 | 640 | 480 | 4:3 | +| 2 | 720 | 480 | 3:2 | +| 3 | 720 | 576 | 5:4 | +| 4 | 800 | 600 | 4:3 | +| 5 | 1024 | 768 | 4:3 | +| 6 | 1152 | 864 | 4:3 | +| 7 | 1176 | 664 | 147:83 | +| 8 | 1280 | 720 | 16:9 | +| 9 | 1280 | 768 | 5:3 | +| 10 | 1280 | 800 | 16:10 | +| 11 | 1280 | 960 | 4:3 | +| 12 | 1280 | 1024 | 5:4 | +| 13 | 1360 | 768 | 85:48 | +| 14 | 1366 | 768 | 683:384 | +| 15 | 1440 | 900 | 16:10 | +| 16 | 1600 | 900 | 16:9 | +| 17 | 1600 | 1024 | 25:16 | +| 18 | 1600 | 1200 | 4:3 | +| 19 | 1680 | 1050 | 16:10 | +| 20 | 1768 | 992 | 221:124 | +| 21 | 1920 | 1080 | 16:9 | +| 22 | 1920 | 1200 | 16:10 | +| 23 | 1920 | 1440 | 4:3 | +| 24 | 2048 | 1536 | 4:3 | +| 25 | 2560 | 1440 | 16:9 | +| 26 | 2560 | 1600 | 16:10 | +| 27 | 3840 | 2160 | 16:9 | From 8b2c3404653658163dbb2dc22a790573a80ecdb5 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 02:32:42 +0300 Subject: [PATCH 336/389] Update _sidebar.md --- docs/_sidebar.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index c7db86f3c..cd0772b5a 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -36,6 +36,7 @@ - [Platformer UI](resources/client/gamesave/dpad.md) - [Smart Templates](resources/client/gamesave/template.md) - [Lists](resources/client/gamesave/list.md) + - [Enumerations](/resources/client/level-components/enums.md) - [Level](/resources/client/level.md) - [Capacity String](/resources/client/level-components/capacity-string.md) From bb680a829cdb8d3c3641ac572d666437cc1a0e25 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 02:33:02 +0300 Subject: [PATCH 337/389] Update _sidebar.md --- docs/_sidebar.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index cd0772b5a..85afb3281 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -36,7 +36,7 @@ - [Platformer UI](resources/client/gamesave/dpad.md) - [Smart Templates](resources/client/gamesave/template.md) - [Lists](resources/client/gamesave/list.md) - - [Enumerations](/resources/client/level-components/enums.md) + - [Enumerations](/resources/client/gamesave/enums.md) - [Level](/resources/client/level.md) - [Capacity String](/resources/client/level-components/capacity-string.md) From fc5851434ce2a6e97519d528f6631a1cd451d66c Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 02:34:15 +0300 Subject: [PATCH 338/389] Update enums.md --- docs/resources/client/gamesave/enums.md | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/gamesave/enums.md b/docs/resources/client/gamesave/enums.md index 675982910..3169a4f8b 100644 --- a/docs/resources/client/gamesave/enums.md +++ b/docs/resources/client/gamesave/enums.md @@ -1,8 +1,19 @@ -# Enums +# Enumerations + +## Texture Quality + +This enum represents the quality of the game's textures. + +| Value | Name | +| :-----|:------ | +| 0 | Auto | +| 1` | Low | +| 2 | Medium | +| 3 | High | ## Resolution -This enum represents the game window's resoution. +This enum represents the game window's resolution. | Value | Width | Height | Aspect Ratio | |:------|:------|:-------|:-------------| From d5532505cee684a7e66a11ebcf78802229909118 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 02:34:43 +0300 Subject: [PATCH 339/389] Update enums.md --- docs/resources/client/gamesave/enums.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/enums.md b/docs/resources/client/gamesave/enums.md index 3169a4f8b..08a687465 100644 --- a/docs/resources/client/gamesave/enums.md +++ b/docs/resources/client/gamesave/enums.md @@ -7,7 +7,7 @@ This enum represents the quality of the game's textures. | Value | Name | | :-----|:------ | | 0 | Auto | -| 1` | Low | +| 1 | Low | | 2 | Medium | | 3 | High | From 3653335532b4afff901eefcc81243f97773e10c4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 03:03:11 +0300 Subject: [PATCH 340/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 1930a36a6..826054de4 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -63,10 +63,10 @@ all completed levels | `d_{levelID}` | completed daily | `g_{levelID}` | completed gauntlet | `star_{levelID}` | Collected Stars| -| `dstar_{levelID}` | Collected Stars for daily| +| `dstar_{timelyID}` | Collected Stars for daily| | `gstar_{levelID}` | Collected Stars for gauntlet | | `demon_{levelID}` | Collected Demon | -| `ddemon_{levelID}` | Collected Demon for weekly| +| `ddemon_{timelyID}` | Collected Demon for weekly| | `gdemon_{levelID}` | Collected Demon for gauntlet| ## GS_3 From 25b082343fadcb3ba756b8392d34e6ee8ff4d191 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 03:14:59 +0300 Subject: [PATCH 341/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 826054de4..a686053a6 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -296,7 +296,7 @@ GS_28 contains your enabled items (animations). All of them are strings (althoug | Key | Description | |:------|:---------------------| -| 17_12 | Unknown, always 1 | +| 17_12 | Music Unlocker | | 18_12 | Slow Robot Walk | | 19_12 | Fast Robot Run | | 20_12 | Spider Naruto Run | From 1145650a0e13ba59772b5b9b93fd6eab7c072e21 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 03:18:20 +0300 Subject: [PATCH 342/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index a686053a6..86509c848 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -292,7 +292,7 @@ GS_27 contains the List Rewards you have acquired ## GS_28 -GS_28 contains your enabled items (animations). All of them are strings (although they act as booleans) and are set to 1 by default. +GS_28 contains your enabled items. All of them are strings (although they act as booleans). The animations (18-20) are set to 1 by default despite not being unlocked. However, the other items are set to 1 permanently when you unlock them. | Key | Description | |:------|:---------------------| @@ -300,6 +300,7 @@ GS_28 contains your enabled items (animations). All of them are strings (althoug | 18_12 | Slow Robot Walk | | 19_12 | Fast Robot Run | | 20_12 | Spider Naruto Run | +| 21_12 | Music Customizer | ## GS_29 From 4961fe45debd4b072870d21ed2cff3f4ca13ac60 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 03:19:11 +0300 Subject: [PATCH 343/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 86509c848..f1120ae2e 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -292,7 +292,7 @@ GS_27 contains the List Rewards you have acquired ## GS_28 -GS_28 contains your enabled items. All of them are strings (although they act as booleans). The animations (18-20) are set to 1 by default despite not being unlocked. However, the other items are set to 1 permanently when you unlock them. +GS_28 contains your enabled items. All of them are strings (although they act as booleans). The animations (18-20) are set to 1 by default even if not unlocked. However, the other items are set to 1 permanently when you unlock them. | Key | Description | |:------|:---------------------| From 3b0c6ffbc8d8f5b1aa2e5eb42a71ebf936d3e0f1 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 03:28:25 +0300 Subject: [PATCH 344/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index f1120ae2e..d28ba1ead 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -304,7 +304,7 @@ GS_28 contains your enabled items. All of them are strings (although they act as ## GS_29 -GS_29 is unknown but is related to paths. Contary to most GS's, it's a boolean value and not a dictionary. +GS_29 is unknown but is related to trying to fix some path bug. Contary to most GS's, it's a boolean value and not a dictionary. | Structure | |:----------| From 4100d99d3add8523cb2c40a8213dae8c64f40755 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:03:34 +0300 Subject: [PATCH 345/389] wip legacy keys --- docs/resources/client/gamesave.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 43e5674ba..5c5d624a6 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -62,6 +62,22 @@ Your CCGameManager.dat File contains a lot of information regarding your account | practicePosX | float | The X position of the practice UI | | practicePosY | float | The Y position of the practice UI | +## Legacy Keys + +These keys were used in old versions of the game but are now obsolete. + +| Key | Type | description | +| :-------| :--- | :-----------| +| musicEnabled | Bool | Whether music is enabled or not. Moved to bgVolume | +| fxEnabled | Bool | Whether sound effects are enabled or not. Moved to sfxVolume | +| moreGamesString | String | The contents of the More Games button. It was a list of values separated by `_`. The values were: `gj` for GD Lite, `boom` for Boomlings, `mu` for Boomlings MatchUp and `mm` for Memory Mastermind. The game & string allowed repeated values | +| hasNewGames | Bool | Whether there are new games in the More Games button. This showed an exclamation mark icon next to the button | +| gameCenterEnabled | Bool | Whether the Game Center (iOS) was enabled. Moved to valueKeeper::[gv_0034](/resources/client/gamesave/gv.md) | +| lastDay | Integer | Presumably the day when you last played (0-indexed) | +| lastMonth | Integer | Presumably the month when you last played (0-indexed) | +| clickedName | Bool | Whether you clicked on your name in the icon kit to change it | +| autoCheckpoints | Bool | Whether checkpoints are placed automatically in practice mode. Moved to valueKeeper::[gv_0027](/resources/client/gamesave/gv.md) | + ### GLM | Key | Type | description | From 13c87782467c15420d3567611f159abf15b67462 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:04:42 +0300 Subject: [PATCH 346/389] that sounded dumb --- docs/resources/client/gamesave.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 5c5d624a6..b05c07642 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -70,7 +70,7 @@ These keys were used in old versions of the game but are now obsolete. | :-------| :--- | :-----------| | musicEnabled | Bool | Whether music is enabled or not. Moved to bgVolume | | fxEnabled | Bool | Whether sound effects are enabled or not. Moved to sfxVolume | -| moreGamesString | String | The contents of the More Games button. It was a list of values separated by `_`. The values were: `gj` for GD Lite, `boom` for Boomlings, `mu` for Boomlings MatchUp and `mm` for Memory Mastermind. The game & string allowed repeated values | +| moreGamesString | String | The contents of the More Games button. It was a list of values separated by `_`. The values were: `gj` for GD Lite, `boom` for Boomlings, `mu` for Boomlings MatchUp and `mm` for Memory Mastermind. The game allowed repeated values | | hasNewGames | Bool | Whether there are new games in the More Games button. This showed an exclamation mark icon next to the button | | gameCenterEnabled | Bool | Whether the Game Center (iOS) was enabled. Moved to valueKeeper::[gv_0034](/resources/client/gamesave/gv.md) | | lastDay | Integer | Presumably the day when you last played (0-indexed) | From 17203ae35f862aea9bca5b312c5106739d595fc5 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:22:40 +0300 Subject: [PATCH 347/389] Update gamesave.md --- docs/resources/client/gamesave.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index b05c07642..8bc3de230 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -77,6 +77,12 @@ These keys were used in old versions of the game but are now obsolete. | lastMonth | Integer | Presumably the month when you last played (0-indexed) | | clickedName | Bool | Whether you clicked on your name in the icon kit to change it | | autoCheckpoints | Bool | Whether checkpoints are placed automatically in practice mode. Moved to valueKeeper::[gv_0027](/resources/client/gamesave/gv.md) | +| showBPMMarkers | Bool | if BPM markers are shown | +| autoRetryLevel | Bool | If the level automatically restarts after death. Moved to valueKeeper::[gv_0026](/resources/client/gamesave/gv.md) | +| recordGameplay | Bool | presumably whether to record gameplay with everyplay | +| commentSortRecent | Bool | unknown (there was no option to sort comments by most liked at the time) | +| kEnableTutorial | Bool | unknown | +| showedFirstTutorial | Bool | unknown | ### GLM From d3460d36cfa1e994b0de6d4d2d39d3d7f966b9e6 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:27:22 +0300 Subject: [PATCH 348/389] Update gamesave.md --- docs/resources/client/gamesave.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 8bc3de230..696b4ce41 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -79,7 +79,10 @@ These keys were used in old versions of the game but are now obsolete. | autoCheckpoints | Bool | Whether checkpoints are placed automatically in practice mode. Moved to valueKeeper::[gv_0027](/resources/client/gamesave/gv.md) | | showBPMMarkers | Bool | if BPM markers are shown | | autoRetryLevel | Bool | If the level automatically restarts after death. Moved to valueKeeper::[gv_0026](/resources/client/gamesave/gv.md) | -| recordGameplay | Bool | presumably whether to record gameplay with everyplay | +| recordGameplay | Bool | Presumably whether to record gameplay with Everyplay | +| showedRateDiffDialog | Bool | Whether the difficulty rating explanation was shown | +| showedRateStarDialog | Bool | Whether the dialogue about rating GD on the Play Store/App Store was shown | +| showedLowDetailDialog | Bool | Whether the low detail dialogue was shown | | commentSortRecent | Bool | unknown (there was no option to sort comments by most liked at the time) | | kEnableTutorial | Bool | unknown | | showedFirstTutorial | Bool | unknown | From aeca3d8a566e932957c7dbba7b5d452d512096c4 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:27:43 +0300 Subject: [PATCH 349/389] Update gamesave.md --- docs/resources/client/gamesave.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 696b4ce41..2d6cc319a 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -81,7 +81,6 @@ These keys were used in old versions of the game but are now obsolete. | autoRetryLevel | Bool | If the level automatically restarts after death. Moved to valueKeeper::[gv_0026](/resources/client/gamesave/gv.md) | | recordGameplay | Bool | Presumably whether to record gameplay with Everyplay | | showedRateDiffDialog | Bool | Whether the difficulty rating explanation was shown | -| showedRateStarDialog | Bool | Whether the dialogue about rating GD on the Play Store/App Store was shown | | showedLowDetailDialog | Bool | Whether the low detail dialogue was shown | | commentSortRecent | Bool | unknown (there was no option to sort comments by most liked at the time) | | kEnableTutorial | Bool | unknown | From 19e477e12180c3403d093188f57185494f9c7f32 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 09:27:56 +0300 Subject: [PATCH 350/389] Update gamesave.md --- docs/resources/client/gamesave.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index 2d6cc319a..c1932ff72 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -81,7 +81,6 @@ These keys were used in old versions of the game but are now obsolete. | autoRetryLevel | Bool | If the level automatically restarts after death. Moved to valueKeeper::[gv_0026](/resources/client/gamesave/gv.md) | | recordGameplay | Bool | Presumably whether to record gameplay with Everyplay | | showedRateDiffDialog | Bool | Whether the difficulty rating explanation was shown | -| showedLowDetailDialog | Bool | Whether the low detail dialogue was shown | | commentSortRecent | Bool | unknown (there was no option to sort comments by most liked at the time) | | kEnableTutorial | Bool | unknown | | showedFirstTutorial | Bool | unknown | From 2787d6bef2c94a10842f832473c9dd0855c15a65 Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:01:47 +0300 Subject: [PATCH 351/389] Update gamesave.md --- docs/resources/client/gamesave.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/client/gamesave.md b/docs/resources/client/gamesave.md index c1932ff72..28b44b9d6 100644 --- a/docs/resources/client/gamesave.md +++ b/docs/resources/client/gamesave.md @@ -43,7 +43,7 @@ Your CCGameManager.dat File contains a lot of information regarding your account | clickedPractice| Bool | if Practice mode button has been clicked | | showedEditorGuide| Bool | if EditorGuide has been clicked | | showedLowDetailDialog| Bool | if low detail mode has been has been clicked | -| showedRateStarDialog| Bool | if rate star dialog has been shown | +| showedRateStarDialog| Bool | Whether the difficulty rating explanation was shown | | bootups| integer | The ammount of times you have opened Geometry Dash | | hasRatedGame| Bool | if you have rated the game | | binaryVersion| integer | The Games Binary Version | @@ -80,7 +80,7 @@ These keys were used in old versions of the game but are now obsolete. | showBPMMarkers | Bool | if BPM markers are shown | | autoRetryLevel | Bool | If the level automatically restarts after death. Moved to valueKeeper::[gv_0026](/resources/client/gamesave/gv.md) | | recordGameplay | Bool | Presumably whether to record gameplay with Everyplay | -| showedRateDiffDialog | Bool | Whether the difficulty rating explanation was shown | +| showedRateDiffDialog | Bool | Unknown (showedRateStarDialog does the same thing?) | | commentSortRecent | Bool | unknown (there was no option to sort comments by most liked at the time) | | kEnableTutorial | Bool | unknown | | showedFirstTutorial | Bool | unknown | From b9f429bb817b5416675669ba9c056ac6ad30626e Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:07:54 +0300 Subject: [PATCH 352/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index d28ba1ead..a809372e3 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -292,7 +292,7 @@ GS_27 contains the List Rewards you have acquired ## GS_28 -GS_28 contains your enabled items. All of them are strings (although they act as booleans). The animations (18-20) are set to 1 by default even if not unlocked. However, the other items are set to 1 permanently when you unlock them. +GS_28 contains your enabled items. All of them are strings (although they act as booleans). The animations (18-20) are set to 1 after doing.. something? even if not unlocked. The music unlocker is set to 1 by default as soon as you start the game. The music customize is set to 1 permanently when you unlock it. | Key | Description | |:------|:---------------------| From f693bf25222172a0f48442beb9b3dc921ec21cce Mon Sep 17 00:00:00 2001 From: Unsimply <51456251+A-Zalt@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:54:13 +0300 Subject: [PATCH 353/389] centipede --- docs/topics/tags.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index fcb4f0a8a..7c56aac59 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -37,13 +37,13 @@ ## Instant/Fade Tags -> Fade Tags are used to fade in a block of text on screen instead of making it appear character by character. Similarly to colour tags, Fade tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in hectoseconds, which is 1/100th of a second. +> Fade Tags are used to fade in a block of text on screen instead of making it appear character by character. Similarly to colour tags, Fade tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in centiseconds, which is 1/100th of a second. **Usage:** `Freaky` ## Delay Tags -> Delay tags are used to create a delay before a specific string in dialog boxes. The game detects a Delay Tag if the string contains a ` Delay tags are used to create a delay before a specific string in dialog boxes. The game detects a Delay Tag if the string contains a `...` From 9911c08fc1e8121289a2e56ef26fb71f0d348e60 Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:47:00 +0100 Subject: [PATCH 354/389] Update uploadGJLevel21.md --- docs/endpoints/levels/uploadGJLevel21.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/uploadGJLevel21.md b/docs/endpoints/levels/uploadGJLevel21.md index 25cc8cf5b..f8087f9a2 100644 --- a/docs/endpoints/levels/uploadGJLevel21.md +++ b/docs/endpoints/levels/uploadGJLevel21.md @@ -64,7 +64,7 @@ Uploads a created level to the servers. **levelInfo** - A random gzip compressed string -**binaryVersion** - 37 on Mac, 40 on Windows, 41 on Mobile +**binaryVersion** - 42 **gdw** - 0 From 572c4d786ba677622c5c1f313157a065e0aef8de Mon Sep 17 00:00:00 2001 From: Wyliemaster <62946885+Wyliemaster@users.noreply.github.com> Date: Sat, 3 Aug 2024 00:10:27 +0100 Subject: [PATCH 355/389] Finding by Pololak --- docs/resources/client/gamesave/gv.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/resources/client/gamesave/gv.md b/docs/resources/client/gamesave/gv.md index 714c9c721..18843fa3f 100644 --- a/docs/resources/client/gamesave/gv.md +++ b/docs/resources/client/gamesave/gv.md @@ -37,6 +37,7 @@ Game Variables (gvs) are found inside of the [ValueKeeper](/resources/client/gam | gv_0032 | forceTimerEnabled -> seems to be unused | | gv_0033 | ChangeSongPath | | gv_0034 | GameCenterEnabled | +| gv_0035 | Small Grid Step - 1.9 | | gv_0036 | PreviewMode (editor) | | gv_0037| showGround (editor) | | gv_0038 | showGrid (editor) | @@ -212,7 +213,6 @@ Unlocked Game Variables (ugv) are used to check if ingame events have been compl | 0017 | **False** | | | 0020 | **False** | | | 0021 | **False** | | -| 0035 | **False** | | | 0054 | **False** || | 0080 | **False** || | 0085 | **False** || From 3a05f93b0aefb044f04a5ee4a99f56c887ded5c0 Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Sun, 29 Sep 2024 06:51:56 +0200 Subject: [PATCH 356/389] Remove reference.md --- docs/endpoints/levels/uploadGJLevel21.md | 2 +- docs/reference.md | 58 ------------------------ 2 files changed, 1 insertion(+), 59 deletions(-) delete mode 100644 docs/reference.md diff --git a/docs/endpoints/levels/uploadGJLevel21.md b/docs/endpoints/levels/uploadGJLevel21.md index f8087f9a2..1bf23f058 100644 --- a/docs/endpoints/levels/uploadGJLevel21.md +++ b/docs/endpoints/levels/uploadGJLevel21.md @@ -24,7 +24,7 @@ Uploads a created level to the servers. **levelLength** - The length of the level as a number, where 0 is tiny, 4 is XL and 5 is Platformer -**audioTrack** - The [official song number](./reference.md) used in the level. Set to 0 if a newgrounds song is used +**audioTrack** - The [official song number](/reference/songs?id=table-of-official-songs) used in the level. Set to 0 if a newgrounds song is used **auto** - Unknown (0) diff --git a/docs/reference.md b/docs/reference.md deleted file mode 100644 index 8f4a84752..000000000 --- a/docs/reference.md +++ /dev/null @@ -1,58 +0,0 @@ -# Geometry Dash References - -### Audio Track - -Part of levels and requests for them is a term known as `audio track`, or the id of the track of a song in the game. - -| ID | Server ID | Track Name | Track Author | -|------|-----------|--------------------------|--------------| -| - | -1 | Practice: Stay Inside Me | OcularNebula | -| 1 | 0 | Stereo Madness | Foreverbound | -| 2 | 1 | Back on Track | DJVI | -| 3 | 2 | Polargeist | Step | -| 4 | 3 | Dry Out | DJVI | -| 5 | 4 | Base after Base | DJVI | -| 6 | 5 | Cant Let Go | DJVI | -| 7 | 6 | Jumper | Waterflame | -| 8 | 7 | Time Machine | Waterflame | -| 9 | 8 | Cycles | DJVI | -| 10 | 9 | xStep | DJVI | -| 11 | 10 | Clutterfunk | Waterflame | -| 12 | 11 | Theory of Everything | DJ-Nate | -| 13 | 12 | Electroman Adventures | Waterflame | -| 14 | 13 | Clubstep | DJ-Nate | -| 15 | 14 | Electrodynamix | DJ-Nate | -| 16 | 15 | Hexagon Force | Waterflame | -| 17 | 16 | Blast Processing | Waterflame | -| 18 | 17 | Theory of Everything 2 | DJ-Nate | -| 19 | 18 | Geometrical Dominator | Waterflame | -| 20 | 19 | Deadlocked | F-777 | -| 21 | 20 | Fingerdash | MDK | -| 1001 | 21 | The Seven Seas | F-777 | -| 1002 | 22 | Viking Arena | F-777 | -| 1003 | 23 | Airborne Robots | F-777 | -| 3001 | 24 | The Challenge | RobTop | -| 2001 | 25 | Payload | Dex Arson | -| 2002 | 26 | Beast Mode | Dex Arson | -| 2003 | 27 | Machina | Dex Arson | -| 2004 | 28 | Years | Dex Arson | -| 2005 | 29 | Frontlines | Dex Arson | -| 2006 | 30 | Space Pirates | Waterflame | -| 2007 | 31 | Striker | Waterflame | -| 2008 | 32 | Embers | Dex Arson | -| 2009 | 33 | Round 1 | Dex Arson | -| 2010 | 34 | Monster Dance Off | F-777 | -| 4001 | 35 | Press Start | MDK | -| 4002 | 36 | Nock Em | Bossfight | -| 4003 | 37 | Power Trip | Boom Kitty | - -### Secrets - -To interact with the Geometry Dash API you need a 11 character long string called `secret`. As of 2.2 there are `4` secrets that are currently known of. - -| Secret | type | Usage | -|:-------|:-----|:------| -| `Wmfd2893gb7` | **Common Secret** | Used in the majority of requests | -| `Wmfv3899gc9` | **Account Secret** | Used for all account related requests | -| `Wmfv2898gc9` | **Level Secret** | Used in level deletion | -| `Wmfp3879gc3` | **Mod Secret** | Used in moderator only requests | From aff34bfa8d70994a85c4a13c42de73c5a7bc6c3e Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Fri, 4 Oct 2024 09:23:50 +0200 Subject: [PATCH 357/389] Add shake preview --- docs/assets/shake_tag.gif | Bin 0 -> 304568 bytes docs/topics/tags.md | 1 + 2 files changed, 1 insertion(+) create mode 100644 docs/assets/shake_tag.gif diff --git a/docs/assets/shake_tag.gif b/docs/assets/shake_tag.gif new file mode 100644 index 0000000000000000000000000000000000000000..c72c0a70a67a675ccb7ee90701747d9c4e14b3f5 GIT binary patch literal 304568 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%0AwJ;zrp$+(Yx768Y%f;KJA_m>C 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%0Do3 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

-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 RQT;yscy6O}`Aon5{{ZK+_6Yz0 literal 0 HcmV?d00001 diff --git a/docs/assets/shake_tag.gif b/docs/assets/shake_tag.gif deleted file mode 100644 index c72c0a70a67a675ccb7ee90701747d9c4e14b3f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304568 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%0AwJ;zrp$+(Yx768Y%f;KJA_m>C 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%0Do3 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 z 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 Kb;ioVU=0BDKp&F; diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 90b002879..55f518c34 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -39,13 +39,17 @@ > Fade Tags are used to fade in a block of text on screen instead of making it appear character by character. Similarly to colour tags, Fade tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in centiseconds, which is 1/100th of a second. -**Usage:** `Freaky` +**Usage:** `Hello, world!` + +![fade-in preview](../assets/images/fadein_tag.gif) ## Delay Tags > Delay tags are used to create a delay before a specific string in dialog boxes. The game detects a Delay Tag if the string contains a `...` +**Usage:** `uhh...` + +![delay preview](../assets/images/delay_tag.gif) ## Shake Tags @@ -53,7 +57,7 @@ **Usage:** `CHOPPER!` -![shake preview](../assets/shake_tag.gif) +![shake preview](../assets/images/shake_tag.gif) ## Notes From b2e33fee6041f9243a7dcc677a0b11386a35e045 Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:46:40 +0200 Subject: [PATCH 360/389] Extract font to another element --- docs/stylesheets/colour_tags.css | 101 ++++++++++++++----------------- docs/topics/tags.md | 32 +++++----- 2 files changed, 61 insertions(+), 72 deletions(-) diff --git a/docs/stylesheets/colour_tags.css b/docs/stylesheets/colour_tags.css index ffe331436..4d39f0fee 100644 --- a/docs/stylesheets/colour_tags.css +++ b/docs/stylesheets/colour_tags.css @@ -3,73 +3,62 @@ src: url("/assets/fonts/texgyreheros-regular.woff") format("woff"); } -/*todo: extract font to a tag*/ -cb { - color: #4A52E1; +gdfmt { font-family: "TeX Gyre Heros"; -} -cg { - color: #40E348; - font-family: "TeX Gyre Heros"; -} + cb { + color: #4A52E1; + } -cl { - color: #60ABEF; - font-family: "TeX Gyre Heros"; -} + cg { + color: #40E348; + } -cj { - color: #32C8FF; - font-family: "TeX Gyre Heros"; -} + cl { + color: #60ABEF; + } -cy { - color: #FFFF00; - font-family: "TeX Gyre Heros"; -} + cj { + color: #32C8FF; + } -co { - color: #FFA54B; - font-family: "TeX Gyre Heros"; -} + cy { + color: #FFFF00; + } -cr { - color: #FF5A5A; - font-family: "TeX Gyre Heros"; -} + co { + color: #FFA54B; + } -cp { - color: #FF00FF; - font-family: "TeX Gyre Heros"; -} + cr { + color: #FF5A5A; + } -ca { - color: #9632FF; - font-family: "TeX Gyre Heros"; -} + cp { + color: #FF00FF; + } -cd { - color: #FF96FF; - font-family: "TeX Gyre Heros"; -} + ca { + color: #9632FF; + } -cc { - color: #FFFF96; - font-family: "TeX Gyre Heros"; -} + cd { + color: #FF96FF; + } -cf { - color: #96FFFF; - font-family: "TeX Gyre Heros"; -} + cc { + color: #FFFF96; + } -cs { - color: #FFDC41; - font-family: "TeX Gyre Heros"; -} + cf { + color: #96FFFF; + } -ccDefault { - color: #FF0000; - font-family: "TeX Gyre Heros"; -} + cs { + color: #FFDC41; + } + + c { + color: #FF0000; + } +} \ No newline at end of file diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 55f518c34..c692d3be3 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -18,22 +18,22 @@ -| Tag | Colour Code | Example (Website Only) | -| :-------- | :---------- | :----------------------------------------------------- | -| `` | `0x4A52E1` | Sample | -| `` | `0x40E348` | Sample | -| `` | `0x60ABEF` | Sample | -| `` | `0x32C8FF` | Sample | -| `` | `0xFFFF00` | Sample | -| `` | `0xFF5A4B` | Sample | -| `` | `0xFF5A5A` | Sample | -| `` | `0xFF00FF` | Sample | -| `` | `0x9632FF` | Sample | -| `` | `0xFF96FF` | Sample | -| `` | `0xFFFF96` | Sample | -| `` | `0x96FFFF` | Sample | -| `` | `0xFFDC41` | Sample | -| `Default` | `0xFF0000` | Sample | +| Tag | Colour Code | Example (Website Only) | +| :----- | :---------- | :----------------------------- | +| `` | `0x4A52E1` | Sample | +| `` | `0x40E348` | Sample | +| `` | `0x60ABEF` | Sample | +| `` | `0x32C8FF` | Sample | +| `` | `0xFFFF00` | Sample | +| `` | `0xFF5A4B` | Sample | +| `` | `0xFF5A5A` | Sample | +| `` | `0xFF00FF` | Sample | +| `` | `0x9632FF` | Sample | +| `` | `0xFF96FF` | Sample | +| `` | `0xFFFF96` | Sample | +| `` | `0x96FFFF` | Sample | +| `` | `0xFFDC41` | Sample | +| `` | `0xFF0000` | Sample | ## Instant/Fade Tags From 89e2552d725ce6e3e5b6f26cf5bee59e43f1db84 Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Tue, 8 Oct 2024 16:02:43 +0200 Subject: [PATCH 361/389] A few general formatting changes --- docs/topics/tags.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/topics/tags.md b/docs/topics/tags.md index c692d3be3..5530ecc85 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -1,6 +1,6 @@ # Tags -> Various text interfaces within the Geometry Dash client can be manipulated using special tags similar to markup languages such as `HTML.` Geometry Dash has 4 primary types of tags +Various text interfaces within the Geometry Dash client can be manipulated using special tags similar to markup languages such as `HTML`. Geometry Dash has 4 primary types of tags: - Colour Tags - Fade Tags @@ -12,13 +12,13 @@ -> Colour Tags are used to style areas of text with colour. They contain both a start and an end tag - the start tag defining which colour should be rendered on screen and the end tag denoting when to stop reading. +Colour Tags are used to style areas of text with colour. They contain both a start and an end tag - the start tag defining which colour should be rendered on screen and the end tag denoting when to stop reading. **Usage:** `Coloured Text!` -| Tag | Colour Code | Example (Website Only) | +| Tag | Colour code | Example (website only) | | :----- | :---------- | :----------------------------- | | `` | `0x4A52E1` | Sample | | `` | `0x40E348` | Sample | @@ -37,7 +37,7 @@ ## Instant/Fade Tags -> Fade Tags are used to fade in a block of text on screen instead of making it appear character by character. Similarly to colour tags, Fade tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in centiseconds, which is 1/100th of a second. +Fade Tags are used to fade in a block of text on screen instead of making it appear character by character. Similarly to colour tags, Fade tags have a start and end tag to denote which piece of text should appear instantly. The number is specified in centiseconds, which is 1/100th of a second. **Usage:** `Hello, world!` @@ -45,7 +45,7 @@ ## Delay Tags -> Delay tags are used to create a delay before a specific string in dialog boxes. The game detects a Delay Tag if the string contains a `...` @@ -53,7 +53,7 @@ ## Shake Tags -> Shake Tags are used to render shaky text on screen. The number denotes the intensity of the shake. +Shake Tags are used to render shaky text on screen. The number denotes the intensity of the shake. **Usage:** `CHOPPER!` From 146b2be6e1b45ca2c32f819fc59ea02ffb2bd6e0 Mon Sep 17 00:00:00 2001 From: Calloc <140273795+CallocGD@users.noreply.github.com> Date: Sat, 12 Oct 2024 12:05:41 -0500 Subject: [PATCH 362/389] Fix Parameters for username Parameter --- docs/endpoints/accounts/loginGJAccount.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/accounts/loginGJAccount.md b/docs/endpoints/accounts/loginGJAccount.md index c32540db8..f47c32d44 100644 --- a/docs/endpoints/accounts/loginGJAccount.md +++ b/docs/endpoints/accounts/loginGJAccount.md @@ -7,7 +7,7 @@ | Parameter | Explanation | Optional | | :--------- | :---------------------------------------------------------------------------------------------------- | :------- | | `udid` | [The user's Universal Unique Identifier](https://en.wikipedia.org/wiki/Universally_unique_identifier) | `False` | -| `username` | The username for the account the player is trying to log into | `False` | +| `userName` | The username for the account the player is trying to log into | `False` | | `password` | The plaintext password for the account the player is trying to log into | `False` | | `sID` | The player's steam ID | `True` | | `secret` | Account Secret: `Wmfv3899gc9` | `False` | From 7209743ef87ce05dcdea524404b82af0c919dfb4 Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Thu, 14 Nov 2024 05:58:44 +0100 Subject: [PATCH 363/389] Update gauntlets to the current state - Update published gauntlets - Add 2.207 ones without IDs - Format the table in md a bit --- docs/resources/server/gauntlet.md | 105 ++++++++++++++++-------------- 1 file changed, 55 insertions(+), 50 deletions(-) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index 55a3dd703..61b78d1df 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -33,57 +33,62 @@ Here is a table which shows which `gauntletID` corresponds to a specific gauntle Note: Bolded gauntlet names are the ones that are added in-game, and the rest are yet to be added -| ID ⠀| Name | +| ID | Name | |:---|:-----| - | 1| **Fire**| - | 2| **Ice**| - | 3| **Poison**| - | 4| **Shadow**| - | 5| **Lava**| - | 6| **Bonus**| - | 7| **Chaos**| - | 8| **Demon**| - | 9| **Time**| - | 10| **Crystal**| - | 11| **Magic**| - | 12| **Spike**| - | 13| **Monster**| - | 14| **Doom**| - | 15| **Death**| - | 16| Forest| - | 17| Rune| - | 18| Force| - | 19| Spooky| - | 20| Dragon| - | 21| **Water**| - | 22| Haunted| - | 23| Acid| - | 24| Witch| - | 25| Power| - | 26| Potion| - | 27| Snake| - | 28| Toxic| - | 29| Halloween| - | 30| Treasure| - | 31| Ghost| - | 32| Gem| - | 33| Inferno| - | 34| **Portal**| - | 35| **Strange**| - | 36| **Fantasy**| - | 37| Christmas| - | 38| Surprise| - | 39| **Mystery**| - | 40| **Cursed**| - | 41| Cyborg| - | 42| **Castle**| - | 43| Grave| - | 44| Temple| - | 46| **World**| - | 47| **Galaxy**| - | 48| **Universe**| - | 49| **Discord**| - | 50| **Split**| +| 1 | **Fire** | +| 2 | **Ice** | +| 3 | **Poison** | +| 4 | **Shadow** | +| 5 | **Lava** | +| 6 | **Bonus** | +| 7 | **Chaos** | +| 8 | **Demon** | +| 9 | **Time** | +| 10 | **Crystal** | +| 11 | **Magic** | +| 12 | **Spike**| +| 13 | **Monster** | +| 14 | **Doom** | +| 15 | **Death** | +| 16 | **Forest** | +| 17 | Rune | +| 18 | Force | +| 19 | Spooky | +| 20 | Dragon | +| 21 | **Water** | +| 22 | **Haunted** | +| 23 | Acid | +| 24 | Witch | +| 25 | Power | +| 26 | Potion | +| 27 | Snake | +| 28 | Toxic | +| 29 | **Halloween** | +| 30 | Treasure | +| 31 | Ghost | +| 32 | Gem | +| 33 | **Inferno** | +| 34 | **Portal** | +| 35 | **Strange** | +| 36 | **Fantasy** | +| 37 | Christmas | +| 38 | Surprise | +| 39 | **Mystery** | +| 40 | **Cursed** | +| 41 | **Cyborg** | +| 42 | **Castle** | +| 43 | Grave | +| 44 | Temple | +| 46 | **World** | +| 47 | **Galaxy** | +| 48 | **Universe** | +| 49 | **Discord** | +| 50 | **Split** | +| 51 | **NCS I** | +| 52 | **NCS II** | +| ? | Space | +| ? | Cosmos | + ### Trivia - Gauntlets use the same response parser as [MapPacks](/resources/server/mappack) but they do not share the full range of features mappacks have From 5e58fb5ae05b3130bd5ea602c1d8ccb7a249819f Mon Sep 17 00:00:00 2001 From: Rynat <106476245+Rynat86@users.noreply.github.com> Date: Wed, 27 Nov 2024 15:55:40 +0100 Subject: [PATCH 364/389] Update GS_Value.md --- docs/resources/client/gamesave/GS_Value.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index a809372e3..6ea94a51e 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -21,10 +21,10 @@ GS values contain Information regarding certain aspects of the game | 13 | Total Diamonds | | 14 | current orbs | | 15 | Completed Daily Levels | -| 16 | Fire Shards | -| 17 | Ice Shards | -| 18 | Poison Shards | -| 19 | Shadow Shards | +| 16 | Shadow Shards | +| 17 | Poison Shards | +| 18 | Fire Shards | +| 19 | Ice Shards | | 20 | Lava Shards | | 21 | Demon Keys| | 22 | Total Orbs Collected | From 2d71c1b7682667819a5a0f59c012d81338605706 Mon Sep 17 00:00:00 2001 From: Rynat <106476245+Rynat86@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:38:03 +0100 Subject: [PATCH 365/389] New GS Values from 2.2074 --- docs/resources/client/gamesave/GS_Value.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/resources/client/gamesave/GS_Value.md b/docs/resources/client/gamesave/GS_Value.md index 6ea94a51e..152b3b626 100644 --- a/docs/resources/client/gamesave/GS_Value.md +++ b/docs/resources/client/gamesave/GS_Value.md @@ -47,6 +47,8 @@ GS values contain Information regarding certain aspects of the game | 39 | Soul Path Progress | | 40 | Amount of Completed Gauntlets | | 41 | List Rewards | +| 42 | Completed Insane Levels | +| 43 | Wraith Chest Keys | | unique_{LevelID}_{Coins Collected} | The Coins Collected on the Official Levels | unique_secretB03 | Glubfub coin | | unique_secret04 | Official level page secret coin | From d776661f1f6dd677cba96c407745e025d4f5ba40 Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Sun, 29 Dec 2024 00:14:22 +0100 Subject: [PATCH 366/389] update stuff --- generator.js | 18 +++++++++++------- package.json | 5 +++-- scripts/installPackages.js | 18 +++++++++++------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/generator.js b/generator.js index d166c0e1a..1268f1f93 100644 --- a/generator.js +++ b/generator.js @@ -1,19 +1,23 @@ -/* eslint no-console: ["error", { allow: ["log", "warn", "error"] }] */ -const childProcess = require("child_process"); -const chalk = require("chalk"); -const os = require("os"); +// eslint-disable-next-line no-console +import { exec } from 'child_process'; +import chalk from 'chalk'; +import os from 'os'; -require("./scripts/installPackages.js"); // install packages +// Import local script as an ES module +import './scripts/installPackages.js'; -// serve data +// Define the command to serve documentation let command = "node ./node_modules/docsify-cli/bin/docsify serve ./docs --port 9505"; if (os.platform() === "win32") { + // Adjust command for Windows command = "node \"./node_modules/docsify-cli/bin/docsify\" serve ./docs --port 9505"; } console.log(`${chalk.hex("#66d9ff")("Running Command: ")} ${command}\n`); -const docsProcess = childProcess.exec(command); +// Execute the command +const docsProcess = exec(command); +// Handle process exit docsProcess.on("exit", () => process.exit(0)); \ No newline at end of file diff --git a/package.json b/package.json index 3039af308..0aa5bd071 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "gddocs", "version": "0.0.1", + "type": "module", "description": "GD Documentation", "main": "generator.js", "scripts": { @@ -20,7 +21,7 @@ }, "homepage": "https://github.com/gd-programming/gddocs#readme", "dependencies": { - "chalk": "^4.0.0", - "docsify-cli": "^4.4.0" + "chalk": "^5.4.1", + "docsify-cli": "^4.4.4" } } diff --git a/scripts/installPackages.js b/scripts/installPackages.js index abd31377f..fb2cbd5a5 100644 --- a/scripts/installPackages.js +++ b/scripts/installPackages.js @@ -1,14 +1,18 @@ // install_packages.js // made by Homura -const chalk = require("chalk"); -const fs = require("fs"); -const childProcess = require("child_process"); +import chalk from 'chalk'; +import fs from 'fs'; +import { exec } from 'child_process'; -const package = require("../package.json"); -const missing = Object.keys(package.dependencies) - .filter((package) => !fs.existsSync(`../node_modules/${package}`)); +// Read package.json synchronously +const packageJsonContent = fs.readFileSync(new URL('../package.json', import.meta.url)); +const packageJson = JSON.parse(packageJsonContent); + +// Filter out packages that are not installed +const missing = Object.keys(packageJson.dependencies) + .filter((packageName) => !fs.existsSync(`../node_modules/${packageName}`)); if (missing.length > 0) { console.log(chalk.hex("#79b0fc")("Installing Packages: ") + missing.join(", ")); - childProcess.exec(`npm i --save ${missing.join(" ")}`); + exec(`npm i --save ${missing.join(" ")}`); } \ No newline at end of file From 3f724ff3a7e54b33ba96ff30e847e4b92378371d Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Sun, 29 Dec 2024 01:08:00 +0100 Subject: [PATCH 367/389] rename "Level Object" to "Level String" and fixes --- docs/_sidebar.md | 2 +- docs/endpoints/levels/getGJLevels21.md | 7 ++++--- docs/endpoints/lists/getGJLevelLists.md | 6 +++--- docs/index.html | 2 +- .../resources/client/level-components/color-string.md | 1 - .../client/level-components/guideline-string.md | 1 - .../client/level-components/inner-level-string.md | 1 - .../{level-object.md => level-string.md} | 11 ++++------- 8 files changed, 13 insertions(+), 18 deletions(-) rename docs/resources/client/level-components/{level-object.md => level-string.md} (99%) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 85afb3281..2a87bd0a2 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -43,7 +43,7 @@ - [Enumerations](/resources/client/level-components/enumerations.md) - [Level Colors](/resources/client/level-components/level-colors.md) - [Inner Level String](/resources/client/level-components/inner-level-string.md) - - [Level Object](/resources/client/level-components/level-object.md) + - [Level String](/resources/client/level-components/level-string.md) - [Color String](/resources/client/level-components/color-string.md) - [Guideline String](/resources/client/level-components/guideline-string.md) - [Particle String](/resources/client/level-components/particle-string.md) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index b1e4af037..0a711baa7 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -98,7 +98,7 @@

- len + len | len | Value | | :-: | ------ | @@ -107,6 +107,7 @@ | 2 | Medium | | 3 | Long | | 4 | XL | +| 5 | Platformer |
@@ -120,9 +121,9 @@ levels#creators#songs#page info#hash where: -- `levels` is a list of [Level Objects](/resources/client/level-components/level-object.md) separated by `|` +- `levels` is a list of [Level Objects](/resources/server/level.md) separated by `|` - `creators` is a list of creators separated by `|`, each in the format `userID:username:accountID` -- `songs` is a list of [Song Objects](/resources/server/song.md) separated by `~:~` +- `songs` is a list of [Song Objects](/resources/server/song.md) separated by `:` - `page info` is in the format `total:offset:amount` where: - `total` - total number of levels for the query - `offset` - offset from which the current page starts diff --git a/docs/endpoints/lists/getGJLevelLists.md b/docs/endpoints/lists/getGJLevelLists.md index d7a3688fb..85d2f28f4 100644 --- a/docs/endpoints/lists/getGJLevelLists.md +++ b/docs/endpoints/lists/getGJLevelLists.md @@ -78,6 +78,7 @@ | 2 | Medium | | 3 | Long | | 4 | XL | +| 5 | Platformer | @@ -86,14 +87,13 @@ A successful level search will return the data in the format ``` -levels#creators#songs#page info#hash +levels#creators#page info#hash ``` where: -- `levels` is a list of [Level Objects](/resources/client/level-components/level-object.md) separated by `|` +- `levels` is a list of [List Objects](/resources/server/list.md) separated by `|` - `creators` is a list of creators separated by `|`, each in the format `userID:username:accountID` -- `songs` is a list of [Song Objects](/resources/server/song.md) separated by `~:~` - `page info` is in the format `total:offset:amount` where: - `total` - total number of levels for the query - `offset` - offset from which the current page starts diff --git a/docs/index.html b/docs/index.html index c32fee13d..15a301c27 100644 --- a/docs/index.html +++ b/docs/index.html @@ -34,7 +34,7 @@ paths: 'auto', placeholder: 'Type to search', noData: 'No Results!', - depth: 6, + depth: 3, hideOtherSidebarContent: true }, notFoundPage: true, diff --git a/docs/resources/client/level-components/color-string.md b/docs/resources/client/level-components/color-string.md index cd9d6ca64..ecc806dd5 100644 --- a/docs/resources/client/level-components/color-string.md +++ b/docs/resources/client/level-components/color-string.md @@ -1,6 +1,5 @@ # Client Color String Resource -## Color String The color string contains the information for the initial state of the colors being used in the level. Its raw representation is formatted as follows: `{color}|{color}|...`, where `color` is formatted as: diff --git a/docs/resources/client/level-components/guideline-string.md b/docs/resources/client/level-components/guideline-string.md index da3bcbae4..09af4ddd7 100644 --- a/docs/resources/client/level-components/guideline-string.md +++ b/docs/resources/client/level-components/guideline-string.md @@ -1,6 +1,5 @@ # Client Guideline String Resource -## Guideline String The guideline string is the linearized string format of the guidelines of a level. It is contained within the [inner level string](inner-level-string.md). It is formatted as follows: `{guideline}~{guideline}~{guideline}~...`, where `guideline` is formatted as: diff --git a/docs/resources/client/level-components/inner-level-string.md b/docs/resources/client/level-components/inner-level-string.md index 3fb58efe6..c66c9f94e 100644 --- a/docs/resources/client/level-components/inner-level-string.md +++ b/docs/resources/client/level-components/inner-level-string.md @@ -1,6 +1,5 @@ # Client Inner Level String Resource -## Inner Level String The inner level string consists of information about the starting state of the level and the objects it contains. It is encoded in [base64](). Its raw representation is formatted as follows: `{level_start};{object_string}`, where diff --git a/docs/resources/client/level-components/level-object.md b/docs/resources/client/level-components/level-string.md similarity index 99% rename from docs/resources/client/level-components/level-object.md rename to docs/resources/client/level-components/level-string.md index 93ec650cc..b842b2b97 100644 --- a/docs/resources/client/level-components/level-object.md +++ b/docs/resources/client/level-components/level-string.md @@ -1,9 +1,6 @@ -# Client Level Object Resource +# Client Level String Resource -## Level Object -A level object is an object within a Geometry Dash level, containing data about its behavior. - -### Object String +## Object String The object string is contained within the [inner level string](). It is formatted as follows: `{object};{object};{object};...`, where `object` is formatted as: @@ -41,8 +38,8 @@ Property keys reflect the keys found in the following table, whereas property va | **[HSV]()** | `{h}a{s}a{v}a{s_checked}a{v_checked}`, where each name reflects the respective HSV property | | **string** | raw string without quotation marks (e.g. `ExampleString`) | -### Level Object Data -**Level Object Structure** +### Level String Data +**Level String Structure** 2.2 adds a ton of new object properties. Most of the object properties can be found [here](https://flowvix.github.io/gd-info-explorer/). You can access the old table of object properties (with all 2.1 properties and a few 2.2 properties) below if you need it for whatever reason. From 6c28ee95e012591b66fd77cde3a0b7442baf14af Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Sun, 29 Dec 2024 01:17:50 +0100 Subject: [PATCH 368/389] rename inner level string to start object --- docs/_sidebar.md | 2 +- .../resources/client/level-components/guideline-string.md | 2 +- docs/resources/client/level-components/level-colors.md | 2 +- .../{inner-level-string.md => level-start.md} | 8 ++++---- docs/resources/client/level.md | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) rename docs/resources/client/level-components/{inner-level-string.md => level-start.md} (97%) diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 2a87bd0a2..4e858c46c 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -42,7 +42,7 @@ - [Capacity String](/resources/client/level-components/capacity-string.md) - [Enumerations](/resources/client/level-components/enumerations.md) - [Level Colors](/resources/client/level-components/level-colors.md) - - [Inner Level String](/resources/client/level-components/inner-level-string.md) + - [Start Level String](/resources/client/level-components/level-start.md) - [Level String](/resources/client/level-components/level-string.md) - [Color String](/resources/client/level-components/color-string.md) - [Guideline String](/resources/client/level-components/guideline-string.md) diff --git a/docs/resources/client/level-components/guideline-string.md b/docs/resources/client/level-components/guideline-string.md index 09af4ddd7..2be5e1e83 100644 --- a/docs/resources/client/level-components/guideline-string.md +++ b/docs/resources/client/level-components/guideline-string.md @@ -1,6 +1,6 @@ # Client Guideline String Resource -The guideline string is the linearized string format of the guidelines of a level. It is contained within the [inner level string](inner-level-string.md). It is formatted as follows: +The guideline string is the linearized string format of the guidelines of a level. It is contained within the [inner level string](level-start.md). It is formatted as follows: `{guideline}~{guideline}~{guideline}~...`, where `guideline` is formatted as: diff --git a/docs/resources/client/level-components/level-colors.md b/docs/resources/client/level-components/level-colors.md index 4d841fe2c..022aca1ee 100644 --- a/docs/resources/client/level-components/level-colors.md +++ b/docs/resources/client/level-components/level-colors.md @@ -39,7 +39,7 @@ This class contains a dynamic color copied from another color channel. This colo | Copy Opacity | **bool** | This determines whenever CopyColor should also copy the opacity belonging to the color channel in `Copy Color ID` | | Opacity | **float** | The alpha component of the Copy Color. If `Copy Opacity` is true. This property is ignored. | | Blending | **bool** | The blending property of the CopyColor since it cannot be copied | -| Copy HSV | **[HSV](resources/client/level-components/level-object.md?id=object-string)** | The HSV property that changes the color's tint depending on the value | +| Copy HSV | **[HSV](resources/client/level-components/level-string.md?id=object-string)** | The HSV property that changes the color's tint depending on the value | ### Determining which class is used Here is a simple JavaScript function that determines what color class the color object has: diff --git a/docs/resources/client/level-components/inner-level-string.md b/docs/resources/client/level-components/level-start.md similarity index 97% rename from docs/resources/client/level-components/inner-level-string.md rename to docs/resources/client/level-components/level-start.md index c66c9f94e..63f55144a 100644 --- a/docs/resources/client/level-components/inner-level-string.md +++ b/docs/resources/client/level-components/level-start.md @@ -1,16 +1,16 @@ -# Client Inner Level String Resource +# Client Level Start String -The inner level string consists of information about the starting state of the level and the objects it contains. It is encoded in [base64](). Its raw representation is formatted as follows: +The start level string consists of information about the starting state of the level and the objects it contains. It is encoded in [base64](). Its raw representation is formatted as follows: `{level_start};{object_string}`, where - `level_start` is the level start object, - `object_string` is the [object string](). -Theoretically, the inner level string in its entirety is the object string, however the level start object is treated specially, unlike every other object, and doesn't even have an ID. +Theoretically, the start level string in its entirety is the object string, however the level start object is treated specially, unlike every other object, and doesn't even have an ID. ## Level Start Object -The level start object is still an object and formated exactly like a normal [level object](level-object.md), but has the following properties instead: +The level start object has the following properties, formatted as `{key},{value},{key},{value}` | Key | Name | Type | Description | |:-----|:-----------------------|:--------------------------------------------|:---------------------------------------------------------------------------------------------------------------| diff --git a/docs/resources/client/level.md b/docs/resources/client/level.md index c45d59be0..e67472ecf 100644 --- a/docs/resources/client/level.md +++ b/docs/resources/client/level.md @@ -13,7 +13,7 @@ A level is a playable object in Geometry Dash, namely coming with data that expl | k1 | Level ID | **integer** | the id of the level | | k2 | Level Name | **string** | the name of the level | | k3 | Description | **string** | the level description, encoded in [base64](https://en.wikipedia.org/wiki/Base64) | -| k4 | Inner Level String | **[inner level string](/resources/client/level-components/inner-level-string.md)** | the inner level string, or the playable level | +| k4 | Start Level Object | **[Start Object String](/resources/client/level-components/level-start.md)** | the inner level string, or the playable level | | k5 | Creator | **[user](./user.md)Name** | the name of the level creator | | k6 | UserID | **integer** | The UserID of the level Creator | | k7 | level difficulty | **integer** | the difficulty the level has | From 7c88d0b1ff6a7a740f9ccad04aec417d15b56cf4 Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Sun, 29 Dec 2024 01:37:55 +0100 Subject: [PATCH 369/389] more fix --- docs/resources/client/gamesave/template.md | 2 +- docs/resources/client/level-components/level-start.md | 8 ++++---- docs/resources/server/restore.md | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/resources/client/gamesave/template.md b/docs/resources/client/gamesave/template.md index 19617d223..9fe257c85 100644 --- a/docs/resources/client/gamesave/template.md +++ b/docs/resources/client/gamesave/template.md @@ -36,7 +36,7 @@ kCEK 11's are stored in key 3 of kCEK 10 in the following format: ``` -kCEK 11 key 1 is the [object string](/resources/client/level-components/level-object.md) of the template variation. The object string is **unencoded** and stored raw. The center point is at X: 0, Y: -90. +kCEK 11 key 1 is the [object string](/resources/client/level-components/level-string.md) of the template variation. The object string is **unencoded** and stored raw. The center point is at X: 0, Y: -90. The keys of the dictionary are 9-bit bitfields (binary numbers) representing the exact type of template variation. The first bit is reserved and is always set to `1`. Other bits represent: diff --git a/docs/resources/client/level-components/level-start.md b/docs/resources/client/level-components/level-start.md index 63f55144a..30dfdecec 100644 --- a/docs/resources/client/level-components/level-start.md +++ b/docs/resources/client/level-components/level-start.md @@ -15,9 +15,9 @@ The level start object has the following properties, formatted as `{key},{value} | Key | Name | Type | Description | |:-----|:-----------------------|:--------------------------------------------|:---------------------------------------------------------------------------------------------------------------| | kA1 | AudioTrack | **Integer** | The audio track which the level uses | -| kA2 | Gamemode | **[Gamemode](enumerations.md)** | the gamemode the player starts with | +| kA2 | Gamemode | **[Gamemode](resources/client/level-components/enumerations?id=gamemode)** | the gamemode the player starts with | | kA3 | Mini Mode | **bool** | determines whether the player starts off as mini Mode | -| kA4 | Speed | **[Speed](enumerations.md)** | the speed of the level at the start | +| kA4 | Speed | **[Speed](resources/client/level-components/enumerations?id=speed)** | the speed of the level at the start | | kA5 | Obj-2 Blending | **bool** | (deprecated since 1.9) Whether Object-2 (color channel 1) uses blending or not | | kA6 | Background Texture ID | **integer** | the ID of the background texture that is being used in the level
(enumerated in the same order as appears) | | kA7 | Ground Texture ID | **integer** | the ID of the ground texture that is being used in the level
(enumerated in the same order as appears) | @@ -27,7 +27,7 @@ The level start object has the following properties, formatted as `{key},{value} | kA11 | Flip Gravity | **bool** | determines whether the player starts off in flipped Gravity | | kA12 | Color3 Blending (UNUSED)| **bool** | Unused, apparently meant to determine whether color channel 3 is blending or not | | kA13 | Song Offset | **float** | the song offset in seconds from which the level begins | -| kA14 | Guidelines | **[Guideline String](guideline-string.md)** | the editor song guidelines of the level | +| kA14 | Guidelines | **[Guideline String](resources/client/level-components/guideline-string.md)** | the editor song guidelines of the level | | kA15 | Fade In | **bool** | determines whether the song will fade in as soon as the level starts | | kA16 | Fade Out | **bool** | determines whether the song will fade in as soon as the level ends | | kA17 | Ground Line | **integer** | the ID of the ground line that is being used in the level | @@ -51,7 +51,7 @@ The level start object has the following properties, formatted as `{key},{value} | kA42 | Reverse Sync | **bool** | (Compatibility setting) Whether the player's speed is changed when reversing to preserve music sync | | kA43 | No Time Penalty | **bool** | Whether you get a point penalty for time (0) or not (1) in platformer | | kA45 | Decrease Boost Slide | **bool** | (Compatibility setting) Whether the player receives a lesser boost in Platformer when boosted by dash orb or moving platforms| -| kS38 | Colors | **[Color String](color-string.md)** | the color channels that are being used in this level | +| kS38 | Colors | **[Color String](resources/client/level-components/color-string.md)** | the color channels that are being used in this level | | kS39 | Color Page | **integer** | the color page which was last displayed in the color channel display window | ***Pre-2.0 Keys*** diff --git a/docs/resources/server/restore.md b/docs/resources/server/restore.md index 54839becd..33f9d52ab 100644 --- a/docs/resources/server/restore.md +++ b/docs/resources/server/restore.md @@ -2,7 +2,7 @@ ## RestoreGJItems -`Restore` was a feature used in Geometry dash from versions `1.7 - 2.0` and it was used as an alternative to the [Account System](/topics/accounts.md) that is currently used as of 2.206 +`Restore` was a feature used in Geometry dash from versions `1.7 - 2.0` and it was used as an alternative to the [Account System](resources/topics/accounts.md) that is currently used as of 2.206 A typical Gauntlet Server response is structured with a `key:value:key:value` pairing *Official Levels behave a bit differently as you will find out further into his page* From 1410b881e45cd3dbde00aeeb6f99435f84fe8349 Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Mon, 30 Dec 2024 13:58:09 +0100 Subject: [PATCH 370/389] add myself to credits + fixes --- docs/CREDITS.md | 8 +-- docs/endpoints/lists/deleteGJLevelList.md | 5 +- docs/temp/wip/2.2/getGJLevelLists.md | 69 ----------------------- 3 files changed, 5 insertions(+), 77 deletions(-) delete mode 100644 docs/temp/wip/2.2/getGJLevelLists.md diff --git a/docs/CREDITS.md b/docs/CREDITS.md index 7db0c3808..094d83565 100644 --- a/docs/CREDITS.md +++ b/docs/CREDITS.md @@ -14,13 +14,7 @@ - [Rekkon](https://github.com/Rekkonnect) - [zmx](https://github.com/qimiko) - [13laze](https://github.com/KiFilterFiberContext) - - - - - - - +- [iAndy_HD3](https://github.com/iAndyHD3) diff --git a/docs/endpoints/lists/deleteGJLevelList.md b/docs/endpoints/lists/deleteGJLevelList.md index 585504359..c09c66f67 100644 --- a/docs/endpoints/lists/deleteGJLevelList.md +++ b/docs/endpoints/lists/deleteGJLevelList.md @@ -38,6 +38,9 @@ Returns 1 if deleted, -1 if it failed or the list does not exist. import requests # With this code, DevExit is deleting the list with ID 414808 +headers = { + "User-Agent": "" +} data = { "accountID": 173831, # DevExit's account ID @@ -46,7 +49,7 @@ data = { "secret": "Wmfv2898gc9" } -req = requests.post("http://boomlings.com/database/deleteGJLevelList.php", data=data) +req = requests.post("http://www.boomlings.com/database/deleteGJLevelList.php", data=data, headers=headers) print(req.text) ``` diff --git a/docs/temp/wip/2.2/getGJLevelLists.md b/docs/temp/wip/2.2/getGJLevelLists.md deleted file mode 100644 index 5d8c38831..000000000 --- a/docs/temp/wip/2.2/getGJLevelLists.md +++ /dev/null @@ -1,69 +0,0 @@ -# getGJLevelLists.php - -Gets a list of levels. - -## Parameters - -### Required Parameters - -**secret** - Wmfd2893gb7 - -### Optional Parameters - -**accountID** - The account ID of the user who is searching the levels. Only sent when **type** is set to 8, 13 or when **type** is set to 5 and you are loading your own levels. - -**type** - Controls the fetch priority. - -| type | desc | -| ---- | ---- | -| 0 | most liked | -| 1 | most downloaded | -| 4 | recent | -| 5 | user's levels (uses the player ID, **not the account ID,** in the `str` parameter to get which user) | -| 6 | featured | -| 11 | recently awarded | -| 12 | levels from people you follow | -| 13 | friends | - - -**str** - Search string, required when `type` is 5 - -**diff** - Difficulty filter. A list of integers denoting the different difficulties. Negative difficulties are ignored when any positive one is specified. - -| diff | desc | -| ---- | ---- | -| -1 | N/A (doesn't work, always returns no results) | -| -2 | Demons (use the `demonFilter` parameter to denote which demon type to search) (exclusive from -3) | -| -3 | Auto (exclusive from -2) | -| 1 | Easy | -| 2 | Normal | -| 3 | Hard | -| 4 | Harder | -| 5 | Insane | -| 6–10 | Easy to Extreme Demon, respectively | - -**star** - Rated filter. Not sent when off, 1 for on. - -**followed** - Required if `type` is 12. A comma separated list of player IDs, **not account IDs** of the people you follow. - -## Response - -Returns a list of [level objects](/resources/server/level) separated by pipes `|` and sorted by the parameters, a list of objects denoting the authors sorted by increasing player ID (format is `PLAYERID:USERNAME:ACCOUNTID`) which are also separated by pipes `|`, and a list of [song objects](/resources/server/song) sorted by increasing song ID and separated by `~:~`. The indexers for each are `:`, `:` and `~|~` respectively. - -## Example - - - -### **curl** - -```cmd -curl -H "User-Agent:" http://www.boomlings.com/database/getGJLevelLists.php -X POST -d "secret=Wmfd2893gb7&type=6" -``` - - -**Response** -```py -1:17:2:The Demon Trial:3:Q2FuIHlvdSBiZWF0IGFueXRoaW5nPw==:5:1:49:1187377:50:YunHaSeu14:10:12:7:10:14:2:19:1:51:10565740,3979721,28220417,42584142:28:1687427379:29:0|1:16:2:My New List:3:U2Vjb25kIGxpc3QuIFRlc3RpbmcgdmVyc2lvbnMu:5:4:49:71:50:RobTop:10:11:7:1:14:1:19:1:51:91530036,91427162:28:1687427214:29:1687478036#16:RobTop:71|36314:YunHaSeu14:1187377#1:0:10#f5da5823d94bbe7208dd83a30ff427c7d88fdb99 -``` - - From a37812fe6e87e9dc9707e6ade5741f283307650b Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Mon, 30 Dec 2024 14:56:54 +0100 Subject: [PATCH 371/389] remove chalk dependency --- docs/endpoints/levels/getGJLevels21.md | 2 +- generator.js | 9 ++++++--- package.json | 1 - scripts/installPackages.js | 3 +-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/endpoints/levels/getGJLevels21.md b/docs/endpoints/levels/getGJLevels21.md index 0a711baa7..74ff72ac5 100644 --- a/docs/endpoints/levels/getGJLevels21.md +++ b/docs/endpoints/levels/getGJLevels21.md @@ -98,7 +98,7 @@
- len + len | len | Value | | :-: | ------ | diff --git a/generator.js b/generator.js index 1268f1f93..2b4286736 100644 --- a/generator.js +++ b/generator.js @@ -1,6 +1,5 @@ // eslint-disable-next-line no-console import { exec } from 'child_process'; -import chalk from 'chalk'; import os from 'os'; // Import local script as an ES module @@ -14,10 +13,14 @@ if (os.platform() === "win32") { command = "node \"./node_modules/docsify-cli/bin/docsify\" serve ./docs --port 9505"; } -console.log(`${chalk.hex("#66d9ff")("Running Command: ")} ${command}\n`); +console.log(`${("Running Command: ")} ${command}\n`); // Execute the command const docsProcess = exec(command); +docsProcess.on("exit", () => process.exit(0)); + +if(docsProcess.exitCode === null) { + console.log("http://localhost:9505") +} // Handle process exit -docsProcess.on("exit", () => process.exit(0)); \ No newline at end of file diff --git a/package.json b/package.json index 0aa5bd071..7be6ea7c2 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ }, "homepage": "https://github.com/gd-programming/gddocs#readme", "dependencies": { - "chalk": "^5.4.1", "docsify-cli": "^4.4.4" } } diff --git a/scripts/installPackages.js b/scripts/installPackages.js index fb2cbd5a5..12afaba26 100644 --- a/scripts/installPackages.js +++ b/scripts/installPackages.js @@ -1,6 +1,5 @@ // install_packages.js // made by Homura -import chalk from 'chalk'; import fs from 'fs'; import { exec } from 'child_process'; @@ -13,6 +12,6 @@ const missing = Object.keys(packageJson.dependencies) .filter((packageName) => !fs.existsSync(`../node_modules/${packageName}`)); if (missing.length > 0) { - console.log(chalk.hex("#79b0fc")("Installing Packages: ") + missing.join(", ")); + console.log(("Installing Packages: ") + missing.join(", ")); exec(`npm i --save ${missing.join(" ")}`); } \ No newline at end of file From 30167460b3e67f3716dba6625b3967a16d8f9fdd Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Mon, 30 Dec 2024 15:09:17 +0100 Subject: [PATCH 372/389] Update gauntlet.md --- docs/resources/server/gauntlet.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/resources/server/gauntlet.md b/docs/resources/server/gauntlet.md index 61b78d1df..9766a4070 100644 --- a/docs/resources/server/gauntlet.md +++ b/docs/resources/server/gauntlet.md @@ -52,7 +52,7 @@ Note: Bolded gauntlet names are the ones that are added in-game, and the rest ar | 15 | **Death** | | 16 | **Forest** | | 17 | Rune | -| 18 | Force | +| 18 | **Force** | | 19 | Spooky | | 20 | Dragon | | 21 | **Water** | @@ -71,7 +71,7 @@ Note: Bolded gauntlet names are the ones that are added in-game, and the rest ar | 34 | **Portal** | | 35 | **Strange** | | 36 | **Fantasy** | -| 37 | Christmas | +| 37 | **Christmas** | | 38 | Surprise | | 39 | **Mystery** | | 40 | **Cursed** | From 933760d29f2c9435c752323248fbdf338e334083 Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Mon, 30 Dec 2024 15:34:54 +0100 Subject: [PATCH 373/389] change level to list in getGJLevelLists.md --- docs/endpoints/lists/getGJLevelLists.md | 6 +++--- generator.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/endpoints/lists/getGJLevelLists.md b/docs/endpoints/lists/getGJLevelLists.md index 85d2f28f4..3cdfa0e3b 100644 --- a/docs/endpoints/lists/getGJLevelLists.md +++ b/docs/endpoints/lists/getGJLevelLists.md @@ -84,15 +84,15 @@ ## Response -A successful level search will return the data in the format +A successful list search will return the data in the format ``` -levels#creators#page info#hash +lists#creators#page info#hash ``` where: -- `levels` is a list of [List Objects](/resources/server/list.md) separated by `|` +- `lists` is a list of [List Objects](/resources/server/list.md) separated by `|` - `creators` is a list of creators separated by `|`, each in the format `userID:username:accountID` - `page info` is in the format `total:offset:amount` where: - `total` - total number of levels for the query diff --git a/generator.js b/generator.js index 2b4286736..79c446c45 100644 --- a/generator.js +++ b/generator.js @@ -17,10 +17,10 @@ console.log(`${("Running Command: ")} ${command}\n`); // Execute the command const docsProcess = exec(command); -docsProcess.on("exit", () => process.exit(0)); if(docsProcess.exitCode === null) { console.log("http://localhost:9505") } +docsProcess.on("exit", () => process.exit(0)); // Handle process exit From d74cad46d98027def8c52b52a00f9d52c76a5ecb Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Mon, 30 Dec 2024 16:02:17 +0100 Subject: [PATCH 374/389] fix font path --- docs/stylesheets/colour_tags.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/stylesheets/colour_tags.css b/docs/stylesheets/colour_tags.css index 4d39f0fee..64ba06ad7 100644 --- a/docs/stylesheets/colour_tags.css +++ b/docs/stylesheets/colour_tags.css @@ -1,6 +1,6 @@ @font-face { font-family: "TeX Gyre Heros"; - src: url("/assets/fonts/texgyreheros-regular.woff") format("woff"); + src: url("../assets/fonts/texgyreheros-regular.woff") format("woff"); } gdfmt { From fb8f09b5b7f8eee8c0ee7870c0df4e9cc2964109 Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Thu, 2 Jan 2025 19:11:01 +0100 Subject: [PATCH 375/389] endpoint fixes --- docs/endpoints/levels/downloadGJLevel22.md | 5 +---- docs/endpoints/levels/getGJDailyLevel.md | 23 ++++++++++++++----- docs/endpoints/levels/getGJGauntlets21.md | 25 +++++++++++++++------ docs/endpoints/lists/getGJLevelLists.md | 2 +- docs/endpoints/users/getGJUserInfo20.md | 26 +++++++++++++++++----- 5 files changed, 57 insertions(+), 24 deletions(-) diff --git a/docs/endpoints/levels/downloadGJLevel22.md b/docs/endpoints/levels/downloadGJLevel22.md index 2919a8e06..9944cba8b 100644 --- a/docs/endpoints/levels/downloadGJLevel22.md +++ b/docs/endpoints/levels/downloadGJLevel22.md @@ -38,14 +38,11 @@ Downloads a user level and info so it can be played. Returns a [level object](/resources/server/level.md) along with 2 hashes. All of this is separated by `#`. If binary version is 42 or higher, returns data in the following format: ``` -{level}#{hash1}#{hash2}#{unk}#{songMetadata}#{extraArtists} +{level}#{hash1}#{hash2} ``` where: - `{level}` is the level object - `{hash1}` and `{hash2}` are integrity [hashes](/resources/server/hashes.md?id=downloadgjlevel) the GD client uses to validate the response -- `{unk}` is always an empty string. It's unknown if this segment even exists or if the response is just split with 2 `#` characters. -- `{songMetadata}` is the metadata of all the [songs](/resources/server/song.md) used in the level. -- `{extraArtists}` is a key-value pair map of extra artists in the songs. It uses the following format: `{id},{name},{id},{name}...` ## Example diff --git a/docs/endpoints/levels/getGJDailyLevel.md b/docs/endpoints/levels/getGJDailyLevel.md index fca8c8bcb..cedbee0e7 100644 --- a/docs/endpoints/levels/getGJDailyLevel.md +++ b/docs/endpoints/levels/getGJDailyLevel.md @@ -34,19 +34,30 @@ Returns the index of the current daily level and the time left in seconds, separ ```py import requests - +url = "http://www.boomlings.com/database/getGJDailyLevel.php" data = { - "weekly": 1, - "secret": "Wmfd2893gb7" + "secret": "Wmfd2893gb7", + "weekly": "1" +} +headers = { + "User-Agent": "" # Empty User-Agent } -req = requests.post("http://boomlings.com/database/getGJDailyLevel.php", data=data) -print(req.text) +response = requests.post(url, data=data, headers=headers) +print(response.text) ``` +### **curl** + +```plain +curl -X POST http://www.boomlings.com/database/getGJDailyLevel.php -d "secret=Wmfd2893gb7&weekly=1" -A "" +``` + + + **Response** ```py -100146|121576 +2959|19186 ``` diff --git a/docs/endpoints/levels/getGJGauntlets21.md b/docs/endpoints/levels/getGJGauntlets21.md index 667a5b180..59355a15a 100644 --- a/docs/endpoints/levels/getGJGauntlets21.md +++ b/docs/endpoints/levels/getGJGauntlets21.md @@ -22,8 +22,6 @@ Gets the gauntlet levels. A list of [gauntlet objects](/resources/server/gauntlet.md), separated by a pipe `|`, followed by a `#` and then a [hash](/resources/server/hashes.md?id=getgjgauntlets). -## Example - ### **Python** @@ -31,17 +29,30 @@ A list of [gauntlet objects](/resources/server/gauntlet.md), separated by a pipe ```py import requests +url = "http://www.boomlings.com/database/getGJGauntlets21.php" data = { - "secret": "Wmfd2893gb7" + "secret": "Wmfd2893gb7", + "special": 1 +} +headers = { + "User-Agent": "" # Empty User-Agent } -req = requests.post("http://boomlings.com/database/getGJGauntlets21.php", data=data) -print(req.text) +response = requests.post(url, data=data, headers=headers) +print(response.text) + +``` + +### **curl** +```plain +curl -X POST http://www.boomlings.com/database/getGJGauntlets21.php -d "secret=Wmfd2893gb7&special=1" -A "" + ``` + **Response** -```py -1:1:3:27732941,28200611,27483789,28225110,27448202|1:2:3:20635816,28151870,25969464,24302376,27399722|1:3:3:28179535,29094196,29071134,26317634,12107595|1:4:3:26949498,26095850,27973097,27694897,26070995|1:5:3:18533341,28794068,28127292,4243988,28677296|1:6:3:28255647,27929950,16437345,28270854,29394058|1:7:3:25886024,4259126,26897899,7485599,19862531|1:8:3:18025697,23189196,27786218,27728679,25706351#74aeff3cb009cbde1d7235e1c7e74b47d793eb82 +```plain +1:1:3:27732941,28200611,27483789,28225110,27448202|1:2:3:20635816,28151870,25969464,24302376,27399722|1:3:3:28179535,29094196,29071134,26317634,12107595|1:4:3:26949498,26095850,27973097,27694897,26070995|1:5:3:18533341,28794068,28127292,4243988,28677296|1:6:3:28255647,27929950,16437345,28270854,29394058|1:7:3:25886024,4259126,26897899,7485599,19862531|1:8:3:18025697,23189196,27786218,27728679,25706351|1:9:3:40638411,32614529,31037168,40937291,35165900|1:10:3:37188385,35280911,37187779,36301959,36792656|1:11:3:37269362,29416734,36997718,39853981,39853458|1:12:3:27873500,34194741,34851342,36500807,39749578|1:13:3:43908596,41736289,42843431,44063088,44131636|1:14:3:38427291,38514054,36966088,38398923,36745142|1:15:3:44121158,43923301,43537990,33244195,35418014|1:16:3:105693414,86517581,92149907,95484955,106517747|1:18:3:37925002,68048356,110772842,15619194,90809996|1:21:3:57871639,82135935,81764520,80044470,92971865|1:22:3:110679874,110398067,108372523,70511594,82977900|1:29:3:75243812,57953054,102341639,97472588,85257263|1:34:3:91380905,68790607,75603568,57066554,49941534|1:35:3:75101593,62995779,93878047,71496773,58964029|1:36:3:68265721,41092171,99230232,96419926,78878411|1:37:3:92555035,94887416,85219434,89465157,82357008|1:38:3:41429267,66057230,113410989,58968008,66001175|1:40:3:39113837,64896078,95819007,56026863,94266027|1:41:3:96732638,70680001,69487890,89886591,8660411|1:42:3:82261821,97102482,28165621,103877520,108627188|1:43:3:80218929,95436164,64302902,65044525,66960655|1:46:3:83313115,83325036,83302544,83325083,81451870|1:47:3:83294687,83323867,83320529,83315343,83324930|1:48:3:83323273,83025300,83296274,83256789,83323659|1:49:3:89521875,90475659,90117883,88266256,88775556|1:50:3:90459731,90475597,90471222,90251922,90475473#d096d273a40aa7e302764919bcdb76c8abaa8e21 ``` diff --git a/docs/endpoints/lists/getGJLevelLists.md b/docs/endpoints/lists/getGJLevelLists.md index 3cdfa0e3b..8b01bea93 100644 --- a/docs/endpoints/lists/getGJLevelLists.md +++ b/docs/endpoints/lists/getGJLevelLists.md @@ -137,6 +137,6 @@ curl http://www.boomlings.com/database/getGJLevelLists.php -A "" -d "str=my mcdo ### Output -``` +```plain 1:10834:2:my mcdonalds order:3:aSB3YWxrZWQgdG8gbWNkb25hbGRz:5:1:49:6061424:50:tricipital:10:143479:7:10:14:5334:19::51:78111123,80840474,20556675,71480069,51008389,26108947,59604964,190626,53898587,72443435,47499900,89638158,43758774,90640638,96282081,86742812:55:0:56:0:28:1703082168:29:0|1:4406:2:my mcdonalds order:3:aW0gYXQgdGhlIGRyaXZlIHRocnUgLy8gcGFydCAyIG91dCBub3cgYXQgNzIxMTQ=:5:7:49:17062290:50:GD2G:10:90039:7:2:14:4457:19::51:25147297,82785965,11171792,30261946,31496121,71189946,19716898,14456417,4050125,79412478,1442329,67287373,61350256:55:0:56:0:28:1703048969:29:1703631457|1:22325:2:My McDonalds Order:3:YmFuZ2VyIGxpc3QgaWNs:5:1:49:10722530:50:Jexamania:10:8469:7:9:14:222:19::51:25147297,83671207,46104803,72867858,65500565,16683338,32666588,25717922,84904479,92727112,69043485,4846999,58038680,67287373:55:0:56:0:28:1703125026:29:0|1:72114:2:my mcdonalds order 2:3:aSB0aGluayBoZSBsaWVkIGFib3V0IHRoZSBtYWNoaW5lIGJlaW5nIGJyb2tlbiAvLyB0aGUgc2VxdWVsIG5vIG9uZSBhc2tlZCBmb3IgdG8gbXkgbWNkb25hbGRzIG9yZGVy:5:3:49:17062290:50:GD2G:10:4732:7:2:14:156:19::51:25147297,65037091,88758014,59604964,67993675,59966737,56102262,97933043,2056444,85312317,91482208,58038680,46160451,75940156,95959832,81466909,68064189,61350256:55:0:56:0:28:1703631267:29:1703638822|1:16619:2:my mcdonalds order:3:SSBLTk9XIElUJ1MgQkFELCBUSEVSRSBXRVJFTidUIE1BTlkgT1BUSU9OUyE=:5:1:49:14542509:50:ZohMyGoodnessGD:10:2652:7:6:14:44:19::51:47499900,57410100,57474996,84904479,38557238,59157328,87981410,60001202,77367261,41551990,67287373:55:0:56:0:28:1703101621:29:0|1:12460:2:My McDonalds Order:3:bWNkb25hbA==:5:1:49:4236858:50:tim55:10:1198:7:4:14:32:19::51:82931130,69309640,56455492,36619357,55320441:55:0:56:0:28:1703087812:29:0|1:29628:2:My mcdonalds order:3:YmFzZWQgb2ZmIGEgc3BvdGlmeSBwbGF5bGlzdCBvciBzb21ldGhpbmc=:5:3:49:10055542:50:RuSsiaNrobToP:10:1254:7:10:14:17:19::51:78111123,34889235,80840474,11171792,71480069,84904479,97589710,443669,4460853,72443435,97590104,13550658,2056444,86742812:55:0:56:0:28:1703180209:29:1703614964|1:45077:2:My McDonalds Order:3:UmVhbA==:5:1:49:1839061:50:CreatorFreeze:10:503:7:5:14:17:19::51:80840474,30963660,79412478,14456417,61293573,71971062,86929245,86742812,58038680:55:0:56:0:28:1703307069:29:0|1:33953:2:My mcdonalds order:3::5:3:49:14092610:50:RealGDVerse:10:347:7:2:14:16:19::51:82785965,11012303,38557238,18931295,11255719,61408958,26162113,72014001,42633903,13752832,69768064,49186967,77554979,22294605,70549760,66416136,50525701,89933948,37039661,58976282,6988127,86449162,3134009,87727825,82995551,73004601,57585857,82139948,95318968,69925593,1203245,69765381,50647963,67254591,14370474,96968200,93201502,92509265,65430141,56495221,76489404,91963243,41035356,62427241,68752244,69996378,26880009,7360312,79013891,65269818,76963460,88732322,11171792:55:0:56:0:28:1703206770:29:1703428545|1:68104:2:My McDonalds Order:3:TXkgcmVhbCBNY0RvbmFsZHMgb3JkZXIu:5:1:49:25642445:50:Anjixdude25z:10:393:7:9:14:12:19::51:78111123,59413153,12664426,97172976,87995257,85508683,89490621,72811779,10558915,9007089,84904479,27742076,61718673,27090448:55:0:56:0:28:1703571483:29:0#10532982:CreatorFreeze:1839061|14827098:tim55:4236858|15479163:tricipital:6061424|92900676:RuSsiaNrobToP:10055542|98535835:Jexamania:10722530|139957548:RealGDVerse:14092610|147859835:ZohMyGoodnessGD:14542509|25220930:GD2G:17062290|221186876:Anjixdude25z:25642445#9999:0:10#f5da5823d94bbe7208dd83a30ff427c7d88fdb99 ``` diff --git a/docs/endpoints/users/getGJUserInfo20.md b/docs/endpoints/users/getGJUserInfo20.md index 8e30de4e9..6affafeea 100644 --- a/docs/endpoints/users/getGJUserInfo20.md +++ b/docs/endpoints/users/getGJUserInfo20.md @@ -12,7 +12,7 @@ Gets info about a user ### Optional Parameters -**gameVersion** - 21 +**gameVersion** - 22 **binaryVersion** - 35 @@ -20,7 +20,7 @@ Gets info about a user **accountID** - Your accountID -**gjp** - Your [GJP](/topics/encryption/gjp.md) +**gjp2** - Your [GJP](/topics/encryption/gjp.md) ## Response @@ -35,18 +35,32 @@ Returns a [user object](/resources/server/user.md) for the player you want ```py import requests +url = "http://www.boomlings.com/database/getGJUserInfo20.php" data = { "secret": "Wmfd2893gb7", - "targetAccountID": 173831 + "targetAccountID": "173831" } +headers = { + "User-Agent": "" # Empty User-Agent +} + +response = requests.post(url, data=data, headers=headers) +print(response.text) + +``` -req = requests.post('http://boomlings.com/database/getGJUserInfo20.php', data=data) -print(req.text) +### **curl** +```plain +curl -X POST http://www.boomlings.com/database/getGJUserInfo20.php -d "secret=Wmfd2893gb7&targetAccountID=173831" -A "" ``` + + + + **Response** ```py -1:DevExit:2:3935672:13:115:17:606:10:18:11:16:3:5143:46:8531:4:142:8:1:18:0:19:0:50:0:20:UCZoN2WLAooS6uhREa9Cgpwg:21:119:22:22:23:31:24:13:25:30:26:24:28:1:43:2:48:1:30:47981:16:173831:31:0:44:DevExit:45:devexit:49:0:29:1 +1:meluwudy:2:3935672:13:148:17:1068:10:12:11:15:51:10:3:9990:52:320:46:21504:4:476:8:1:18:0:19:0:50:0:20:UCZoN2WLAooS6uhREa9Cgpwg:21:82:22:17:23:113:24:83:25:85:26:24:28:1:43:2:48:2:53:26:54:3:30:29855:16:173831:31:0:44:logout:45:devexit:49:0:55:143,67,56,112,56,1,1,2,1,0,21,14:56:144,157,134,300,190,88,59,67:57:4,7,7,18,16,5,0:29:1 ``` \ No newline at end of file From 9e1bbaf31ccaed7c56c7c7c080ec8c037a18c802 Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Wed, 8 Jan 2025 21:08:34 +0100 Subject: [PATCH 376/389] new GJSecretRewards endpoint + lot of updates --- .../comments/getGJAccountComments20.md | 19 ++- docs/endpoints/comments/getGJComments21.md | 15 +- docs/endpoints/rewards/getGJSecretReward.md | 155 ++++++++++++++++++ docs/endpoints/songs/getGJSongInfo.md | 15 +- docs/resources/client/gamesave/kCEK.md | 1 + docs/topics/vault_codes.md | 2 +- 6 files changed, 199 insertions(+), 8 deletions(-) create mode 100644 docs/endpoints/rewards/getGJSecretReward.md diff --git a/docs/endpoints/comments/getGJAccountComments20.md b/docs/endpoints/comments/getGJAccountComments20.md index 1db147671..d27376ab0 100644 --- a/docs/endpoints/comments/getGJAccountComments20.md +++ b/docs/endpoints/comments/getGJAccountComments20.md @@ -35,18 +35,29 @@ Returns a list of [comment objects](/resources/server/comment.md) separated by a ```py import requests -# This code returns DevExit's account comments. - data = { - "accountID": 173831, # DevExit's account ID + "accountID": 173831, # DevExit's account ID "page": 0, "secret": "Wmfd2893gb7" } -req = requests.post("http://boomlings.com/database/getGJAccountComments20.php", data=data) +headers = { + "User-Agent": "" +} + +url = "http://www.boomlings.com/database/getGJAccountComments20.php" +req = requests.post(url, data=data, headers=headers) print(req.text) ``` +### **curl** + +```plain +curl -X POST "http://www.boomlings.com/database/getGJAccountComments20.php" -H "User-Agent: " -d "accountID=173831&page=0&secret=Wmfd2893gb7" +``` + + + **Response** ```py 2~NTAwMCBzdGFycyE=~4~9~9~2 months~6~1756926|2~Qmxvb2RiYXRoIEdHISEh~4~19~9~6 months~6~1745624|2~QWxsZWdpYW5jZSAxMDAl~4~2~9~6 months~6~1744292|2~SUNEWCAxMDAlIDop~4~1~9~6 months~6~1743608|2~T2ggeWVhaCBDYXRhIGFuZCBUVVAgMTAwJQ==~4~1~9~7 months~6~1742661|2~Mi4xMSBpcyBvdXQgOik=~4~43~9~2 years~6~1295890|2~SSBsaWtlIGhvdyBzb21lb25lIGRpc2xpa2UgYm90dGVkIG1vc3Qgb2YgbXkgY29tbWVudHMgOikgU2hvd3MgdGhhdCBJJ20uLi5mQW1PdVM=~4~16~9~2 years~6~1279970|2~TmVjcm9wb2xpeCBpbiAyMTYgYXR0IGluIHByYWN0aWNl~4~14~9~2 years~6~1264265|2~IkhpIEx1bmEi~4~15~9~3 years~6~1246506|2~TyB3YWl0IG15IDUwdGggZGVtb24gd2FzIGdvaW5nIHRvIGJlIEJ1Y2sgRm9yY2UsIG5vdCByZWFsbHkgY2VsZWJyYXRvcnkuLi4=~4~7~9~3 years~6~1238082#67:0:10 diff --git a/docs/endpoints/comments/getGJComments21.md b/docs/endpoints/comments/getGJComments21.md index 2266cde7f..79759fa31 100644 --- a/docs/endpoints/comments/getGJComments21.md +++ b/docs/endpoints/comments/getGJComments21.md @@ -45,13 +45,24 @@ data = { "secret": "Wmfd2893gb7" } -req = requests.post("http://boomlings.com/database/getGJComments21.php", data=data) +headers = { + "User-Agent": "" +} + +url = "http://www.boomlings.com/database/getGJComments21.php" +req = requests.post(url, data=data, headers=headers) print(req.text) + ``` **Response** ```py -2~ODk4IHRvIGp1c3QgYmVhdCBpbiBwcmFjdGlzZSBtb2RlIGdnIQ==~3~133533914~4~0~7~0~10~0~9~2 minutes~6~31468976:1~depolo~9~41~10~25~11~10~14~1~15~0~16~13735168|2~bm8gY2xpcGVy~3~128127333~4~0~7~0~10~3~9~7 minutes~6~31468705:1~ghjking~9~35~10~15~11~5~14~3~15~2~16~13391416|2~d29yc3QgbGV2ZWwgaW4gdGhlIGdhbWU=~3~19792712~4~0~7~0~10~0~9~11 minutes~6~31468489:1~neondash223~9~44~10~3~11~15~14~1~15~0~16~7609353|2~SGFja2Vy~3~114829268~4~2~7~0~10~0~9~7 hours~6~31448450:1~ThomyTamato~9~35~10~16~11~12~14~4~15~0~16~13280260|2~Z2cgMSBhdHQgKEkgaGFja2VkIGFzIGEgam9rZSk=~3~57842991~4~-4~7~1~10~100~9~8 hours~6~31445587:1~redhotgamerrhg~9~11~10~11~11~5~14~0~15~0~16~8031689|2~aSBjYW50IA==~3~120037785~4~0~7~0~10~10~9~9 hours~6~31441402:1~spot1fy~9~17~10~40~11~41~14~6~15~0~16~11870350|2~cmlwIG1vYmlsZQ==~3~93559688~4~1~7~0~10~0~9~10 hours~6~31437014:1~RandomNameGMD~9~30~10~1~11~12~14~0~15~2~16~10079340|2~Z2cgRVogMiBhdHRlbXB0cyBvbiBtb2JpbGUgWEQ=~3~93957318~4~-4~7~1~10~100~9~10 hours~6~31435874:1~MixtureGD2~9~36~10~40~11~40~14~2~15~2~16~13427406|2~diBCbyB1c2VkIG5vc3Bpa2Ugc28gdGVjaG5pY2FsbHkgbm8=~3~119607081~4~-4~7~1~10~0~9~12 hours~6~31427765:1~DailyChatMoment~9~1~10~12~11~12~14~4~15~2~16~13696752|2~SSBhbSBCbyBJIHBhc3NlZCBpdCB3aXRoIG5vY2xpcCA6RA==~3~130487134~4~-5~7~1~10~100~9~13 hours~6~31421248:1~FernanDash488~9~22~10~9~11~11~14~1~15~0~16~13526460#5705:0:10 +2~NzQgYXR0IHdoYXR0~3~210153877~4~0~7~0~10~4~9~15 minutes~6~46232563:1~dooblom~9~91~10~19~11~11~14~2~15~2~16~23631435|2~QUFBQUFBQUFBQQ==~3~267641474~4~0~7~0~10~37~9~17 minutes~6~46232555:1~CaAlexDa~9~26~10~12~11~2~14~0~15~2~16~19216511|2~SSBzaG91bGQgc3RhcnQgZ3JpbmRpbmcgY2hhbGxlbmdlcyEh~3~263506358~4~0~7~0~10~100~9~31 minutes~6~46232489:1~0bv~9~35~10~3~11~12~14~0~15~0~16~30775227|2~MTk1NiBhdHRlbXB0cyBpbiBwcmFjdGljZSBGSU5BTExZIQ==~3~245747440~4~0~7~0~10~0~9~1 hour~6~46232231:1~artistboylo~9~9~10~6~11~16~14~7~15~2~16~28706271|2~Ui5JLlAgQm8g~3~268611032~4~-2~7~0~10~100~9~5 hours~6~46231318:1~xStixGDx~9~11~10~12~11~12~14~6~15~0~16~31063613|2~bG1hbw==~3~147836572~4~1~7~0~10~5~9~8 hours~6~46231019:1~NGDK~9~1~10~1~11~12~14~6~15~0~16~15162356|2~NzQzIGF0dCBpbiBwcmFjdGljZSx3dw==~3~263745181~4~1~7~0~10~0~9~9 hours~6~46230852:1~eskibime~9~37~10~18~11~12~14~5~15~0~16~30290292|2~d3Rm~3~267359964~4~1~7~0~10~11~9~9 hours~6~46230775:1~knoxoniaa~9~58~10~102~11~12~14~0~15~2~16~30998487|2~W3ZdZXJ0aWNhbCBbc11wZWVkIFtjXW9uc2VydmF0aW9uIGlzIGEgc3VwZXIgbWFyaW8gNjQgc3BlZWRydW5uaW5nIHN0cmF0ZWd5Lg==~3~268138873~4~1~7~0~10~0~9~9 hours~6~46230770:1~ultrabucket~9~108~10~15~11~23~14~0~15~2~16~31054190|2~R0cgMTQgYXR0LiAoSSB3b250IHNob3cgbXkgcGVyY2VudGFnZSBqdXN0IHRydXN0IG1lIG9uIHRoaXMgb25lKQ==~3~116404059~4~1~7~0~10~0~9~10 hours~6~46230718:1~themuffinthief~9~6~10~12~11~9~14~2~15~2~16~18175167#46173:0:10 +``` + +### **curl** +```plain +curl -X POST "http://www.boomlings.com/database/getGJComments21.php" -H "User-Agent: " -d "levelID=60805571&page=0&secret=Wmfd2893gb7" ``` \ No newline at end of file diff --git a/docs/endpoints/rewards/getGJSecretReward.md b/docs/endpoints/rewards/getGJSecretReward.md new file mode 100644 index 000000000..f5cedc286 --- /dev/null +++ b/docs/endpoints/rewards/getGJSecretReward.md @@ -0,0 +1,155 @@ +# getGJRewards.php + +Gets the rewards from the wraith vault depending on the entered code, which can be found in the tower select level screen at the bottom right. + +## Parameters + +### Required Parameters + +**udid** - A unique identifier for the user's device. You can put anything here + +**secret** - Wmfd2893gb7 + +**chk** - 5 random chars appended to the beginning of a random number [XOR](/topics/encryption/xor.md)'d and [URL-Safe Base64](/topics/encryption/base64.md) encoded + +### Optional Parameters + +**gameVersion** - 22 + +**binaryVersion** - 42 + +**gdw** - 0 + +**accountID** - Account ID of the user + +**gjp2** - The user's [GJP2](/topics/encryption/gjp.md) + +**uuid** - Seemingly a random number also used for identifying someone + +## Response + +A list of attributes of the Rewards, separated by colons `:` as follows: +- A random string of 5 characters +- The number used to verify the `chk` +- The rewardID +- The chest type (1 small, 2 large) +- comma separated chest reward in the format `{itemid},{total1}{itemid2}{total2}...` + + +Where each itemID is as follows: +| itemID | Type | +|--------|-------------| +| 1 | Fire Shard | +| 2 | Ice Shard | +| 3 | Poison Shard | +| 4 | Shadow Shard | +| 5 | Lava Shard | +| 6 | Demon Key | +| 7 | Orbs | +| 8 | Diamonds | +| 10 | Earth Shard | +| 11 | Blood Shard | +| 12 | Metal Shard | +| 13 | Light Shard | +| 14 | Soul Shard | +| 15 | Gold Key | + +If the itemID is greater than 1000, it seems to be treated as a special reward (unlock type), where + +| itemID - 1000 | Unlock Type | +|---------------|-------------| +| 1 | Cube | +| 2 | Col1 | +| 3 | Col2 | +| 4 | Ship | +| 5 | Ball | +| 6 | Bird | +| 7 | Dart | +| 8 | Robot | +| 9 | Spider | +| 10 | Streak | +| 11 | Death | +| 12 | GJItem | +| 13 | Swing | +| 14 | Jetpack | +| 15 | ShipFire | + + + +This list is then [XOR](/topics/encryption/xor.md)'d and [URL-Safe Base64](/topics/encryption/base64.md) encoded. Then it is separated with its [hash](/resources/server/hashes.md?id=getgjrewards) by a pipe `|`. It also has a random string of 5 characters appended to the front. + +## Example + + + +### **Python** + +```py +import random +import requests +import base64 + + +def xor_cipher(text: str, key: str) -> str: + """ + XOR cipher function: Encrypts or decrypts a text using a key. + """ + return ''.join( + chr(ord(char) ^ ord(key[i % len(key)])) for i, char in enumerate(text) + ) + + +def generate_chk() -> str: + """ + Generates the 'chk' parameter by combining a random string and + an XOR-ciphered, base64-encoded random integer. + """ + random_string = ''.join(random.choice("1234567890qwertyuiopaqsdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM") for _ in range(5)) + random_number = str(random.randint(10000, 1000000)) + xor_ciphered = xor_cipher(random_number, "59182") + encoded = base64.b64encode(xor_ciphered.encode()).decode() + return random_string + encoded + + +def decode_response(response_text: str) -> str: + """ + Decodes the response text from the server. + """ + try: + encoded_part = response_text.split("|")[0][5:] + decoded_part = base64.urlsafe_b64decode(encoded_part.encode()).decode() + return xor_cipher(decoded_part, "59182") + except Exception: + return response_text + + +url = "https://www.boomlings.com/database/getGJSecretReward.php" +headers = {"User-Agent": ""} +data = { + "accountID": "1688850", #iAndyHD accountID + "binaryVersion": "42", + "gameVersion": "22", + "gjp2": "***", #iAndyHD gjp2 + "secret": "Wmfd2893gb7", + "udid": "ffffffff-88c5-aa6d-ffff-ffffcd72151b", + "uuid": "4460760", + "rewardKey": "backstreetboy", + "chk": generate_chk(), +} +# Send POST request +response = requests.post(url, headers=headers, data=data).text +# Decode and print response +print(f"Response: {response}") +decoded_text = decode_response(response) +print(f"Decoded: {decoded_text}") +``` + +**Response** + + +```plain +Response: bHR3IU2oCVGoPDQgAAgEKCwsDDwsLCQIFAR0LBQ==|4adffcb7db1fdad7a665a96fa68da46157cbed78 +Decoded: fS3lX:498043:31:2:1008,37 +``` + + diff --git a/docs/endpoints/songs/getGJSongInfo.md b/docs/endpoints/songs/getGJSongInfo.md index bac249186..0d2465063 100644 --- a/docs/endpoints/songs/getGJSongInfo.md +++ b/docs/endpoints/songs/getGJSongInfo.md @@ -12,7 +12,20 @@ Gets info about a newgrounds song. ### Optional Parameters -N/A +**accountID** + +**binaryVersion** - 45 + +**gameVersion** - 22 + +**gjp2** + +**secret** + +**udid** + +**uuid** + ## Response diff --git a/docs/resources/client/gamesave/kCEK.md b/docs/resources/client/gamesave/kCEK.md index a7b9f42bf..7a6a13fb6 100644 --- a/docs/resources/client/gamesave/kCEK.md +++ b/docs/resources/client/gamesave/kCEK.md @@ -43,6 +43,7 @@ | 12| Metal Shard | | 13| Light Shard | | 14| Soul Shard | +| 15| Gold Key | ### GJRewardItem GS Keys diff --git a/docs/topics/vault_codes.md b/docs/topics/vault_codes.md index e7971e9af..f5878e25e 100644 --- a/docs/topics/vault_codes.md +++ b/docs/topics/vault_codes.md @@ -1,6 +1,6 @@ # Vault Codes -In Geometry Dash 2.2 there are three different vaults you can access. The Vault, Vault of Secrets and the Chamber of Time. Each vault has a select number of passwords that you can enter to unlock icons and colors. +In Geometry Dash 2.2 there are four different vaults you can access. The Vault, Vault of Secrets, Chamber of Time and The Wraith. Each vault has a select number of passwords that you can enter to unlock icons and colors. The Wraith is the first vault that is server-sided, meaning the rewards are checked on the server, they can change over time and can not be found by reverse engineering. ## Vault Code Encryption From 5f5825b4fdf02086d12f34231dbd25b742ba7a0f Mon Sep 17 00:00:00 2001 From: iAndyHD3 <54410739+iAndyHD3@users.noreply.github.com> Date: Sat, 22 Mar 2025 19:20:39 +0100 Subject: [PATCH 377/389] add endpoint list --- docs/_sidebar.md | 2 ++ docs/endpoints/endpoints.md | 71 +++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 docs/endpoints/endpoints.md diff --git a/docs/_sidebar.md b/docs/_sidebar.md index 4e858c46c..5674688f9 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -50,6 +50,7 @@ - [Music Library](/resources/client/musiclibrary.md) - [SFX Library](/resources/client/sfxlibrary.md) + **Endpoints** **Accounts** @@ -134,6 +135,7 @@ - [Shop](/topics/shop) - [Tags](/topics/tags) - [CDN Tokens](/topics/cdn_token.md) + - [Endpoints](/endpoints/endpoints.md) - **Algorithms** diff --git a/docs/endpoints/endpoints.md b/docs/endpoints/endpoints.md new file mode 100644 index 000000000..ea86d02e3 --- /dev/null +++ b/docs/endpoints/endpoints.md @@ -0,0 +1,71 @@ +# Endpoints List + +All Geometry Dash endpoints found in the binary. + +> Some endpoints might be unused + +- `https://www.boomlings.com/databas/checkIfServerOnline.php` +- [`https://www.boomlings.com/database/uploadGJLevel21.php`](endpoints/levels/uploadGJLevel21.md) +- [`http://www.boomlings.com/database/getSaveData.php`](endpoints/misc/getSaveData.md) +- [`https://www.boomlings.com/database/getGJMapPacks21.php`](endpoints/levels/getGJMapPacks21.md) +- [`https://www.boomlings.com/database/getGJGauntlets21.php`](endpoints/levels/getGJGauntlets21.md) +- [`https://www.boomlings.com/database/downloadGJLevel22.php`](endpoints/levels/downloadGJLevel22.md) +- [`https://www.boomlings.com/database/rateGJStars211.php`](endpoints/levels/rateGJStars211.md) +- [`https://www.boomlings.com/database/deleteGJLevelUser20.php`](endpoints/levels/deleteGJLevelUser20.md) +- [`https://www.boomlings.com/database/suggestGJStars20.php`](endpoints/levels/suggestGJStars.md) +- [`https://www.boomlings.com/database/rateGJDemon21.php`](endpoints/levels/rateGJDemon21.md) +- [`https://www.boomlings.com/database/getGJScores20.php`](endpoints/users/getGJScores20.md) +- [`https://www.boomlings.com/database/getGJLevelScoresPlat.php`](endpoints/levels/getGJLevelScoresPlat.md) +- [`https://www.boomlings.com/database/getGJLevelScores211.php`](endpoints/levels/getGJLevelScores211.md) +- [`https://www.boomlings.com/database/getGJTopArtists.php`](endpoints/songs/getGJTopArtists.md) +- [`https://www.boomlings.com/database/getGJUsers20.php`](endpoints/users/getGJUsers20.md) +- [`https://www.boomlings.com/database/getGJUserInfo20.php`](endpoints/users/getGJUserInfo20.md) +- [`https://www.boomlings.com/database/getGJMessages20.php`](endpoints/socials/getGJMessages20.md) +- [`https://www.boomlings.com/database/downloadGJMessage20.php`](endpoints/socials/downloadGJMessage20.md) +- [`https://www.boomlings.com/database/uploadGJMessage20.php`](endpoints/socials/uploadGJMessage20.md) +- [`https://www.boomlings.com/database/deleteGJMessages20.php`](endpoints/socials/deleteGJMessages20.md) +- [`https://www.boomlings.com/database/getGJCommentHistory.php`](endpoints/comments/getGJCommentHistory.md) +- [`https://www.boomlings.com/database/getGJComments21.php`](endpoints/comments/getGJComments21.md) +- [`https://www.boomlings.com/database/getGJAccountComments20.php`](endpoints/comments/getGJAccountComments20.md) +- [`https://www.boomlings.com/database/uploadGJComment21.php`](endpoints/comments/uploadGJComment21.md) +- [`https://www.boomlings.com/database/uploadGJAccComment20.php`](endpoints/comments/uploadGJAccComment20.md) +- [`https://www.boomlings.com/database/deleteGJComment20.php`](endpoints/comments/deleteGJComment20.md) +- [`https://www.boomlings.com/database/deleteGJAccComment20.php`](endpoints/comments/deleteGJAccComment20.md) +- [`https://www.boomlings.com/database/getGJFriendRequests20.php`](endpoints/socials/getGJFriendRequests20.md) +- [`https://www.boomlings.com/database/uploadFriendRequest20.php`](endpoints/socials/uploadFriendRequest20.md) +- [`https://www.boomlings.com/database/deleteGJFriendRequests20.php`](endpoints/socials/deleteGJFriendRequests20.md) +- [`https://www.boomlings.com/database/acceptGJFriendRequest20.php`](endpoints/socials/acceptGJFriendRequest20.md) +- [`https://www.boomlings.com/database/readGJFriendRequest20.php`](endpoints/socials/readGJFriendRequest20.md) +- [`https://www.boomlings.com/database/removeGJFriend20.php`](endpoints/socials/removeGJFriend20.md) +- [`https://www.boomlings.com/database/blockGJUser20.php`](endpoints/socials/blockGJUser20.md) +- [`https://www.boomlings.com/database/unblockGJUser20.php`](endpoints/socials/unblockGJUser20.md) +- [`https://www.boomlings.com/database/getGJUserList20.php`](endpoints/socials/getGJUserList20.md) +- [`https://www.boomlings.com/database/updateGJDesc20.php`](endpoints/levels/updateGJDesc20.md) +- [`https://www.boomlings.com/database/likeGJItem211.php`](endpoints/misc/likeGJItem211.md) +- [`https://www.boomlings.com/database/requestUserAccess.php`](endpoints/misc/requestUserAccess.md) +- [`https://www.boomlings.com/database/getGJSecretReward.php`](endpoints/rewards/getGJSecretReward.md) +- [`https://www.boomlings.com/database/getGJRewards.php`](endpoints/rewards/getGJRewards.md) +- [`https://www.boomlings.com/database/getGJChallenges.php`](endpoints/rewards/getGJChallenges.md) +- [`https://www.boomlings.com/database/getGJDailyLevel.php`](endpoints/levels/getGJDailyLevel.md) +- [`https://www.boomlings.com/database/restoreGJItems.php`](endpoints/misc/restoreGJItems.md) +- [`https://www.boomlings.com/database/reportGJLevel.php`](endpoints/levels/reportGJLevel.md) +- [`https://www.boomlings.com/database/getGJLevelLists.php`](endpoints/lists/getGJLevelLists.md) +- [`https://www.boomlings.com/database/getGJLevels21.php`](endpoints/levels/getGJLevels21.md) +- `https://www.boomlings.com/database/submitGJUserInfo.php` +- [`https://www.boomlings.com/database/uploadGJLevelList.php`](endpoints/lists/uploadGJLevelList.md) +- [`https://www.boomlings.com/database/deleteGJLevelList.php`](endpoints/lists/deleteGJLevelList.md) +- [`https://www.boomlings.com/database/updateGJUserScore22.php`](endpoints/users/updateGJUserScore22.md) +- [`https://www.boomlings.com/database/getGJSongInfo.php`](endpoints/songs/getGJSongInfo.md) +- ``https://www.boomlings.com/database/getCustomContentURL.php`` +- [`https://www.boomlings.com/database/accounts/registerGJAccount.php`](endpoints/accounts/registerGJAccount.md) +- [`https://www.boomlings.com/database/accounts/loginGJAccount.php`](endpoints/accounts/loginGJAccount.md) +- [`https://www.boomlings.com/database/getAccountURL.php`](endpoints/misc/getAccountURL.md) +- [`https://www.boomlings.com/database/accounts/backupGJAccountNew.php`](endpoints/accounts/backupGJAccountNew.md) +- [`https://www.boomlings.com/database/accounts/syncGJAccountNew.php`](endpoints/accounts/syncGJAccountNew.md) +- [`https://www.boomlings.com/database/updateGJAccSettings20.php`](endpoints/accounts/updateGJAccSettings20.md) +- `https://www.boomlings.com/database/accounts/accountManagement.php` +- `https://www.boomlings.com/database/accounts/lostusername.php` +- `https://www.boomlings.com/database/accounts/lostpassword.php` +- [`https://www.geometrydash.com/database/joinMPLobby.php`](endpoints/multiplayer/joinMPLobby.md) +- [`https://www.geometrydash.com/database/exitMPLobby.php`](endpoints/multiplayer/exitMPLobby.md) +- [`https://www.geometrydash.com/database/uploadMPComment.php`](endpoints/multiplayer/uploadMPComment.md) \ No newline at end of file From 6f7ad6a96df98bd973c05da403205869b621b48b Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Thu, 2 Oct 2025 04:25:17 +0200 Subject: [PATCH 378/389] Fix typo --- docs/endpoints/levels/getGJMapPacks21.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/levels/getGJMapPacks21.md b/docs/endpoints/levels/getGJMapPacks21.md index 9dc4c1cce..3c25fb254 100644 --- a/docs/endpoints/levels/getGJMapPacks21.md +++ b/docs/endpoints/levels/getGJMapPacks21.md @@ -26,7 +26,7 @@ The response is formatted as follows: where: -- Packs is a list of [map pack](/resources/server/mappack.md) objects, separated by a pipe `| +- Packs is a list of [map pack](/resources/server/mappack.md) objects, separated by a pipe `|` - Page is the page data in this format: `{total packs}:{current offset}:{page size}` - [Hash](/resources/server/hashes.md?id=getgjmappacks) used to validate the request by the GD client From 411286479424d8d45f682c0ef40d922f975d5d2d Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 16:31:44 +0530 Subject: [PATCH 379/389] Update 'secret' parameter description in documentation Clarified behavior of the 'secret' parameter. --- docs/endpoints/users/getGJScores20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index a3db46873..116c5b846 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -6,7 +6,7 @@ Gets the leaderboard scores. ### Required Parameters -**secret** - Wmfd2893gb7 +**secret** - Wmfd2893gb7 (returns -1 if left out) ### Optional Parameters From 50b41d6f4151f4844c6cde9469affbe60f07c4b6 Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 16:33:33 +0530 Subject: [PATCH 380/389] Update documentation for getGJScores20 endpoint Clarified the response for incorrect or missing secret. --- docs/endpoints/users/getGJScores20.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index 116c5b846..34fc7eb70 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -6,7 +6,7 @@ Gets the leaderboard scores. ### Required Parameters -**secret** - Wmfd2893gb7 (returns -1 if left out) +**secret** - Wmfd2893gb7 ### Optional Parameters @@ -28,6 +28,8 @@ Gets the leaderboard scores. Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. +Returns -1 if secret is incorrect or not provided. + ## Example From 6b441f4b0e5bfdc3609f44b86c2c1d34c5aa172b Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 16:33:59 +0530 Subject: [PATCH 381/389] Emphasize 'secret' parameter in response description --- docs/endpoints/users/getGJScores20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index 34fc7eb70..09ebd4b30 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -28,7 +28,7 @@ Gets the leaderboard scores. Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. -Returns -1 if secret is incorrect or not provided. +Returns -1 if **secret** is incorrect or not provided. ## Example From 29f336abbb5127b2a73292d709ca57e17e84e32b Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 16:34:26 +0530 Subject: [PATCH 382/389] Fix formatting of 'secret' error message in documentation --- docs/endpoints/users/getGJScores20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index 09ebd4b30..8cd41fe19 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -28,7 +28,7 @@ Gets the leaderboard scores. Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. -Returns -1 if **secret** is incorrect or not provided. +Returns -1 if "secret" is incorrect or not provided. ## Example From 97980fd44d2357c75b927c3db45bc8a547fa42c7 Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 16:37:17 +0530 Subject: [PATCH 383/389] Update response description for secret parameter --- docs/endpoints/users/getGJScores20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index 8cd41fe19..aed06c292 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -28,7 +28,7 @@ Gets the leaderboard scores. Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. -Returns -1 if "secret" is incorrect or not provided. +Returns -1 if the **secret** parameter is incorrect or not provided. ## Example From 466a7ad16c920995a74904e5ce73b842e9e5cce9 Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 16:37:42 +0530 Subject: [PATCH 384/389] Fix formatting of secret parameter description --- docs/endpoints/users/getGJScores20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index aed06c292..f8e6e1563 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -28,7 +28,7 @@ Gets the leaderboard scores. Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. -Returns -1 if the **secret** parameter is incorrect or not provided. +Returns -1 if the "secret" parameter is incorrect or not provided. ## Example From 2e947f12beb6cb095dceb3b5d36dfde6b2f300a0 Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 16:57:32 +0530 Subject: [PATCH 385/389] Update getGJScores20.md with parameter clarifications Clarified the 'type' parameter options and added conditions for the 'secret' and 'friends' parameters. --- docs/endpoints/users/getGJScores20.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index f8e6e1563..dd423d2a6 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -20,7 +20,7 @@ Gets the leaderboard scores. **gjp2** - The user's [GJP2](/topics/encryption/gjp.md) -**type** - Can be `top`, `relative`, `friends`, or `creators`. If left out it defaults to `top` +**type** - Can be `top` (`count` defaults to 100), `relative` (`count` defaults to 12), `friends` (`count` defaults to 1 if `accountID` and `gjp2` arent't provided), or `creators`. If left out it defaults to `top` **count** - Returns the amount of players specified. Limited to 100 @@ -28,7 +28,7 @@ Gets the leaderboard scores. Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. -Returns -1 if the "secret" parameter is incorrect or not provided. +Returns -1 if the `secret` parameter is incorrect or not provided, or if `type` parameter is `friends` and `accountID` parameter is provided, but not `gjp2`. ## Example From 0190a96326186e28a713efde9bd955abcccc07ec Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 23:04:05 +0530 Subject: [PATCH 386/389] Update documentation for getGJScores20 endpoint Clarified the 'type' parameter options and updated defaults for 'relative'. Added note about empty user objects. --- docs/endpoints/users/getGJScores20.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index dd423d2a6..bd67324df 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -20,15 +20,17 @@ Gets the leaderboard scores. **gjp2** - The user's [GJP2](/topics/encryption/gjp.md) -**type** - Can be `top` (`count` defaults to 100), `relative` (`count` defaults to 12), `friends` (`count` defaults to 1 if `accountID` and `gjp2` arent't provided), or `creators`. If left out it defaults to `top` - **count** - Returns the amount of players specified. Limited to 100 +**type** - Can be `top` (`count` defaults to 100), `relative` (`count` defaults to 15 if no `accountID` is provided, or the `accountID`'s profile doesn't have over 501 stars, even if those criteria are met, no matter the `count` value, `count` will be 26.), `friends` (`count` defaults to 1 if `accountID` and `gjp2` arent't provided), or `creators`. If left out it defaults to `top` + ## Response Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. -Returns -1 if the `secret` parameter is incorrect or not provided, or if `type` parameter is `friends` and `accountID` parameter is provided, but not `gjp2`. +**Note:** Sometimes may return empty user objects. + +Returns -1 if the `secret` is incorrect or not provided, or if `type` is `friends` and `accountID` is provided, but not `gjp2`. ## Example From d0cc906d21537cf4b1454f98299fce3a4e82bfa8 Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 23:04:50 +0530 Subject: [PATCH 387/389] Fix typo and clarify 'type' description in docs --- docs/endpoints/users/getGJScores20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index bd67324df..ef43186a6 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -22,7 +22,7 @@ Gets the leaderboard scores. **count** - Returns the amount of players specified. Limited to 100 -**type** - Can be `top` (`count` defaults to 100), `relative` (`count` defaults to 15 if no `accountID` is provided, or the `accountID`'s profile doesn't have over 501 stars, even if those criteria are met, no matter the `count` value, `count` will be 26.), `friends` (`count` defaults to 1 if `accountID` and `gjp2` arent't provided), or `creators`. If left out it defaults to `top` +**type** - Can be `top` (`count` defaults to 100), `relative` (`count` defaults to 15 if no `accountID` is provided, or the `accountID`'s profile doesn't have over 501 stars, even if those criteria are met, no matter the `count` value, it will always be 26.), `friends` (`count` defaults to 1 if `accountID` and `gjp2` arent't provided), or `creators`. If left out it defaults to `top` ## Response From 4d9867f878de3e3fe7ad52093b342b0af0f2dbd8 Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 23:07:55 +0530 Subject: [PATCH 388/389] Update note on empty user objects in response Clarified note about empty user objects in response. --- docs/endpoints/users/getGJScores20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index ef43186a6..b96ac4253 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -28,7 +28,7 @@ Gets the leaderboard scores. Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. -**Note:** Sometimes may return empty user objects. +**Note:** Sometimes may return empty user objects, possibly because they don't meet star requirement. Returns -1 if the `secret` is incorrect or not provided, or if `type` is `friends` and `accountID` is provided, but not `gjp2`. From aa8d51a6b075e6388c427badd448f99eb3bcb716 Mon Sep 17 00:00:00 2001 From: coral Date: Fri, 26 Dec 2025 23:58:07 +0530 Subject: [PATCH 389/389] Modify getGJScores20 documentation for count and headers Updated the count parameter to default to 100 and added required headers section. --- docs/endpoints/users/getGJScores20.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/endpoints/users/getGJScores20.md b/docs/endpoints/users/getGJScores20.md index b96ac4253..ce23eaa51 100644 --- a/docs/endpoints/users/getGJScores20.md +++ b/docs/endpoints/users/getGJScores20.md @@ -24,6 +24,12 @@ Gets the leaderboard scores. **type** - Can be `top` (`count` defaults to 100), `relative` (`count` defaults to 15 if no `accountID` is provided, or the `accountID`'s profile doesn't have over 501 stars, even if those criteria are met, no matter the `count` value, it will always be 26.), `friends` (`count` defaults to 1 if `accountID` and `gjp2` arent't provided), or `creators`. If left out it defaults to `top` +## Headers + +### Required Headers + +**User-Agent** = "" + ## Response Returns a list of [user objects](/resources/server/user.md) in order based on which leaderboard you're viewing, separated by pipe `|` characters. @@ -44,10 +50,14 @@ import requests data = { "secret": "Wmfd2893gb7", "type": "top", - "count": 20 + "count": 100 +} + +headers = { + "User-Agent": "" } -req = requests.post('http://boomlings.com/database/getGJScores20.php', data=data) +req = requests.post('http://boomlings.com/database/getGJScores20.php', data=data, headers=headers) print(req.text) ```

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 z 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 Kb;ioVU=0BDKp&F; literal 0 HcmV?d00001 diff --git a/docs/topics/tags.md b/docs/topics/tags.md index 7c56aac59..90b002879 100644 --- a/docs/topics/tags.md +++ b/docs/topics/tags.md @@ -53,6 +53,7 @@ **Usage:** `CHOPPER!` +![shake preview](../assets/shake_tag.gif) ## Notes From 2b8e0cf30a2290b08ea4e1582dd0ec90c70e6511 Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Fri, 4 Oct 2024 09:38:52 +0200 Subject: [PATCH 358/389] Use chatFont-like font in color examples --- docs/assets/fonts/texgyreheros-regular.woff | Bin 0 -> 15652 bytes docs/stylesheets/colour_tags.css | 24 ++++++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 docs/assets/fonts/texgyreheros-regular.woff diff --git a/docs/assets/fonts/texgyreheros-regular.woff b/docs/assets/fonts/texgyreheros-regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..4522495127ea86ac8099436e2489a525c248f106 GIT binary patch literal 15652 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 literal 0 HcmV?d00001 diff --git a/docs/stylesheets/colour_tags.css b/docs/stylesheets/colour_tags.css index 1959dbf7e..ffe331436 100644 --- a/docs/stylesheets/colour_tags.css +++ b/docs/stylesheets/colour_tags.css @@ -1,55 +1,75 @@ +@font-face { + font-family: "TeX Gyre Heros"; + src: url("/assets/fonts/texgyreheros-regular.woff") format("woff"); +} + +/*todo: extract font to a tag*/ cb { -color:#4A52E1; + color: #4A52E1; + font-family: "TeX Gyre Heros"; } cg { color: #40E348; + font-family: "TeX Gyre Heros"; } cl { - color: #60ABEF; + color: #60ABEF; + font-family: "TeX Gyre Heros"; } cj { color: #32C8FF; + font-family: "TeX Gyre Heros"; } cy { color: #FFFF00; + font-family: "TeX Gyre Heros"; } co { color: #FFA54B; + font-family: "TeX Gyre Heros"; } cr { color: #FF5A5A; + font-family: "TeX Gyre Heros"; } cp { color: #FF00FF; + font-family: "TeX Gyre Heros"; } ca { color: #9632FF; + font-family: "TeX Gyre Heros"; } cd { color: #FF96FF; + font-family: "TeX Gyre Heros"; } cc { color: #FFFF96; + font-family: "TeX Gyre Heros"; } cf { color: #96FFFF; + font-family: "TeX Gyre Heros"; } cs { color: #FFDC41; + font-family: "TeX Gyre Heros"; } ccDefault { color: #FF0000; + font-family: "TeX Gyre Heros"; } From 78c3255ea4929c9c5f39632b492e39c21ccd5992 Mon Sep 17 00:00:00 2001 From: xparadoxical <43796685+xparadoxical@users.noreply.github.com> Date: Tue, 8 Oct 2024 15:11:40 +0200 Subject: [PATCH 359/389] Update non-color examples --- docs/assets/images/delay_tag.gif | Bin 0 -> 15558 bytes docs/assets/images/fadein_tag.gif | Bin 0 -> 41357 bytes docs/assets/images/shake_tag.gif | Bin 0 -> 143627 bytes docs/assets/shake_tag.gif | Bin 304568 -> 0 bytes docs/topics/tags.md | 10 +++++++--- 5 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 docs/assets/images/delay_tag.gif create mode 100644 docs/assets/images/fadein_tag.gif create mode 100644 docs/assets/images/shake_tag.gif delete mode 100644 docs/assets/shake_tag.gif diff --git a/docs/assets/images/delay_tag.gif b/docs/assets/images/delay_tag.gif new file mode 100644 index 0000000000000000000000000000000000000000..ffc8c2444048d5b33000ac304defda6e961525d4 GIT binary patch literal 15558 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 JzZ2x;{|DxRF{1zg literal 0 HcmV?d00001 diff --git a/docs/assets/images/fadein_tag.gif b/docs/assets/images/fadein_tag.gif new file mode 100644 index 0000000000000000000000000000000000000000..0b4436deaab7d0e07db6727abf2d8134c7efa4e0 GIT binary patch literal 41357 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 literal 0 HcmV?d00001 diff --git a/docs/assets/images/shake_tag.gif b/docs/assets/images/shake_tag.gif new file mode 100644 index 0000000000000000000000000000000000000000..2283d8ee1be99b734653ff494e03207a98c64c3e GIT binary patch literal 143627 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