From d8aad73b4446fe276927af9fa6e63d0251221e01 Mon Sep 17 00:00:00 2001 From: Huderon Date: Thu, 4 Dec 2025 23:11:33 +1100 Subject: [PATCH 1/7] fix gramar --- docs/plugins/concepts/patching.md | 14 +++++------ docs/plugins/concepts/react.md | 24 +++++++++---------- docs/plugins/concepts/webpack.md | 14 +++++------ docs/plugins/index.md | 4 ++-- docs/plugins/introduction/devtools.md | 4 ++-- docs/plugins/introduction/environment.md | 14 +++++------ docs/plugins/introduction/structure.md | 18 +++++++------- docs/plugins/publishing/distribution.md | 2 +- docs/plugins/publishing/guidelines.md | 12 +++++----- docs/plugins/publishing/submit.md | 2 +- docs/plugins/tutorials/addons.md | 12 +++++----- docs/plugins/tutorials/bundling.md | 12 +++++----- docs/plugins/tutorials/creating-a-plugin.md | 8 +++---- docs/plugins/tutorials/discord.md | 4 ++-- docs/plugins/tutorials/dom.md | 12 +++++----- docs/plugins/tutorials/react.md | 8 +++---- docs/plugins/tutorials/settings.md | 20 ++++++++-------- docs/plugins/ui/changelogs.md | 2 +- docs/plugins/ui/modals.md | 12 +++++----- docs/plugins/ui/notifications.md | 2 +- docs/plugins/ui/settings/color.md | 2 +- docs/plugins/ui/settings/keybind.md | 2 +- docs/plugins/ui/settings/overview.md | 24 +++++++++---------- docs/plugins/ui/toasts.md | 2 +- docs/plugins/ui/tooltips.md | 4 ++-- docs/themes/concepts/performance.md | 6 ++--- docs/themes/concepts/preprocessing.md | 24 +++++++++---------- docs/themes/index.md | 4 ++-- docs/themes/introduction/devtools.md | 4 ++-- docs/themes/introduction/environment.md | 10 ++++---- docs/themes/introduction/structure.md | 10 ++++---- docs/themes/publishing/distribution.md | 2 +- docs/themes/publishing/guidelines.md | 8 +++---- docs/themes/publishing/submit.md | 2 +- docs/themes/tutorials/creating.md | 12 +++++----- docs/themes/tutorials/process.md | 4 ++-- docs/themes/tutorials/remote.md | 14 +++++------ docs/themes/tutorials/selectors.md | 14 +++++------ docs/themes/tutorials/transparency.md | 4 ++-- docs/themes/tutorials/user.md | 10 ++++---- docs/users/getting-started/configuration.md | 8 +++---- docs/users/getting-started/faq.md | 4 ++-- docs/users/getting-started/troubleshooting.md | 10 ++++---- docs/users/guides/installing-addons.md | 2 +- docs/users/guides/vanilla.md | 2 +- 45 files changed, 194 insertions(+), 194 deletions(-) diff --git a/docs/plugins/concepts/patching.md b/docs/plugins/concepts/patching.md index 12d0067..c100970 100644 --- a/docs/plugins/concepts/patching.md +++ b/docs/plugins/concepts/patching.md @@ -14,7 +14,7 @@ A function patch an advanced technique for plugins that allow you to modify exis ### Why would I use one? -It's a great way to modify or extend Discord's functionality with your own while keeping integration mostly seemless. It can also act as a way to modify the way Discord works currently. Take the plugin [HideDisabledEmojis](https://betterdiscord.app/plugin/HideDisabledEmojis) for example, it uses function patching to modify the way Discord's internal functions work to stop trying to render emojis the user cannot use. Your possibilities for the plugins you can make increase exponentially, and the quality usually ends up being higher due to the tight integration with Discord. +It's a great way to modify or extend Discord's functionality with your own while keeping integration mostly seamless. It can also act as a way to modify the way Discord works currently. Take the plugin [HideDisabledEmojis](https://betterdiscord.app/plugin/HideDisabledEmojis) for example, it uses function patching to modify the way Discord's internal functions work to stop trying to render emojis the user cannot use. Your possibilities for the plugins you can make increase exponentially, and the quality usually ends up being higher due to the tight integration with Discord. ### How can I patch a function? @@ -24,7 +24,7 @@ Unfortunately, you can't patch a function *directly*, you have to modify the *re function yourTarget() {} ``` -then you can't really affect it. However, if your target is part of an object in some way, like being contained in an imported module, you can overwrite that reference with your own function causing everyone to call your function instead. +Then you can't really affect it. However, if your target is part of an object in some way, like being contained in an imported module, you can overwrite that reference with your own function causing everyone to call your function instead. ```js:line-numbers const someObject = { @@ -50,7 +50,7 @@ someObject.yourTarget = myNewFunction; targetUser(); // Now logs "green" ``` -If you take a look at the highlighted section, we are creating a new function `myNewFunction` that logs `green` and assigning it to `someObject.yourTarget` effectively overwriting the target function. That means when `targetUser` is called again, your function gets run successfully because it references the `someObject` object. This here is known as an `instead` patch because it completely replaces the target. All patches start this way but can expanded to become a `before` or `after` patch by storing a reference and calling the original function. This also opens the door to subpatches and multiple users, but that can get complicated very fast. +If you take a look at the highlighted section, we are creating a new function `myNewFunction` that logs `green` and assigning it to `someObject.yourTarget` effectively overwriting the target function. That means when `targetUser` is called again, your function gets run successfully because it references the `someObject` object. This here is known as an `instead` patch because it completely replaces the target. All patches start this way but can be expanded to become a `before` or `after` patch by storing a reference and calling the original function. This also opens the door to subpatches and multiple users, but that can get complicated very fast. #### BetterDiscord @@ -76,7 +76,7 @@ BdApi.Patcher.instead("MyPlugin", someObject, "yourTarget", () => console.log("g targetUser(); // Now logs "green" ``` -This code has the same effect as before, causing `targetUser` to instead log `green`. But lets take a closer look at the highlighted line. We have a call to `BdApi.Patcher.instead` which indicates we want to create an `instead` patch. We pass it `"MyPlugin"` which is an identifier used later to help removed all your patches with `BdApi.Patcher.unpatchAll`. Then we give it the target object `someObject` and the key of our target inside that object `yourTarget` and our new function to override the original. BetterDiscord takes care of the rest and even allows other plugins to patch on top of yours. +This code has the same effect as before, causing `targetUser` to instead log `green`. But let's take a closer look at the highlighted line. We have a call to `BdApi.Patcher.instead` which indicates we want to create an `instead` patch. We pass it `"MyPlugin"` which is an identifier used later to help removed all your patches with `BdApi.Patcher.unpatchAll`. Then we give it the target object `someObject` and the key of our target inside that object `yourTarget` and our new function to override the original. BetterDiscord takes care of the rest and even allows other plugins to patch on top of yours. ## Examples @@ -101,7 +101,7 @@ const someModule = { }; ``` -In this setup, `someGlobal` is a function that cannot be patched because there is no reference to replace. However `someModule.method` and `someModule.otherMethod` can both be patched. +In this setup, `someGlobal` is a function that cannot be patched because there is no reference to replace. However, `someModule.method` and `someModule.otherMethod` can both be patched. ### Before @@ -155,7 +155,7 @@ someModule.method(1); // > Intercepted other someModule.method(1); // > undefined ``` -Take alook at the function we define in the `instead` patch. We have a new parameter `originalFunction` that BetterDiscord gives us to use as we see fit. In this example we use it for a specific value. If the value is `5` we let the original function run and return without modification. If the value is `1` we pass it to an external function and let that handle the arguments and the return. Otherwise, the function has no return value at all. This is a huge change to the function. It used to always return a value and now it only returns values for two cases. This is a good demonstration how much power function patching can have. +Take a look at the function we define in the `instead` patch. We have a new parameter `originalFunction` that BetterDiscord gives us to use as we see fit. In this example we use it for a specific value. If the value is `5` we let the original function run and return without modification. If the value is `1` we pass it to an external function and let that handle the arguments and the return. Otherwise, the function has no return value at all. This is a huge change to the function. It used to always return a value, and now it only returns values for two cases. This is a good demonstration how much power function patching can have. ### After @@ -170,7 +170,7 @@ someModule.method(5); // > 16 someModule.method(); // > 6 ``` -You'll notice that `originalFunction` from before has turned into `returnValue`. Here we simply multiply that by `2` every time and return the value to the caller. So that means for any number we pass, the original function applies and returns, then our patch picks up that value and multiplies by `2`, then the function caller finally gets their value. The BetterDiscord `Patcher` will use whatever `return` value you use. However if you *don't* return anything, then the original return value is used. This can have profound effects. Consider this case below: +You'll notice that `originalFunction` from before has turned into `returnValue`. Here we simply multiply that by `2` every time and return the value to the caller. So that means for any number we pass, the original function applies and returns, then our patch picks up that value and multiplies by `2`, then the function caller finally gets their value. The BetterDiscord `Patcher` will use whatever `return` value you use. However, if you *don't* return anything, then the original return value is used. This can have profound effects. Consider this case below: ```js const myNewNumber = 5 / someModule.method(5); diff --git a/docs/plugins/concepts/react.md b/docs/plugins/concepts/react.md index bb517bb..fbf83b7 100644 --- a/docs/plugins/concepts/react.md +++ b/docs/plugins/concepts/react.md @@ -11,7 +11,7 @@ This guide involves [function patching](./patching.md). If you have not read tha ### What does it mean? -When we say React Injection, we're referring to adding/removing/alterting components in the React render tree used by Discord. In the [React](../tutorials/react.md) section of the guide, we went over rendering our own components using `ReactDOM` which created our own React trees rendering outside of Discord's tree. With injection we can either be part of Discord's tree with our own elements, or we can modify Discord's tree before a render finishes. +When we say React Injection, we're referring to adding/removing/altering components in the React render tree used by Discord. In the [React](../tutorials/react.md) section of the guide, we went over rendering our own components using `ReactDOM` which created our own React trees rendering outside of Discord's tree. With injection, we can either be part of Discord's tree with our own elements, or we can modify Discord's tree before a render finishes. ### Why would I need it? @@ -27,7 +27,7 @@ It's important that you make your changes in an error-safe way whenever possible ::: -Well if you've got a hang of function patching, then you're already halfway there. You'll need to find your React component in an exposed module and override the render function with an `after` patch. From there you'll have to walk the rendered react nodes to find where you want to make your changes. There are traversal utilities in `BdApi` that can help with this, you'll see more about those in the walkthrough. Then you'll have to make your changes +Well if you've got a hang of function patching, then you're already halfway there. You'll need to find your React component in an exposed module and override the render function with an `after` patch. From there you'll have to walk the rendered React nodes to find where you want to make your changes. There are traversal utilities in `BdApi` that can help with this, you'll see more about those in the walkthrough. Then you'll have to make your changes ## Walkthrough @@ -51,7 +51,7 @@ We want to add a new button here, so let's select it in React DevTools component ![react_parent](./img/react_parent.png) -But take a look at the `props` on the right hand side. This seems to be just a simple container that is reusable and not specific to this component. It's not a good target for patching because it would have effects elsewhere as well. The first one that looks like it has potential is shown below. +But take a look at the `props` on the right-hand side. This seems to be just a simple container that is reusable and not specific to this component. It's not a good target for patching because it would have effects elsewhere as well. The first one that looks like it has potential is shown below. ![react_candidate](./img/react_candidate.png) @@ -59,19 +59,19 @@ Let's take a look at this component and see if it's exported like we did in the ![view_source](./img/view_source.png) -And of course also beautify the code with the button a the bottom left. You'll see a render function much like this. +And of course also beautify the code with the button at the bottom left. You'll see a render function much like this. ![react_render](./img/react_render.png) -As we did in the last chapter, let's scroll up and check for this `i` to be exported. As we scroll up it appears that `i` is wrapped inside of this module and when we get to the top we can see only an object called `z` is exported. +As we did in the last chapter, let's scroll up and check for this `i` to be exported. As we scroll up it appears that `i` is wrapped inside this module and when we get to the top we can see only an object called `z` is exported. ![react_exports](./img/react_exports.png) -Scroll back and you can find this `z` that uses `i` internally and does not expose it in any other way. Let's go back to the Components panel and keep going up this subtree until we find another candidate. We find one at the top of our subtree. +Scroll back, and you can find this `z` that uses `i` internally and does not expose it in any other way. Let's go back to the Components panel and keep going up this subtree until we find another candidate. We find one at the top of our subtree. ![react_ancestor](./img/react_ancestor.png) -Let's take a look at the source once more. The code looks oddly familiar and it's already formatted. It's actually the same module we were looking at before! Except this time we are using the `z` component, so since we know this one is exported, we have found our target. +Let's take a look at the source once more. The code looks oddly familiar, and it's already formatted. It's actually the same module we were looking at before! Except this time we are using the `z` component, so since we know this one is exported, we have found our target. ### Getting The Target @@ -102,7 +102,7 @@ BdApi.Patcher.after("debug", PrivateChannels, "Z", (_, __, returnValue) => { }); ``` -With this simple patch, we will log out the return value on ever render call but let the original return value still work. With that in place, try switching to a guild and then back to your DM list. You should see a new log in your console. +With this simple patch, we will log out the return value on every render call but let the original return value still work. With that in place, try switching to a guild and then back to your DM list. You should see a new log in your console. ::: details Right-Click ![return_value](./img/return_value.png) @@ -112,7 +112,7 @@ With this simple patch, we will log out the return value on ever render call but ![return_value_expanded](./img/return_value_expanded.png) ::: -What you see here if a fairly typical result of one of these render calls. Take a second and get familiar with the structure, it's likely you'll be seeing a lot more of them going forward. However, since we want to see where to add our component, expand the tree out like we did above in the second image. +What you see here if a fairly typical result of one of these render calls. Take a second and get familiar with the structure, its likely you'll be seeing a lot more of them going forward. However, since we want to see where to add our component, expand the tree out like we did above in the second image. Take a look at the objects near the cursor in the image. This seems to be exactly where we want to render. Take a note of the object path to this object or copy it using the built-in tool. @@ -139,7 +139,7 @@ This patch should just add a simple button saying `Hello World` to this list of ![our_button](./img/our_button.png) -And there we have it! A react button of our own creation rendered inside of Discord's React tree inside of Discord's UI. There are more complicated situations, but this should be a good jump start to help you get on your way. If you're interested in more, there's some additional information below. +And there we have it! A React button of our own creation rendered inside of Discord's React tree inside of Discord's UI. There are more complicated situations, but this should be a good jump start to help you get on your way. If you're interested in more, there's some additional information below. ## Tips & Tricks @@ -160,7 +160,7 @@ You can also make use of error boundaries to prevent the error from crashing the ### Multi-Patching -One thing to keep in mind when making your patches is that you may not be the only plugin attempting to patch a certain component. There are a couple quick steps to massively improve your compatibility with one another. +One thing to keep in mind when making your patches is that you may not be the only plugin attempting to patch a certain component. There are a couple of quick steps to massively improve your compatibility with one another. Let's say we want to add a child component where one doesn't exist. Simple as setting the `children` property to your component right? Well that works great but what about if another plugin wanted to do the same? It would have been better if you started with an array `[]` so future patches can just add to the array. @@ -197,4 +197,4 @@ BdApi.Patcher.after("debug", PrivateChannels, "Z", (_, __, returnValue) => { }); ``` -It's an easy change but it makes the code so much more robust. And take a look at the highlighted line. We're making use of the optional chaining operator `?.` which will protect us in cases where `findInTree` is unable to find our target due to Discord changes. Now you can take this technique and make even the most complex patches much more resilient to updates. \ No newline at end of file +It's an easy change, but it makes the code so much more robust. And take a look at the highlighted line. We're making use of the optional chaining operator `?.` which will protect us in cases where `findInTree` is unable to find our target due to Discord changes. Now you can take this technique and make even the most complex patches much more resilient to updates. \ No newline at end of file diff --git a/docs/plugins/concepts/webpack.md b/docs/plugins/concepts/webpack.md index 8172984..7c1535f 100644 --- a/docs/plugins/concepts/webpack.md +++ b/docs/plugins/concepts/webpack.md @@ -24,11 +24,11 @@ Plugins are able to access all of these types of modules through BetterDiscord's ## Finding Modules -How do we actually find these modules? First, let's take a look at the tools at our disposal. We of course have the Chromium DevTools as we talked about in our [developer guide](../introduction/devtools.md), which is absolutely crucial. But we also have BetterDiscord's Webpack API. You can take a look at the [api reference](/api/classes/Webpack.md) for this namespace if you want a full list, we'll be going over the most frequently used ones here. +How do we actually find these modules? First, let's take a look at the tools at our disposal. We of course have the Chromium DevTools as we talked about in our [developer guide](../introduction/devtools.md), which is absolutely crucial. But we also have BetterDiscord's Webpack API. You can take a look at the [API reference](/api/classes/Webpack.md) for this namespace if you want a full list, we'll be going over the most frequently used ones here. ## Filters -The API for searching through modules uses the concept of "filters". At it's core, a filter is just a function that gets a reference to a module and returns `true` if it's the one you want, and `false` otherwise. Being able to craft these filters is important, and there are some helper functions from the API to make it easier. +The API for searching through modules uses the concept of "filters". At its core, a filter is just a function that gets a reference to a module and returns `true` if it's the one you want, and `false` otherwise. Being able to craft these filters is important, and there are some helper functions from the API to make it easier. | Filter | Description | |:-------|:------------| @@ -51,7 +51,7 @@ Due to the nature of client modding, this section could be outdated by the time Now that we know what information we can search on, how do we even find a module we want to get? And once we find it, how do we know whether it's even accessible? Keep in mind that some modules in Discord are completely wrapped and cannot be accessed through this API or through reflection of any kind. -But to answer these questions, let's step through a very simple example. Let's say we want to open settings programmtically. We know that the settings button can do that, so we'll start there. Begin by selecting that element and printing it out in console with `$0`. You'll see in the autocomplete that it has some property that looks like `__reactFiber$2oq7t5kq3k5`. Go ahead and select that and print it out. This is the data React currently has about this node. Using this is a good way to understand how React works and a great way to start with reverse engineering in Discord. Through this you can walk the React tree and see all the elements React knows about. But we are more interested in the properties of this `button` because we want to essentially duplicate the `onClick` listener. +But to answer these questions, let's step through a very simple example. Let's say we want to open settings programmatically. We know that the settings button can do that, so we'll start there. Begin by selecting that element and printing it out in console with `$0`. You'll see in the autocomplete that it has some property that looks like `__reactFiber$2oq7t5kq3k5`. Go ahead and select that and print it out. This is the data React currently has about this node. Using this is a good way to understand how React works and a great way to start with reverse engineering in Discord. Through this you can walk the React tree and see all the elements React knows about. But we are more interested in the properties of this `button` because we want to essentially duplicate the `onClick` listener. Now let's print out the property that looks like `__reactProps$2oq7t5kq3k5` instead. You'll see in this object all the React props specific to this element including an `onClick` function. Let's dive into this either by right-clicking and selecting `Show Function Definition` or by expanding the function and clicking on the function location. @@ -73,11 +73,11 @@ That will bring you to a large minified script that is hard to understand. But a ![click_script](./img/click_script.png) ::: -From what we see in this click listener, it looks like the function `u()` is the one really getting the event and processing it. Let's set a breakpoint inside this listener and click on the button. This will show us all the values at this point in time and we can figure out the value of `u`. +From what we see in this click listener, it looks like the function `u()` is the one really getting the event and processing it. Let's set a breakpoint inside this listener and click on the button. This will show us all the values at this point in time, and we can figure out the value of `u`. ![breakpoint_click](./img/breakpoint_click.png) -Take a look at the bottom right of our panel here. `u` seems to be part of the current closure and it corresponds to a function in another script. Once again lets go see the source of that script and beautify it. This leads us to a function called `handleOpenAccountSettings` which calls `handleOpenSettings` which happens to be right there as well. It seems to open settings, this calls `h.Z.open`. The easiest way to find out is once again a breakpoint. +Take a look at the bottom right of our panel here. `u` seems to be part of the current closure, and it corresponds to a function in another script. Once again lets go see the source of that script and beautify it. This leads us to a function called `handleOpenAccountSettings` which calls `handleOpenSettings` which happens to be right there as well. It seems to open settings, this calls `h.Z.open`. The easiest way to find out is once again a breakpoint. ![breakpoint_handle](./img/breakpoint_handle.png) @@ -143,7 +143,7 @@ Do you remember this pattern from earlier? }) ``` -Did you notice that `Z` wasn't the only option here? `kWm` is also there, and it represents other potential exports by a module. Discord uses [SWC](https://swc.rs/) to transpile their code and it mangles the name of exports into unreadable things like this. This is fine if the export these keys point to is an object. But when the key points directly to a function, we will need the name of the key as well in order to perform [function patching](./patching.md). +Did you notice that `Z` wasn't the only option here? `kWm` is also there, and it represents other potential exports by a module. Discord uses [SWC](https://swc.rs/) to transpile their code, and it mangles the name of exports into unreadable things like this. This is fine if the export these keys point to is an object. But when the key points directly to a function, we will need the name of the key as well in order to perform [function patching](./patching.md). Thankfully, BetterDiscord has an API exactly for this case because it can be so frustrating to do manually. It's called `BdApi.Webpack.getWithKey` and as the name suggests, it gets a module/value along with the corresponding key. Here is a quick example usage: @@ -156,4 +156,4 @@ Here we are looking for the function that opens the context menus in Discord and ### searchExports -You probably noticed on the example directly above we used `{searchExports: true}`, this is an option available to all the Webpack APIs that causes BetterDiscord to loop over all the exports of every module to see if they match your filter rather than testing the whole module at once. This is used a lot in plugins when searching for objects, classes, and instantiations since patching with the key is not crucial. \ No newline at end of file +You probably noticed in the example directly above that we used `{searchExports: true}`. This is an option available to all the Webpack APIs. It causes BetterDiscord to loop over all the exports of every module to see if they match your filter, rather than testing the whole module at once. This is used a lot in plugins when searching for objects, classes, and instantiations, since patching with the key is not crucial. \ No newline at end of file diff --git a/docs/plugins/index.md b/docs/plugins/index.md index 1d30511..f7d1bce 100644 --- a/docs/plugins/index.md +++ b/docs/plugins/index.md @@ -4,7 +4,7 @@ order: 0 # Overview -Plugins are a type of addon that focus on functionality by adding something new to the Discord client. This could be as simple as a button that says hello, or basic end-to-end ecryption. Plugins can also modify existing functionality in the client like altering exisiting buttons to perform different actions, or even remove functionality entirely. All of this is done using JavaScript with minimal requirements to allow for personal preference and style in programming. +Plugins are a type of addon that focus on functionality by adding something new to the Discord client. This could be as simple as a button that says hello, or basic end-to-end encryption. Plugins can also modify existing functionality in the client like altering existing buttons to perform different actions, or even remove functionality entirely. All of this is done using JavaScript with minimal requirements to allow for personal preference and style in programming. ::: tip @@ -28,7 +28,7 @@ Lastly the [Discord Internals](/discord/index.md) section is a reference that go The following resources will be handy for learning and reference: -- Modern Javascript: The Modern JavaScript Tutorial - https://javascript.info/ +- Modern JavaScript: The Modern JavaScript Tutorial - https://javascript.info/ - Chrome DevTools - https://developer.chrome.com/docs/devtools/ - ReactJS: Official Tutorial - https://reactjs.org/tutorial/tutorial.html - React DevTools - https://react-devtools-tutorial.vercel.app/ diff --git a/docs/plugins/introduction/devtools.md b/docs/plugins/introduction/devtools.md index c16c237..bb928b3 100644 --- a/docs/plugins/introduction/devtools.md +++ b/docs/plugins/introduction/devtools.md @@ -11,7 +11,7 @@ These are tools that help with both general web development, and working with th If you have past web development experience you are probably already familiar with the Chrome/Chromium DevTools. If not, it might be a good idea to give [its documentation](https://developer.chrome.com/docs/devtools/) a once-over. -Working in this Discord (and BetterDiscord) environment, we have access to these DevTools. Discord has this disabled by default, but it is possible to reenable this functionality in the BetterDiscord settings. Go to the BetterDiscord Settings page and find the Developer Settings. Then check the option for DevTools. +Working in this Discord (and BetterDiscord) environment, we have access to these DevTools. Discord has this disabled by default, but it is possible to re-enable this functionality in the BetterDiscord settings. Go to the BetterDiscord Settings page and find the Developer Settings. Then check the option for DevTools. ![Developer Tools](./img/developer_settings.png) @@ -23,7 +23,7 @@ If you have past web development experience but not a lot of React experience, i Since this environment is one with Chromium DevTools, we can add extensions meant for those DevTools. Unfortunately, this is not packaged with Discord or BetterDiscord, but BetterDiscord can add the React DevTools for you if you download it and place it in the BetterDiscord folder. -To get this setup, download this [special manifest v2](https://github.com/mondaychen/react/raw/017f120369d80a21c0e122106bd7ca1faa48b8ee/packages/react-devtools-extensions/ReactDevTools.zip) version of the extension. Currently the version in the Chrome extension store only works for manifest v3 which is not compatible with electron. +To get this setup, download this [special manifest v2](https://github.com/mondaychen/react/raw/017f120369d80a21c0e122106bd7ca1faa48b8ee/packages/react-devtools-extensions/ReactDevTools.zip) version of the extension. Currently, the version in the Chrome extension store only works for manifest v3 which is not compatible with electron. Open your BetterDiscord folder and make a new folder inside called `extensions`. Within this folder, make another new folder with the React DevTools extension ID `fmkadmapgofadopljbjfkapdkoienihi`. The path should look something like `/extensions/fmkadmapgofadopljbjfkapdkoienihi/`. Extract the contents of the `zip` you downloaded directly to this folder. diff --git a/docs/plugins/introduction/environment.md b/docs/plugins/introduction/environment.md index e98776f..1ec84af 100644 --- a/docs/plugins/introduction/environment.md +++ b/docs/plugins/introduction/environment.md @@ -11,7 +11,7 @@ No not the one burning up, but the development environment for BetterDiscord plu ### Desktop Application -Discord Desktop is an [Electron](https://www.electronjs.org/) application which means it is _essentially_ a chromium web browser that only displays Discord. That is an oversimplification but it's a good high level understanding to have. What makes Electron more than just a browser, is that it bundles Node.js with it, giving every Electron application the ability to interact beyond the capabilities of a web browser and make use of the user's computer. +Discord Desktop is an [Electron](https://www.electronjs.org/) application which means it is _essentially_ a Chromium web browser that only displays Discord. That is an oversimplification, but it's a good high level understanding to have. What makes Electron more than just a browser, is that it bundles Node.js with it, giving every Electron application the ability to interact beyond the capabilities of a web browser and make use of the user's computer. To get a better sense of what this does, think of the limitations of making an application in a web browser. Actions like loading and saving local files, listening to keybinds globally, and controlling the user's clipboard are just not possible in the web browser. Most of these limitations are for security reasons, but with [Node.js](https://nodejs.org/), suddenly those are all very possible. @@ -19,7 +19,7 @@ This also means that BetterDiscord, and the plugins via a [polyfill](#nodejs), h ### Web Application -The web application itself is made using the [React](https://reactjs.org/) UI library. This is a popular library that allows for responsive and stateful interfaces. In many cases, developers take advantage of the powerful plugins and addons for React. But Discord chose to use their own event system complete with a custom [Flux](https://facebook.github.io/flux/) implementation. +The web application itself is made using the [React](https://reactjs.org/) UI library. This is a popular library that allows for responsive and stateful interfaces. In many cases, developers take advantage of the powerful plugins and addons for React. But Discord chose to use their own event system complete with a custom [Flux](https://facebook.github.io/flux/) implementation. The actual full implementation of Discord's code is not known. It is possibly written in [TypeScript](https://www.typescriptlang.org/), very likely using modern [ES Modules](https://flaviocopes.com/es-modules/), and most definitely bundled with [Webpack](https://webpack.js.org/). The topic of Webpack will be covered later in these docs. @@ -40,7 +40,7 @@ For the curious, here are the versions of the major components as of writing (De ## Node.js -BetterDiscord used to give direct access to the [Node.js](https://nodejs.org/) api directly in the renderer process. However, Discord made a change to their fork of Electron that made this impossible, practically speaking. That said, due to how important these APIs are, how ubiquitous their usage in plugins, and in the interest of backwards-compatibility, BetterDiscord has polyfilled certain APIs to make them available to plugins in the same way as before (`require`). +BetterDiscord used to give direct access to the [Node.js](https://nodejs.org/) API directly in the renderer process. However, Discord made a change to their fork of Electron that made this impossible, practically speaking. That said, due to how important these APIs are, how ubiquitous their usage in plugins, and in the interest of backwards-compatibility, BetterDiscord has polyfilled certain APIs to make them available to plugins in the same way as before (`require`). Currently, the list of polyfilled Node modules are: @@ -52,7 +52,7 @@ Currently, the list of polyfilled Node modules are: - Request - VM -These polyfills are not 100% exact replicas of these APIs but they are close enough that 99% of plugins had no issues when switching to this. In the future, BetterDiscord will introduce custom APIs with equivalent functionality, and deprecate the usage of these polyfills. +These polyfills are not 100% exact replicas of these APIs, but they are close enough that 99% of plugins had no issues when switching to this. In the future, BetterDiscord will introduce custom APIs with equivalent functionality, and deprecate the usage of these polyfills. However, for now feel free to use them. For instance, if you want to load a file in the current directory you can just use the `fs` module. @@ -61,12 +61,12 @@ const fs = require("fs"); const myData = fs.readFileSync("myfile.txt", "utf8"); ``` -Though this guide won't be giving a tutorial on the Node.js standard library--their official docs do that--you will see example usages throughout. +Though this guide won't be giving a tutorial on the Node.js standard library–their official docs do that–you will see example usages throughout. ## Plugin API -BetterDiscord provides an API for plugins. The guides here show how it's used and the [API reference](/api/) section has an exhaustive list of what's available. The API exists as a global and provides several utility functions relevant to plugins. This includes data storage, UI rendering, notifications, and utilities to explore Discord's internals. +BetterDiscord provides an API for plugins. The guides here show how it's used, and the [API reference](/api/) section has an exhaustive list of what's available. The API exists as a global and provides several utility functions relevant to plugins. This includes data storage, UI rendering, notifications, and utilities to explore Discord's internals. ## Discord's Internals -Inside of this environment, BetterDiscord provides access to Discord's internals via searching their modules. Understanding and using these modules is a task left to the developer. But the [advanced](../concepts/patching.md) guide provides some insight on how to get started. Searching through and using Discord's own modules are some of the most important skills for building complex plugins. \ No newline at end of file +Inside this environment, BetterDiscord provides access to Discord's internals via searching their modules. Understanding and using these modules is a task left to the developer. But the [advanced](../concepts/patching.md) guide provides some insight on how to get started. Searching through and using Discord's own modules are some of the most important skills for building complex plugins. \ No newline at end of file diff --git a/docs/plugins/introduction/structure.md b/docs/plugins/introduction/structure.md index f3a3cc7..5c16eb8 100644 --- a/docs/plugins/introduction/structure.md +++ b/docs/plugins/introduction/structure.md @@ -8,7 +8,7 @@ description: The requirements and format of a plugin. - There are currently only two types of addons: plugins and themes. - Distributed addons are limited to a single file. - The distributed file must be named in the form `..` where name is the addon name, type is the addon type, and ext is the standard file extension. - - Addon files are split into two major sections, the meta and the body. + - Addon files are split into two major sections, the meta, and the body. - Meta sections (described more below) contain important information about the addon for BetterDiscord, the body section is the main portion of developer content. - Addons are dynamically added, removed, and updated to match the files on the users' system. @@ -47,15 +47,15 @@ And a fully filled out meta using all the fields would look something like this: |Field|Required|Description| |-----|:------:|-----------| -|name|✅|The name of the addon. Typcially does not contain spaces, but is allowed.| +|name|✅|The name of the addon. Typically, does not contain spaces, but is allowed.| |author|✅|The name of you the developer.| -|description|✅|A basic description of the what the addon does.| +|description|✅|A basic description of what the addon does.| |version|✅|Version representing the current update level. [Semantic versioning](https://semver.org/) recommended.| |invite|❌|A Discord invite code, useful for directing users to a support server.| |authorId|❌|Discord snowflake ID of the developer. This allows users to get in touch.| |authorLink|❌|Link to use for the author's name on the addon pages.| |donate|❌|Link to donate to the developer.| -|patreon|❌|Link to the patreon of the developer.| +|patreon|❌|Link to the Patreon of the developer.| |website|❌|Developer's (or addon's) website link.| |source|❌|Link to the source on GitHub of the addon.| @@ -70,11 +70,11 @@ And a fully filled out meta using all the fields would look something like this: ### Overview -BetterDiscord plugins must be in vanilla JavaScript and be contained in a single file in order to be loaded. That means if you want to use something like JSX, or TypeScript it must be transpiled. Similarly if you want to break out your code into multiple files it must be bundled. Both of these topics are covered later in the documentation. In order to cut back on redundancy, your [addon meta](#meta) is provided as a plain object to your main function or constructor. You will see examples of this throughout the documentation. +BetterDiscord plugins must be in vanilla JavaScript and be contained in a single file in order to be loaded. That means if you want to use something like JSX, or TypeScript it must be transpiled. Similarly, if you want to break out your code into multiple files it must be bundled. Both of these topics are covered later in the documentation. In order to cut back on redundancy, your [addon meta](#meta) is provided as a plain object to your main function or constructor. You will see examples of this throughout the documentation. Plugin files must be named in the format `*.plugin.js` where `*` is representative of any string. Usually this matches the name of the plugin without any spaces or special characters, however that is not a requirement. -Plugin files are split into two main pieces, the meta and the plugin code. If either of these are missing the plugin will not load. +Plugin files are split into two main pieces, the meta, and the plugin code. If either of these are missing the plugin will not load. ### Details @@ -92,7 +92,7 @@ module.exports = () => ({ }); ``` -But that of course is not the only way to do it. Many people like the syntactic sugar and extensibility of classes +But that of course is not the only way to do it. Many people like the syntactic sugar and extensibility of classes. ```js module.exports = class { @@ -105,7 +105,7 @@ module.exports = class { }; ``` -while others prefer a more modular functional style. +While others prefer a more modular functional style. ```js const start = () => {}; @@ -143,7 +143,7 @@ These are functions that plugins _can_ make use of but are not required at all. ##### getSettingsPanel -This function allows your plugins to have a settings panel displayed through BetterDiscord. The expected return type is either an `HTMLElement` or a React element. Returning a `string` representing the HTML is deprecated. +This function allows your plugins to have a settings panel displayed through BetterDiscord. The expected return type is either a `HTMLElement` or a React element. Returning a `string` representing the HTML is deprecated. ##### observer diff --git a/docs/plugins/publishing/distribution.md b/docs/plugins/publishing/distribution.md index 01d5a48..7a36da3 100644 --- a/docs/plugins/publishing/distribution.md +++ b/docs/plugins/publishing/distribution.md @@ -8,7 +8,7 @@ order: 2 ### GitHub -Your addon file needs to be committed in your GitHub respository in it's final form (e.g. a single `PluginName.plugin.js` or `ThemeName.theme.css`). This file is the only format that BetterDiscord or the website can understand and work with. It does not matter if this is on a separate branch from your main source code or not, just anywhere as part of the repository. But it must be consistent, moving the file later can break the updating later on. You can use GitHub Actions, normal commits, or even upload via the web UI in GitHub to add and update the file. +Your addon file needs to be committed in your GitHub repository in its final form (e.g. a single `PluginName.plugin.js` or `ThemeName.theme.css`). This file is the only format that BetterDiscord or the website can understand and work with. It does not matter if this is on a separate branch from your main source code or not, just anywhere as part of the repository. But it must be consistent, moving the file later can break the updating later on. You can use GitHub Actions, normal commits, or even upload via the web UI in GitHub to add and update the file. ### Website diff --git a/docs/plugins/publishing/guidelines.md b/docs/plugins/publishing/guidelines.md index 5fd1507..9ce68d1 100644 --- a/docs/plugins/publishing/guidelines.md +++ b/docs/plugins/publishing/guidelines.md @@ -22,7 +22,7 @@ These are guidelines that all plugins are expected to abide by. Any plugin that 1. Plugins must clean up all changes/modification made by the plugin when it is disabled. - This includes UI changes, patches, intervals, timeouts, subscriptions, and listeners. -1. Plugins and their corresponding libraries shall not operate outside of their intended functionality. +1. Plugins and their corresponding libraries shall not operate outside their intended functionality. - This includes but is not limited to: swapping out unrelated components, introducing unnecessary buttons or badges. 1. Plugins must not modify the BetterDiscord UI. - This is to maintain a consistent UI/UX, prevent user confusion, and prevent errors. @@ -37,8 +37,8 @@ These are guidelines that all plugins are expected to abide by. Any plugin that 1. Plugins must not make use of the `child_process` node module. - Existing plugins are exempt, but no new plugins shall use this. This is due in part to the security risk, and in part due to an impending Discord update that will break this module. 1. Plugins must not modify global variables, global objects, or existing `prototype`s. -1. Plugins must not access BetterDiscord globals ouside of the official API. -1. Plugins must not access webpack modules outside of the official API. +1. Plugins must not access BetterDiscord globals outside the official API. +1. Plugins must not access webpack modules outside the official API. 1. Plugins must not waste hardware resources. - e.g., repeated webpack searching without caching, storing unnecessary data in memory. @@ -48,11 +48,11 @@ These are guidelines that all plugins are expected to abide by. Any plugin that 1. Plugins must not remove security features. 1. Plugins must not access user tokens, emails, or passwords. 1. Plugins must not risk a user's account. - - This includes but is not limited to: selfbotting, spamming API requests, using non-user APIs, bypassing nitro features, animated status, message logging. + - This includes but is not limited to: self-botting, spamming API requests, using non-user APIs, bypassing nitro features, animated status, message logging. 1. Plugins must not provide access to potentially sensitive information from other users of the platform which is not otherwise accessible. - This includes but is not limited to: hidden channels, deleted messages, invisible/offline status distinction. 1. Plugins must not use remote libraries. - Necessary dependencies should be either bundled or a separate plugin. -1. Plugins must not use closed source nor self-hosted binaries or libaries. -1. Plugins must not be obfuscated, minified, include sourcemaps, or be otherwise deceitful. +1. Plugins must not use closed source nor self-hosted binaries or libraries. +1. Plugins must not be obfuscated, minified, include source maps, or be otherwise deceitful. 1. Plugins must not bypass the addon approval system by implementing their own update system. diff --git a/docs/plugins/publishing/submit.md b/docs/plugins/publishing/submit.md index 735e666..4fa3b6b 100644 --- a/docs/plugins/publishing/submit.md +++ b/docs/plugins/publishing/submit.md @@ -39,7 +39,7 @@ Due to our small team size, we have no guarantees for how long a review can take ### Denial -1. You'll get a notification that your submission was denied along with a reason mesage. +1. You'll get a notification that your submission was denied along with a reason message. 2. Check your GitHub for any issues opened by the review team. 2. Make any necessary changes and resubmit. diff --git a/docs/plugins/tutorials/addons.md b/docs/plugins/tutorials/addons.md index 28367a1..6ece310 100644 --- a/docs/plugins/tutorials/addons.md +++ b/docs/plugins/tutorials/addons.md @@ -5,15 +5,15 @@ description: Work with other addons. # Addon Interaction -Within BetterDiscord you can interact with different addons in two main ways. Either through direct interaction--like where one plugin puts something in the global scope, and another plugin uses it--or through the `BdApi`. That second one is what we'll be taking a look at today. +Within BetterDiscord you can interact with different addons in two main ways. Either through direct interaction–like where one plugin puts something in the global scope, and another plugin uses it–or through the `BdApi`. That second one is what we'll be taking a look at today. ## AddonAPI -The addon api is available as part of `BdApi`. Theres two instances, one for plugins and one for themes at `BdApi.Plugins` and `BdApi.Themes` respectively. This api has a few helpful utilities for interacting with other plugins, and even has the current addon folder as a property. For a more exhaustive list of available methods and properties, take a look at the [api reference](/api/). +The addon API is available as part of `BdApi`. There are two instances, one for plugins and one for themes at `BdApi.Plugins` and `BdApi.Themes` respectively. This API has a few helpful utilities for interacting with other plugins, and even has the current addon folder as a property. For a more exhaustive list of available methods and properties, take a look at the [API reference](/api/). ## Getting Addons -You can get a specific addon if you know the addon ID using `get(id)`. For example to get the instance of ZeresPluginLibrary you can do +You can get a specific addon if you know the addon ID using `get(id)`. For example, to get the instance of ZeresPluginLibrary you can do ```js BdApi.Plugins.get("ZeresPluginLibrary"); @@ -27,13 +27,13 @@ Modifying the values of this addon instance is unsupported. The `instance` prope ::: -Alternatively you can get _all_ the available addons in a giant array. +Alternatively, you can get _all_ the available addons in a giant array. ```js BdApi.Plugins.getAll(); ``` -This is useful if you need to interact with many addons, or if your checking for existence of others. +This is useful if you need to interact with many addons, or if you're checking for existence of others. ## Toggling Addons @@ -43,7 +43,7 @@ If you have the ID of the addon you'd like to toggle, this is pretty straightfor BdApi.Themes.toggle("Nox"); ``` -Of course you can have more granular control and specifically enable or disable when you need to. You can even combine all three. +Of course, you can have more granular control and specifically enable or disable when you need to. You can even combine all three. ```js BdApi.Themes.enable("Nox"); // Nox is now enabled diff --git a/docs/plugins/tutorials/bundling.md b/docs/plugins/tutorials/bundling.md index 1fa20ce..be6d567 100644 --- a/docs/plugins/tutorials/bundling.md +++ b/docs/plugins/tutorials/bundling.md @@ -24,7 +24,7 @@ No clue. They all have their pros and cons, and Snipcart breaks it down really w ::: tip -This section will be going over how to setup Webpack for use with BetterDiscord. Check the documentation for your own bundler to find configuration options similar to what's shown here. +This section will be going over how to set up Webpack for use with BetterDiscord. Check the documentation for your own bundler to find configuration options similar to what's shown here. ::: @@ -56,7 +56,7 @@ The basic plugin structure consists of a source folder, `src`, an entry point `s ### Making The Plugin -To keep things simple, let's take the plugin from the [previous section](./react.md) and try to separate it out and build it with Webpack. If we identify the parts of that plugin, we end up with the meta comment, the react component, and the main plugin class. So that corresponds to three different files shown below. +To keep things simple, let's take the plugin from the [previous section](./react.md) and try to separate it out and build it with Webpack. If we identify the parts of that plugin, we end up with the meta comment, the React component, and the main plugin class. So that corresponds to three different files shown below. ::: code-group @@ -107,7 +107,7 @@ Before we even configure Webpack proper, let's just quickly adjust our `package. } ``` -Now with that out of the way, let's take a look at a general commonjs output Webpack configuration. +Now with that out of the way, let's take a look at a general CommonJS output Webpack configuration. ```js:line-numbers [webpack.config.js] const path = require("path"); @@ -237,7 +237,7 @@ We'll be using those in our new plugin that we will write ourselves. Making a pl } ``` -But you can call `YourPluginName` anything, it's just used to differeniate between taps. Now we have to write some code that can actually copy the file. The way we'll be showing here is platform agnostic but verbose, so feel free to change it up to work only for your own system. +But you can call `YourPluginName` anything, it's just used to differentiate between taps. Now we have to write some code that can actually copy the file. The way we'll be showing here is platform-agnostic but verbose, so feel free to change it up to work only for your own system. ```js:line-numbers const userConfig = (() => { @@ -268,7 +268,7 @@ npm install --save-dev raw-loader #### Configuration -Add a little `rules` section to your Webpack config and also allow `.css` files to be resolved. +Add a little `rules` section to your Webpack config and allow `.css` files to be resolved. ```js [webpack.config.js] module.exports = { @@ -375,7 +375,7 @@ export default function MyComponent({disabled = false}) { } ``` -Now if you were to build this and open your settings panel, you would get an error saying `React is not defined`. That's because `babel-loader` using `React.createElement` and not `BdApi.React.createElement`. There's two ways to get around this, the easiest is to just put `const React = BdApi.React;` at the top of your component file. That's fine for a single file, but as your plugin expands it becomes very tedious. You can solve this with one small adjustment to the `.babelrc`. +Now if you were to build this and open your settings panel, you would get an error saying `React is not defined`. That's because `babel-loader` using `React.createElement` and not `BdApi.React.createElement`. There are two ways to get around this, the easiest is to just put `const React = BdApi.React;` at the top of your component file. That's fine for a single file, but as your plugin expands it becomes very tedious. You can solve this with one small adjustment to the `.babelrc`. ```json:line-numbers [.babelrc] { diff --git a/docs/plugins/tutorials/creating-a-plugin.md b/docs/plugins/tutorials/creating-a-plugin.md index e7e9c64..41efacc 100644 --- a/docs/plugins/tutorials/creating-a-plugin.md +++ b/docs/plugins/tutorials/creating-a-plugin.md @@ -7,7 +7,7 @@ description: A guide to the basics. ## The Idea -The first thing to do when making a plugin, is to know what exactly you're trying to make. This helps limit the scope of what you're looking through in Discord's DOM tree or internal code, and also helps you structure your plugins. For example, a fully-fledged plugin that handles end-to-end encryption may need a bit more scaffolding than a plugin that just adds a button or some text to the screen. +The first thing to do when making a plugin, is to know what exactly you're trying to make. This helps limit the scope of what you're looking through in Discord's DOM tree or internal code, and helps you structure your plugins. For example, a fully-fledged plugin that handles end-to-end encryption may need a bit more scaffolding than a plugin that just adds a button or some text to the screen. Knowing what you want the plugin to do also allows you to reach out to our community of developers and ask for help. It's much easier to help someone with a specific task or end-goal rather than someone that "just wants to make a plugin". @@ -84,14 +84,14 @@ module.exports = meta => { ``` ::: -It's worth noting when deciding that each plugin is loaded similarly to a node module. This means that defining variables outside of the `module.exports` will not result in scope creep or variable bloat. +It's worth noting when deciding that each plugin is loaded similarly to a node module. This means that defining variables outside the `module.exports` will not result in scope creep or variable bloat. Once you've got that decided, go ahead and save your template in your [plugins folder](../introduction/quick-start#plugin-folder) as `ExamplePlugin.plugin.js` and change `ExamplePlugin` to the name of your choice. ## Things to Keep in Mind -There's a lot to keep in mind as you develop your plugin. One of the most important being how to cleanup when the plugin is disabled. This may seem straightforward, but if you don't have it in mind as you develop, it may slip through the cracks. Say you add some text to the DOM and no longer have a reference to it. When it's time to disable and cleanup, you have to search through the DOM again just to find this node. Instead, if you had remembered that this will need to be cleaned up, you could have kept a reference in order to easily remove it later. +There's a lot to keep in mind as you develop your plugin. One of the most important being how to clean up when the plugin is disabled. This may seem straightforward, but if you don't have it in mind as you develop, it may slip through the cracks. Say you add some text to the DOM and no longer have a reference to it. When it's time to disable and clean up, you have to search through the DOM again just to find this node. Instead, if you had remembered that this will need to be cleaned up, you could have kept a reference in order to easily remove it later. If you're looking to submit this plugin, or share it with others, it's worth keeping in mind what parts of the plugin are opinionated. For example, the way something is formatted or styled may look good to some and not to others. @@ -99,4 +99,4 @@ If you have these things in mind while you develop, you can add unique classes t ## What's Next? -If you feel comfortable with everything so far, you're probably safe to move on to making your plugin by first [interacting with the dom](./dom). Otherwise, take the time and experiment with the plugin templates and see what feels right, maybe even brush up on your JavaScript skills. \ No newline at end of file +If you feel comfortable with everything so far, you're probably safe to move on to making your plugin by first [interacting with the DOM](./dom). Otherwise, take the time and experiment with the plugin templates and see what feels right, maybe even brush up on your JavaScript skills. \ No newline at end of file diff --git a/docs/plugins/tutorials/discord.md b/docs/plugins/tutorials/discord.md index aa5bdb8..af81d34 100644 --- a/docs/plugins/tutorials/discord.md +++ b/docs/plugins/tutorials/discord.md @@ -5,7 +5,7 @@ description: Modifying existing parts of Discord. # Changing Discord -Using DOM manipulation we learned earlier and some new techniques, you can not only add features to Discord--like the button we added in an earlier section--but you can alter existing functionality of the app. +Using DOM manipulation we learned earlier and some new techniques, you can not only add features to Discord–like the button we added in an earlier section–but you can alter existing functionality of the app. ## Intercepting Events @@ -31,4 +31,4 @@ homeButton.addEventListener("click", myNewAction); The important lines here are highlighted. The first line prevents browser default action. The second stops the event from propagating up the DOM tree. The third stops the event from propagating to other listeners on the same element. You can get some more [detailed explanations on MDN](https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation). -You'll note that we kept the `myNewAction` as a separate function so it can later be removed from the element when your plugin stops. But for now, you can go ahead and test this in your DevTools console. When you click the home button, you'll no longer be taken to Discord home and instead you'll see your message in the console. \ No newline at end of file +You'll note that we kept the `myNewAction` as a separate function so it can later be removed from the element when your plugin stops. But for now, you can go ahead and test this in your DevTools console. When you click the home button, you'll no longer be taken to Discord home, and instead you'll see your message in the console. \ No newline at end of file diff --git a/docs/plugins/tutorials/dom.md b/docs/plugins/tutorials/dom.md index 01b7f21..e21a1fd 100644 --- a/docs/plugins/tutorials/dom.md +++ b/docs/plugins/tutorials/dom.md @@ -41,13 +41,13 @@ One thing to note from this code is the root container `document.getElementById( And while that works, it's not very practical or useful. And the location of the button is terrible. So what if we wanted to add it to the end of the guild/server list? Let's give it a try! -First, we need to find the DOM subtree for the guild list, the easiest way to do that is to use inspect element from [devtools](../introduction/devtools.md) and select the guild list on the left. +First, we need to find the DOM subtree for the guild list, the easiest way to do that is to use inspect element from [DevTools](../introduction/devtools.md) and select the guild list on the left. ![Server List](./img/servers.png) -If yours looks like the one above, you've got the right element. Now we need to come up with a selector for the element. You can try to use the built in method by right clicking the element, then going to `Copy > Copy Selector`. But that usually yields unwieldly selectors like `#app-mount > div.appDevToolsWrapper-1QxdQf > div > div.app-3xd6d0 > div > div.layers-OrUESM.layers-1YQhyW > div > div.container-1eFtFS > nav > ul > div.scroller-3X7KbA.none-2-_0dP.scrollerBase-_bVAAt > div:nth-child(3)` in this case. +If yours looks like the one above, you've got the right element. Now we need to come up with a selector for the element. You can try to use the built-in method by right-clicking the element, then going to `Copy > Copy Selector`. But that usually yields unwieldy selectors like `#app-mount > div.appDevToolsWrapper-1QxdQf > div > div.app-3xd6d0 > div > div.layers-OrUESM.layers-1YQhyW > div > div.container-1eFtFS > nav > ul > div.scroller-3X7KbA.none-2-_0dP.scrollerBase-_bVAAt > div:nth-child(3)` in this case. -So lets do it manually. Since this element has no `id` or `class` but it does have an `aria-label` attribute, it seems obvious to use an attribute selector like `[aria-label="Servers"]`. This does have a big problem however. This value changes based on the language the user has Discord set to. So while this may work for you in English, it won't work for many many others. If you're unfamiliar with `aria-label` or accessible web browsing in general, once again [MDN has great documentation](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label) on this topic. +So let's do it manually. Since this element has no `id` or `class`, but it does have an `aria-label` attribute, it seems obvious to use an attribute selector like `[aria-label="Servers"]`. This does have a big problem, however. This value changes based on the language the user has Discord set to. So while this may work for you in English, it won't work for many others. If you're unfamiliar with `aria-label` or accessible web browsing in general, once again [MDN has great documentation](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label) on this topic. Since that didn't work out, let's take another look. We can see there are a couple unique classes in the ancestor hierarchy like `tree-3agP2X` and `guilds-2JjMmN`. We can combine these with the fact the `aria-label` only exists on the element we are targeting to create a selector like `.tree-3agP2X > div > div[aria-label]`. Since this doesn't depend on the *value* of the `aria-label` attribute, it will still work regardless of language. Note: there are other selectors that work as well, this is just an example. @@ -123,7 +123,7 @@ BdApi.DOM.onRemoved(myButton, () => { This is much cleaner and more descriptive of the action being taken. This is just one of the many helper functions that exist in `BdApi`. You'll learn more as you go through the docs. In fact, there are two more functions `addStyle` and `removeStyle` that can be helpful for our button example. -These are pretty simple and straightforward. Say we added a class `my-button` to our button from before. We could then style it with css externally using this snippet: +These are pretty simple and straightforward. Say we added a class `my-button` to our button from before. We could then style it with CSS externally using this snippet: ```css .my-button { padding: 4px; @@ -133,7 +133,7 @@ These are pretty simple and straightforward. Say we added a class `my-button` to } ``` -which is great and works, but we need to have it in our plugin. You can either create and add your own stylesheet to the document using the techniques at the beginning of this page, or you just use `BdApi.DOM.addStyle`. Given an ID and your css, it'll take care of the rest. +Which is great and works, but we need to have it in our plugin. You can either create and add your own stylesheet to the document using the techniques at the beginning of this page, or you just use `BdApi.DOM.addStyle`. Given an ID and your CSS, it'll take care of the rest. ```js BdApi.DOM.addStyle("myPluginName", `.my-button { @@ -144,7 +144,7 @@ BdApi.DOM.addStyle("myPluginName", `.my-button { }`); ``` -which can later be removed using the same ID from before +Which can later be removed using the same ID from before ```js BdApi.DOM.removeStyle("myPluginName"); diff --git a/docs/plugins/tutorials/react.md b/docs/plugins/tutorials/react.md index 3d08cc9..9c7cfe0 100644 --- a/docs/plugins/tutorials/react.md +++ b/docs/plugins/tutorials/react.md @@ -65,7 +65,7 @@ If you think that repeating `BdApi.React` over and over is a bit tedious, many d ## React in BetterDiscord -Some of the [UI related functions](/api/classes/UI.md) of BetterDiscord accept React Components as options to be rendered. Some accept React Nodes/Elements which is just having already called `createElement`. One good example is the confirmation modal. It's already a very helpful utility, but adding in your own custom React component allows for some very powerful UI and UX for end users. Just as a quick example, take a look at how we can combine the our `MyComponent` from before with the confirmation modal. +Some of the [UI related functions](/api/classes/UI.md) of BetterDiscord accept React Components as options to be rendered. Some accept React Nodes/Elements which is just having already called `createElement`. One good example is the confirmation modal. It's already a very helpful utility, but adding in your own custom React component allows for some very powerful UI and UX for end users. Just as a quick example, take a look at how we can combine our `MyComponent` from before with the confirmation modal. ```js BdApi.UI.showConfirmationModal("My Component Demo", BdApi.React.createElement(MyComponent)); @@ -75,7 +75,7 @@ And here's how it looks. ![Plugin Modal](./img/plugin_modal.png) -How you use it is entirely up to you! You can put anything in these modals from something as simple as text information, to full blown settings panels. +How you use it is entirely up to you! You can put anything in these modals from something as simple as text information, to full-blown settings panels. Speaking of settings panels, you might recall from [Plugin Structure](../introduction/structure.md) that plugins can have a `getSettingsPanel()` that return a React component. Look at this sample plugin below for a short example. @@ -137,6 +137,6 @@ BdApi.ReactDOM.unmountComponentAtNode(element); And your button will be gone! -One thing to keep in mind, because Discord is contantly changing elements around, if your element gets removed from the `document`, you should unmount your component. Otherwise, you'll end up with a memory leak. You'll also still be trying to use UI that isn't even visible to the user. You can combine the `unmountComponentAtNode` function with the `MutationObserver` from [Using the DOM](./dom.md) to automatically unmount whenever your element is removed from the `document`. +One thing to keep in mind, because Discord is constantly changing elements around, if your element gets removed from the `document`, you should unmount your component. Otherwise, you'll end up with a memory leak. You'll also still be trying to use UI that isn't even visible to the user. You can combine the `unmountComponentAtNode` function with the `MutationObserver` from [Using the DOM](./dom.md) to automatically unmount whenever your element is removed from the `document`. -Lastly, while this does render React inside of the Discord client, it doesn't actually render as part of Discord's React tree. This might seem inconsequential, but it can be the difference between things working and not. If you're re-using internal Discord components, especially components involving popouts and tooltips, they won't work outside of Discord's tree. If you're interested in rendering inside of Discord's React tree, you'll learn more in the [React Injection](../concepts/react.md) later on. +Lastly, while this does render React inside the Discord client, it doesn't actually render as part of Discord's React tree. This might seem inconsequential, but it can be the difference between things working and not. If you're re-using internal Discord components, especially components involving popouts and tooltips, they won't work outside of Discord's tree. If you're interested in rendering inside of Discord's React tree, you'll learn more in the [React Injection](../concepts/react.md) later on. diff --git a/docs/plugins/tutorials/settings.md b/docs/plugins/tutorials/settings.md index 25904f3..9d42d23 100644 --- a/docs/plugins/tutorials/settings.md +++ b/docs/plugins/tutorials/settings.md @@ -7,7 +7,7 @@ description: How to have settings in your plugin. In BetterDiscord, plugins settings are very open-ended and flexible; there is no one correct way to do them. In this section we're going to look at one way to manage your settings. This includes using BetterDiscord to save and load the settings data, and making use of the `getSettingsPanel` function described in [plugin structure](../introduction/structure). -Using `getSettingsPanel` is the recommended way to show a settings panel to the user because it creates a consistent flow for the user. If every plugin added a button in the Discord UI for their own settings button, it could end up chaotic. Instead using `getSettingsPanel` allows your plugin to have a settings button on the plugins page in the BetterDiscord settings. Most users will expect a plugin to implement this if they have settings of any kind. +Using `getSettingsPanel` is the recommended way to show a settings panel to the user because it creates a consistent flow for the user. If every plugin added a button in the Discord UI for their own settings button, it could end up chaotic. Instead, using `getSettingsPanel` allows your plugin to have a settings button on the plugins page in the BetterDiscord settings. Most users will expect a plugin to implement this if they have settings of any kind. ## Managing Settings @@ -54,7 +54,7 @@ Where you store this object in your plugin is up to the individual developer. It ### Saving Settings -BetterDiscord gives you an easy way to save your settings in a JSON file using `BdApi.Data.save`. This function takes your plugin's name, the key you want to save and the corresponding data to save. This means you can save your entire settings object from above under a single key, or save each key invidually. See the examples below to help understand the difference. +BetterDiscord gives you an easy way to save your settings in a JSON file using `BdApi.Data.save`. This function takes your plugin's name, the key you want to save and the corresponding data to save. This means you can save your entire settings object from above under a single key, or save each key individually. See the examples below to help understand the difference. Saving the whole settings object under a single key: @@ -133,7 +133,7 @@ for (const key of keys) { ::: -The first options--saving the entire object under a single key--may seem redundant at first, but it allows the saving to be done in a single operation. Having it under a `settings` key means you can save other plugin relevant data under different keys without worrying about key collision. It also means that when you load the settings, you can load it in a single operation without having to know the keys beforehand. +The first options–saving the entire object under a single key–may seem redundant at first, but it allows the saving to be done in a single operation. Having it under a `settings` key means you can save other plugin relevant data under different keys without worrying about key collision. It also means that when you load the settings, you can load it in a single operation without having to know the keys beforehand. ### Loading Settings @@ -246,7 +246,7 @@ myButton.style.color = mySettings.accentColor; // "blue" ``` ::: -In this case, the button ends up blue instead of red. While not entirely desireable, it does not cause unexpected issues. This same concept can be applied to adding new settings that did not exist. +In this case, the button ends up blue instead of red. While not entirely desirable, it does not cause unexpected issues. This same concept can be applied to adding new settings that did not exist. The key here is the call to `Object.assign()`. This function extends objects using other objects, essentially combining and overriding the keys. [MDN has a great explanation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) of the details of how this works. In this case, the order is important. You want the loaded data to override any existing value in the default object, so the loaded data comes last in the list. You'll notice that the target object is an empty object `{}`. If you use the default settings object instead, that __object will be modified__ so when you go to use it again in the future the values may be overridden. Using `{}` means a new object will be created and returned. An equivalent and more verbose version is shown below: @@ -274,7 +274,7 @@ For both of these examples below let's assume we have this simple settings schem ### Panel Builder -BetterDiscord now provides it's own JSON-like panel builder API. It's an incredibly convenient but still powerful API. You can see more detailed information in the [UI Components](../ui/settings/overview.md) section of the documentation. Here, we'll be going over how to apply this API to this specific plugin we've been building. +BetterDiscord now provides its own JSON-like panel builder API. It's an incredibly convenient but still powerful API. You can see more detailed information in the [UI Components](../ui/settings/overview.md) section of the documentation. Here, we'll be going over how to apply this API to this specific plugin we've been building. #### Create The Data @@ -427,17 +427,17 @@ module.exports = meta => { }; ``` -Be sure to take note of the change in our `onChange` function where we call `updateButtonText` and `updateButtonTheme` to make the plugin truly reactive to the settings. But importantly we're doing all of it including saving the settings from a single simple listener. This API scales well and the settings can be generated programmatically fairly easily so you don't need to manually create the JSON data. To dive deeper check the settings section of the [UI components](../ui/settings/overview.md) documentation. +Be sure to take note of the change in our `onChange` function where we call `updateButtonText` and `updateButtonTheme` to make the plugin truly reactive to the settings. But importantly we're doing all of it including saving the settings from a single simple listener. This API scales well, and the settings can be generated programmatically fairly easily so you don't need to manually create the JSON data. To dive deeper check the settings section of the [UI components](../ui/settings/overview.md) documentation. ### Classic HTML -Since we're using `getSettingsPanel()` we need to create an html element that not only represents our settings, but allows the user to change them. The best way to do this is to turn each setting into an input and display it to the user.``` +Since we're using `getSettingsPanel()` we need to create an HTML element that not only represents our settings, but allows the user to change them. The best way to do this is to turn each setting into an input and display it to the user.``` The first setting, `buttonText` is a string, which is best represented by a text input `input[type=text]`. The second, `darkMode` is a boolean, best represented by a checkbox `input[type=checkbox]`. #### Create The HTML -So if we were doing this with just html, it might look something like this: +So if we were doing this with just HTML, it might look something like this: ```html:line-numbers
@@ -482,7 +482,7 @@ darkModeSetting.append(darkModeLabel, darkModeInput); mySettingsPanel.append(buttonTextSetting, darkModeSetting); ``` -It's a bit long winded, but that's how it would look using vanilla js with no helper functions. Nonetheless we have a `mySettingsPanel` which represents the html we created. Let's put this into a plugin and see how it looks. Don't forget to `return` your `mySettingsPanel`! +It's a bit long-winded, but that's how it would look using vanilla JS with no helper functions. Nonetheless, we have a `mySettingsPanel` which represents the HTML we created. Let's put this into a plugin and see how it looks. Don't forget to `return` your `mySettingsPanel`! ```js:line-numbers [TutorialPlugin.plugin.js] /** @@ -548,7 +548,7 @@ Enable your plugin in settings, and click the plugin settings button. You should It's not very pretty right now, but that's okay because we're focusing on functionality for the purpose of this tutorial. -Speaking of functionality however, this panel doesn't do much. It does not show the current value and it does not respond to updates by the user. Let's fix that. +Speaking of functionality however, this panel doesn't do much. It does not show the current value, and it does not respond to updates by the user. Let's fix that. ```js:line-numbers // Input element from above diff --git a/docs/plugins/ui/changelogs.md b/docs/plugins/ui/changelogs.md index e5c2385..8f97e08 100644 --- a/docs/plugins/ui/changelogs.md +++ b/docs/plugins/ui/changelogs.md @@ -35,6 +35,6 @@ BdApi.UI.showChangelogModal({ }); ``` -You can check the [api reference](/api/classes/UI.md#showchangelogmodal) for more details, but this little snippet shows the most important features. Notably, this changelog api can also allow you to display a banner image, a youtube video, or a direct video above all of the text. This can be useful when you need to add a showcase of new things or if you just want to have a consistent branding. There are also 4 change "types". In the snippet we see fixed and added, there are also improved and progress. +You can check the [API reference](/api/classes/UI.md#showchangelogmodal) for more details, but this little snippet shows the most important features. Notably, this changelog API can also allow you to display a banner image, a YouTube video, or a direct video above all the text. This can be useful when you need to add a showcase of new things or if you just want to have a consistent branding. There are also 4 change "types". In the snippet we see fixed and added, there are also improved and progress. For now, plugins will have to decide when to display the changelog modal, though it is planned to be more automated in a future BetterDiscord update. For an example of how to do this check out this [Demo Plugin](https://gist.github.com/zerebos/b13adc05f22df008ee5d0411d9d18ff0) featuring the new APIs for BetterDiscord v1.11.0. diff --git a/docs/plugins/ui/modals.md b/docs/plugins/ui/modals.md index 1558b64..51f69d0 100644 --- a/docs/plugins/ui/modals.md +++ b/docs/plugins/ui/modals.md @@ -19,7 +19,7 @@ BdApi.UI.alert("Hello World", "This is just a basic informational modal!"); ::: -You can also pass in a react element for `content` but not for `title`. However, this means you are on your own for functionality and styling. In the last example we saw that the `content` text was colored and themed properly. But let's try just wrapping a string in a react element. +You can also pass in a React element for `content` but not for `title`. However, this means you are on your own for functionality and styling. In the last example we saw that the `content` text was colored and themed properly. But let's try just wrapping a string in a React element. ```jsx @@ -30,7 +30,7 @@ BdApi.UI.alert("Hello World",
This is just a basic informational modal!are not limited to these built-in settings types or even the format. Even the JSON-like API provides a way to use it hybrid with custom components for advanced users. These APIs simply act as a convenient way for plugin developers to quickly scaffold Discord-like settings panels in a consistent way. These APIs and components are stable since they are created by BetterDiscord entirely and are not a wrapper around Discord's internal components. +BetterDiscord provides a convenient suite of setting types either via a JSON-like API or via direct React Component usage. That said, do keep in mind that you are not limited to these built-in settings types or even the format. Even the JSON-like API provides a way to use it hybrid with custom components for advanced users. These APIs simply act as a convenient way for plugin developers to quickly scaffold Discord-like settings panels consistently. These APIs and components are stable since they are created by BetterDiscord entirely and are not a wrapper around Discord's internal components. ## Demo If you want a quick Demo of all the settings components currently available through BetterDiscord, download and test this [Demo Plugin](https://gist.githubusercontent.com/zerebos/b13adc05f22df008ee5d0411d9d18ff0/raw/46f4c64a45090f80cf7042851ef59fd3d5603a69/DemoPlugin.plugin.js) that showcases just about every variant possible including disabled variants. -After installing the plugin, go ahead and enable it then open it's settings. You'll be greeted with the following modal. +After installing the plugin, go ahead and enable it then open its settings. You'll be greeted with the following modal. ![Demo Modal](./img/demo_root.png) @@ -22,17 +22,17 @@ You can then click through and test out the various settings and get a feel for ## Concepts -As mentioned above, BetterDiscord provides two high level ways of making use of these components. Using the React Components directly gives you more control and customization but it also means it has less conveniences and helpers built-in. The documentation here will focus on the JSON-like API since that's our own custom API while React Components are pretty standard. You'll find a lot more information on the component details in the [api reference](../../../api/classes/Components.md). +As mentioned above, BetterDiscord provides two high level ways of making use of these components. Using the React Components directly gives you more control and customization, but it also means it has fewer conveniences and helpers built-in. The documentation here will focus on the JSON-like API since that's our own custom API while React Components are pretty standard. You'll find a lot more information on the component details in the [API reference](../../../api/classes/Components.md). -For our JSON-like API we have 4 main components to consider and it's important to know how they tie into one another. Let's start from the smallest consumable component and zoom out from there. +For our JSON-like API we have 4 main components to consider, and it's important to know how they tie into one another. Let's start from the smallest consumable component and zoom out from there. ### Setting Input -There are many different setting inputs that you'll explore in the next chapters in more detail. But in this context setting input basically means the input UI being shown and the data being collected. For example a Color setting input will likely show some sort of color picker and collect a string representing that color. You'll notice there was no mention of a setting name. That's what comes next. +There are many different setting inputs that you'll explore in the next chapters in more detail. But in this context setting input basically means the input UI being shown and the data being collected. For example, a Color setting input will likely show some sort of color picker and collect a string representing that color. You'll notice there was no mention of a setting name. That's what comes next. ### Setting Item -A Setting Item is what holds a setting type within it. You've probably seen in the demo or in Discord's own settings that typical layout of setting name with description below it and the input on the right hand side. This whole unit is called a setting item. It can have a name, description, and additional metadata like if the input should be inline on the right hand side or displayed after the description. It is otherwise agnostic of the specific setting input being used. +A Setting Item is what holds a setting type within it. You've probably seen in the demo or in Discord's own settings that typical layout of setting name with description below it and the input on the right-hand side. This whole unit is called a setting item. It can have a name, description, and additional metadata like if the input should be inline on the right-hand side or displayed after the description. It is otherwise agnostic of the specific setting input being used. ### Setting Group @@ -40,7 +40,7 @@ Setting Groups are just a list of setting items with some additional UI. If you ### Settings Panel -This is the highest level component and it acts as the wrapper to all of your settings UI. It is a pretty generic component that allows for plenty of customization including custom components. +This is the highest level component, and it acts as the wrapper to all of your settings UI. It is a pretty generic component that allows for plenty of customization including custom components. ## Usage @@ -48,7 +48,7 @@ Our JSON-like API is meant to be a convenient alternative to manually provisioni ### `buildSettingItem()` -As you might imagine, this allows you to build a Setting Item complete with a setting input. In most cases you'll tell it a specific `type` of input to use which will cause it to use one of the built-in setting input components. For advanced users you can also use a `type` of `custom` and provide a `children` render function. This gives you a way to still use the convenience of the JSON-like API while allowing for the flexibility of custom components. More details on the indiviual input types will be in the next sections of the documentation. +As you might imagine, this allows you to build a Setting Item complete with a setting input. In most cases you'll tell it a specific `type` of input to use which will cause it to use one of the built-in setting input components. For advanced users you can also use a `type` of `custom` and provide a `children` render function. This gives you a way to still use the convenience of the JSON-like API while allowing for the flexibility of custom components. More details on the individual input types will be in the next sections of the documentation. Here is what is expected from this API for all settings types: @@ -69,11 +69,11 @@ interface SettingItem { As you'll notice, most of these are optional, and they should all be understandable from name alone. The only one that might be a bit confusing is `id`. BetterDiscord uses this `id` to help keep all of your settings separate and give you an identifier to use when settings change. This isn't as important when doing single Setting Items, but when you create an entire panel at once, it's nice to know where the change is coming from. You'll see more on that in the next section. -Each `SettingType` will require some other properties as well as providing other options. Visit those pages in the documentation for additional details or take a look at the [api reference](../../../api/classes/UI.md#buildsettingitem). +Each `SettingType` will require some other properties as well as providing other options. Visit those pages in the documentation for additional details or take a look at the [API reference](../../../api/classes/UI.md#buildsettingitem). ### `buildSettingsPanel()` -This is a more complicated API that allows for grouping and control over your display of your settings. In this api you have access to a new `type` called `category` that has a list of `settings`. +This is a more complicated API that allows for grouping and control over your display of your settings. In this API you have access to a new `type` called `category` that has a list of `settings`. ```ts interface SettingGroup { @@ -90,7 +90,7 @@ interface SettingGroup { }; ``` -Here you'll notice that the `id` and `onChange` properties are different than you might have expected. They are actually tied together. The `onChange` fires for all child settings that don't have an `onChange` of their own. The `onChange` for the group is given the `id` of the child setting as well as the updated `value`. If you provide a group `id` then the group `onChange` gets the group `id`, the setting `id` as well as the new `value`. This can be a bit confusing but it's a very powerful wrapper that allows you to prevent collisions of `id`s while still keeping things simple. +Here you'll notice that the `id` and `onChange` properties are different than you might have expected. They are actually tied together. The `onChange` fires for all child settings that don't have an `onChange` of their own. The `onChange` for the group is given the `id` of the child setting as well as the updated `value`. If you provide a group `id` then the group `onChange` gets the group `id`, the setting `id` as well as the new `value`. This can be a bit confusing, but it's a very powerful wrapper that allows you to prevent collisions of `id`s while still keeping things simple. This `onChange` is also carried to the top of Settings Panel. @@ -105,7 +105,7 @@ interface SettingsPanel { You'll notice that SettingsPanel has an `onChange` that listens to all settings that don't have an individual `onChange` attached to them. This means you can use a single listener for your entire panel using `id`s to differentiate them. This is actually a very common pattern across plugins as it simplifies the listener setup. -The `getDrawerState` and `onDrawerToggle` are fired when opening and closing a setting group. This is entirely optional, and it's intended use is to save/load the collapsed state of the groups. It's a small quality-of-life feature that users enjoy. BetterDiscord uses this very same API for it's own settings. +The `getDrawerState` and `onDrawerToggle` are fired when opening and closing a setting group. This is entirely optional, and its intended use is to save/load the collapsed state of the groups. It's a small quality-of-life feature that users enjoy. BetterDiscord uses this very same API for its own settings. The return value of `buildSettingsPanel()` can be returned directly to the plugin's `getSettingsPanel()` function that BetterDiscord uses to get your panel. You can see that in the demo plugin above. But in addition to being able to add custom individual items within the panel, you can technically take this return value of a rendered component and modify it as you see fit. You can even make it only a single part of your settings panel. diff --git a/docs/plugins/ui/toasts.md b/docs/plugins/ui/toasts.md index 2ee7bbd..083e491 100644 --- a/docs/plugins/ui/toasts.md +++ b/docs/plugins/ui/toasts.md @@ -6,7 +6,7 @@ Toasts are a BetterDiscord-specific term for a small tooltip-like popup that app ## Showing Toasts -Since toasts are meant to be simple and straightforward messages to the user, making and showing a toast is just the same. The signature is `showNotice(content, options = {})`. But unlike with the modals, `content` can only be a string. And it's safe to ignore the options and still successfully show a fully styled toast. We'll go over the useful ones here, but be sure to check the api reference for a full listing of options. +Since toasts are meant to be simple and straightforward messages to the user, making and showing a toast is just the same. The signature is `showNotice(content, options = {})`. But unlike with the modals, `content` can only be a string. And it's safe to ignore the options and still successfully show a fully styled toast. We'll go over the useful ones here, but be sure to check the API reference for a full listing of options. ```js diff --git a/docs/plugins/ui/tooltips.md b/docs/plugins/ui/tooltips.md index ed9b7b9..d27c079 100644 --- a/docs/plugins/ui/tooltips.md +++ b/docs/plugins/ui/tooltips.md @@ -1,6 +1,6 @@ # Tooltips -Tooltips are yet another overlay element. These are very similar to popouts but much much smaller and usually point to a specific element to indicate that it is giving additional information about it. This is used to make clean buttons or clarify text. +Tooltips are yet another overlay element. These are very similar to popouts but much smaller and usually point to a specific element to indicate that it is giving additional information about it. This is used to make clean buttons or clarify text. ![Tooltip Example](./img/tooltip.png) @@ -30,7 +30,7 @@ The sides available are top, right, bottom, and left. The styles available are primary, info, success, warn, and danger. -You can also directly access the elements of the tooltip afterwards. So if you need to update the label you can do something like this: +You can also directly access the elements of the tooltip afterward. So if you need to update the label you can do something like this: ```js tooltip.labelElement.textContent = "New label"; diff --git a/docs/themes/concepts/performance.md b/docs/themes/concepts/performance.md index f32b553..7abff60 100644 --- a/docs/themes/concepts/performance.md +++ b/docs/themes/concepts/performance.md @@ -26,7 +26,7 @@ Attribute selectors are great and very useful. But they also mean more computati ### Animations & Transitions -This section may feel a little more obvious than the last, but having more animations can lead to a drop in performance. More animations means more calculations for the users computer to handle and more rendering for it to deal with. The same can be said for transitions. This is usually not as bad when the user has a dedicated GPU and they have hardware acceleration enabled, but this is definitely not the case for all users. What's worse, is that web rendering doesn't always get put onto the dedicated GPU even if it exists and hardware acceleration is on. There are some ways to try and trick it though that we'll go over in the next section. +This section may feel a little more obvious than the last, but having more animations can lead to a drop in performance. More animations mean more calculations for the user's computer to handle and more rendering for it to deal with. The same can be said for transitions. This is usually not as bad when the user has a dedicated GPU, and they have hardware acceleration enabled, but this is definitely not the case for all users. What's worse, is that web rendering doesn't always get put onto the dedicated GPU even if it exists and hardware acceleration is on. There are some ways to try and trick it though that we'll go over in the next section. ## Optimizations @@ -55,10 +55,10 @@ Here are a few tips for improving your attribute selectors. ### Animations & Transitions -There are a few different techniques that improve your animations and transitions. One of the first is understanding the rule of thumb: "Do not animate CSS properties that trigger layout or painting whenever possible." This includes properties like heigh and width that could cause other elements to move around as you animate. It is very difficult to produce smooth and performant animations in these cases. +There are a few different techniques that improve your animations and transitions. One of the first is understanding the rule of thumb: "Do not animate CSS properties that trigger layout or painting whenever possible." This includes properties like height and width that could cause other elements to move around as you animate. It is very difficult to produce smooth and performant animations in these cases. You can indicate to the browser before animations and transitions what properties will change which can help the browser optimize performance. Just add `will-change: property;` to the element in question. -As we talked about above, not all animations will be rendering on the GPU when available. There a couple ways to try and trigger this, and it usually involves creating new paint layers. If you're unfamiliar with this concept, that's understandable, it's a concept internal to web browsers. But if you do want to go down this route, you can try adding a 3d `transform` to the element that does nothing (`transform: translateZ(0)`). This works in all browsers. If you're targeting just modern browsers (like Chrome/Discord) then it's enough to just do `will-change: transform`. +As we talked about above, not all animations will be rendering on the GPU when available. There are a couple of ways to try and trigger this, and it usually involves creating new paint layers. If you're unfamiliar with this concept, that's understandable, it's a concept internal to web browsers. But if you do want to go down this route, you can try adding a 3d `transform` to the element that does nothing (`transform: translateZ(0)`). This works in all browsers. If you're targeting just modern browsers (like Chrome/Discord) then it's enough to just do `will-change: transform`. If you want to learn more about performant CSS animations and even learn how to debug your own, check out the [animation guide](https://web.dev/animations-guide/) from web.dev. \ No newline at end of file diff --git a/docs/themes/concepts/preprocessing.md b/docs/themes/concepts/preprocessing.md index 684a509..001f2b5 100644 --- a/docs/themes/concepts/preprocessing.md +++ b/docs/themes/concepts/preprocessing.md @@ -4,7 +4,7 @@ order: 2 # Preprocessing & Minification -This section of the guide will walk you through the the concepts of preprocessing and minification with CSS and then do a small walkthrough. +This section of the guide will walk you through the concepts of preprocessing and minification with CSS and then do a small walkthrough. ## Background @@ -12,21 +12,21 @@ This section of the guide will walk you through the the concepts of preprocessin Preprocessors for CSS are usually little scripting languages that give you more power in your CSS. They allow you to use variables, nested selectors, conditional branches, functions, mixins, and even math. They can also help ensure the correctness of your CSS and maintain backward compatibility with older browsers. They can also help reduce the amount of CSS overall by checking for bloated selectors. -Minification is just transpiling your css to use as few characters as possible. This includes little tricks like not having a semicolon `;` on the last property of a selector style, and of course getting rid of all newlines. Most preprocessors have an option to perform minification as part of the task. +Minification is just transpiling your CSS to use as few characters as possible. This includes little tricks like not having a semicolon `;` on the last property of a selector style, and of course getting rid of all newlines. Most preprocessors have an option to perform minification as part of the task. ### Why would I want one? -These systems can enable you to make more complex themes that are easily maintainable. They can help cut down on reptition and reused code. They can also allow you to break your css out into multiple files and compile them together into one at the end. Whereas minification allows CSS loaded remotely to load faster because there is less data for a user to download. +These systems can enable you to make more complex themes that are easily maintainable. They can help cut down on repetition and reused code. They can also allow you to break your CSS out into multiple files and compile them together into one at the end. Whereas minification allows CSS loaded remotely to load faster because there is less data for a user to download. ## Preprocessor Options -There are many options these days when it comes to CSS preprocessors. The most popular options are Sass/scss, Less, Stylus, and PostCSS*. You can read a brief introduction to each of them [here](https://www.bitdegree.org/tutorials/css-preprocessor/). Or for even more options take a look at [this article](https://www.sitepoint.com/6-current-options-css-preprocessors/). +There are many options these days when it comes to CSS preprocessors. The most popular options are Sass/SCSS, Less, Stylus, and PostCSS*. You can read a brief introduction to each of them [here](https://www.bitdegree.org/tutorials/css-preprocessor/). Or for even more options take a look at [this article](https://www.sitepoint.com/6-current-options-css-preprocessors/). -*PostCSS is a bit of an exception because it is more of a postprocessor,, it can do all sorts of things with your CSS including handling the preprocessing through the other 3 mentioned preprocessors. Also unlike the others, PostCSS does not have all of the features out of the gate, it is a modular system so you only include what features you need. +*PostCSS is a bit of an exception because it is more of a post-processor, it can do all sorts of things with your CSS including handling the preprocessing through the other 3 mentioned preprocessors. Also unlike the others, PostCSS does not have all the features out of the gate, it is a modular system so you only include what features you need. ### Which is right for me? -We don't know. Only you can make that decision for you and your project. The big preprocessors all generally have the same features and capabilites so it often comes down to personal preference of syntax. By far the most popular is SCSS which is a syntax for Sass. The most free and open ended is Stylus since it allows you to include or omit as much syntax as you want. Then there's PostCSS, which by default just uses regular CSS syntax but can be expanded to do just about anything. Raygun gives a really good breakdown on all this different syntaxes with multiple examples in [their article](https://raygun.com/blog/css-preprocessors-examples/). We recommend giving it a look to help you decide. +We don't know. Only you can make that decision for you and your project. The big preprocessors all generally have the same features and capabilities so it often comes down to personal preference of syntax. By far the most popular is SCSS which is a syntax for Sass. The most free and open-ended is Stylus since it allows you to include or omit as much syntax as you want. Then there's PostCSS, which by default just uses regular CSS syntax but can be expanded to do just about anything. Raygun gives a really good breakdown on all this different syntaxes with multiple examples in [their article](https://raygun.com/blog/css-preprocessors-examples/). We recommend giving it a look to help you decide. ## Walkthrough @@ -86,11 +86,11 @@ module.exports = ctx => { }; ``` -As a quick explanation of what's going on here: `map: false` means we are not making sourcemaps, and that's a whole separate topic. It also means we are using two plugins, the ones we installed before. We load `postcss-easy-import` with no configured options. And `postcss-csso` is configured to run only in `production` mode and turn off otherwise. +As a quick explanation of what's going on here: `map: false` means we are not making source maps, and that's a whole separate topic. It also means we are using two plugins, the ones we installed before. We load `postcss-easy-import` with no configured options. And `postcss-csso` is configured to run only in `production` mode and turn off otherwise. ### Code -With the set up out of the way, we're actually almost done. Let's just make our CSS files. +With the set-up out of the way, we're actually almost done. Let's just make our CSS files. ::: code-group @@ -117,9 +117,9 @@ With the set up out of the way, we're actually almost done. Let's just make our ``` ::: -Seems almost too easy, right? Well let's run `npm run build` anyways and see what happens. +Seems almost too easy, right? Well let's run `npm run build` anyway and see what happens. -It seems to build just fine, and there's a new `dist` folder with an `import.css` inside. +It seems to build just fine, and there's a new `dist` folder with a `import.css` inside. ```css [dist/import.css] .wrapper-2PSQCG, @@ -138,8 +138,8 @@ It seems to build just fine, and there's a new `dist` folder with an `import.css } ``` -If you got this same result then you're all set! PostCSS is working perfectly and now you can have unlimited files for your CSS. +If you got this same result then you're all set! PostCSS is working perfectly, and now you can have unlimited files for your CSS. -By the way. using `postcss-easy-import` over some other options allows you to use [glob](https://en.wikipedia.org/wiki/Glob_(programming)) imports, which means you can include entire *folders* at once if you wanted. +By the way, using `postcss-easy-import` over some other options allows you to use [glob](https://en.wikipedia.org/wiki/Glob_(programming)) imports, which means you can include entire *folders* at once if you wanted. If you're interested in what other things you can do with PostCSS take a look at [their README](https://github.com/postcss/postcss). For information on using the other preprocessors, they all have great tutorials on their official websites you can follow. No special setup for BetterDiscord needed! \ No newline at end of file diff --git a/docs/themes/index.md b/docs/themes/index.md index d6607cc..318a148 100644 --- a/docs/themes/index.md +++ b/docs/themes/index.md @@ -4,7 +4,7 @@ order: 1 # Overview -Themes are exactly as they sound, a way to completely alter the look and feel of the client. Some themes might just add a background image to the client, while others try to emulate the look and feel of other programs, or even other operating systems. They do this by using pure css like a webpage as opposed to using preset names that limit the creativity of developers. +Themes are exactly as they sound, a way to completely alter the look and feel of the client. Some themes might just add a background image to the client, while others try to emulate the look and feel of other programs, or even other operating systems. They do this by using pure CSS like a webpage as opposed to using preset names that limit the creativity of developers. ::: tip @@ -26,6 +26,6 @@ The [Discord Reference](../discord/variables.md) section is purely a reference t The following resources will be handy for learning and reference: -- MDN CSS Basics - https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics +- MDN CSS basics - https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/CSS_basics - Chrome DevTools - https://developer.chrome.com/docs/devtools/ - CSS-Tricks - https://css-tricks.com/ \ No newline at end of file diff --git a/docs/themes/introduction/devtools.md b/docs/themes/introduction/devtools.md index c16c237..bb928b3 100644 --- a/docs/themes/introduction/devtools.md +++ b/docs/themes/introduction/devtools.md @@ -11,7 +11,7 @@ These are tools that help with both general web development, and working with th If you have past web development experience you are probably already familiar with the Chrome/Chromium DevTools. If not, it might be a good idea to give [its documentation](https://developer.chrome.com/docs/devtools/) a once-over. -Working in this Discord (and BetterDiscord) environment, we have access to these DevTools. Discord has this disabled by default, but it is possible to reenable this functionality in the BetterDiscord settings. Go to the BetterDiscord Settings page and find the Developer Settings. Then check the option for DevTools. +Working in this Discord (and BetterDiscord) environment, we have access to these DevTools. Discord has this disabled by default, but it is possible to re-enable this functionality in the BetterDiscord settings. Go to the BetterDiscord Settings page and find the Developer Settings. Then check the option for DevTools. ![Developer Tools](./img/developer_settings.png) @@ -23,7 +23,7 @@ If you have past web development experience but not a lot of React experience, i Since this environment is one with Chromium DevTools, we can add extensions meant for those DevTools. Unfortunately, this is not packaged with Discord or BetterDiscord, but BetterDiscord can add the React DevTools for you if you download it and place it in the BetterDiscord folder. -To get this setup, download this [special manifest v2](https://github.com/mondaychen/react/raw/017f120369d80a21c0e122106bd7ca1faa48b8ee/packages/react-devtools-extensions/ReactDevTools.zip) version of the extension. Currently the version in the Chrome extension store only works for manifest v3 which is not compatible with electron. +To get this setup, download this [special manifest v2](https://github.com/mondaychen/react/raw/017f120369d80a21c0e122106bd7ca1faa48b8ee/packages/react-devtools-extensions/ReactDevTools.zip) version of the extension. Currently, the version in the Chrome extension store only works for manifest v3 which is not compatible with electron. Open your BetterDiscord folder and make a new folder inside called `extensions`. Within this folder, make another new folder with the React DevTools extension ID `fmkadmapgofadopljbjfkapdkoienihi`. The path should look something like `/extensions/fmkadmapgofadopljbjfkapdkoienihi/`. Extract the contents of the `zip` you downloaded directly to this folder. diff --git a/docs/themes/introduction/environment.md b/docs/themes/introduction/environment.md index 16537b6..84268ec 100644 --- a/docs/themes/introduction/environment.md +++ b/docs/themes/introduction/environment.md @@ -11,15 +11,15 @@ The theming environment is a pretty open one when it comes to BetterDiscord them ### Discord's Variables -Discord uses a large number of CSS variables that determine the styling of the client. Themes are free to (and often do) override these variables for their own purposes. The names of the variables don't follow a specific naming convention nor do they have a prefix. You can see the live up to date list at any time in DevTools by scrolling up to the `:root` selector. In most cases, that is enough to see all the variables and their values for the current theme (light/dark). There are some small cases where a variable is set with a more specific selector, they have to be handled or overridden on a case-by-case basis. +Discord uses a large number of CSS variables that determine the styling of the client. Themes are free to (and often do) override these variables for their own purposes. The names of the variables don't follow a specific naming convention nor do they have a prefix. You can see the live up-to-date list at any time in DevTools by scrolling up to the `:root` selector. In most cases, that is enough to see all the variables and their values for the current theme (light/dark). There are some small cases where a variable is set with a more specific selector, they have to be handled or overridden on a case-by-case basis. ### Your Variables -If you use any variables in your theme—and you should for the user's sake—then you should know that there is no automatic scoping by BetterDiscord for a theme's variables. That means if you use overly generic variables like `--link-color` it might conflict with the variable of another theme or even Discord's variables. Now you might think that themes are generally mutually exclusive so we shouldn't worry about variable collision. But users also often use CSS snippets or littel pieces of other themes that include variables that can collide. It's generally recommended to prefix your CSS variables with something unique to your theme. For example the [Nox](https://betterdiscord.app/theme/Nox) theme prefixes their variables with `nox-` so they have variables like `--nox-accent`. It's a good rule of thumb to follow. +If you use any variables in your theme—and you should for the user's sake—then you should know that there is no automatic scoping by BetterDiscord for a theme's variables. That means if you use overly generic variables like `--link-color` it might conflict with the variable of another theme or even Discord's variables. Now you might think that themes are generally mutually exclusive so we shouldn't worry about variable collision. But users also often use CSS snippets or little pieces of other themes that include variables that can collide. It's generally recommended to prefix your CSS variables with something unique to your theme. For example, the [Nox](https://betterdiscord.app/theme/Nox) theme prefixes their variables with `nox-` so they have variables like `--nox-accent`. It's a good rule of thumb to follow. ## Class Name Conventions -Discord's class names are generated partially automatically. You'll notice a common pattern of a classname starting with a human-readable name, then a dash, then some randomly generated stuff to prevent conflicts with similar names. These do not generate on every release of the client, they regenerate whenever new classnames that would normally conflict are added or when significant changes to that part of the UI occur. Anecdotally speaking, the current classnames have been fairly stable without a large change for quite some time. +Discord's class names are generated partially automatically. You'll notice a common pattern of a class name starting with a human-readable name, then a dash, then some randomly generated stuff to prevent conflicts with similar names. These do not generate on every release of the client, they regenerate whenever new class names that would normally conflict are added or when significant changes to that part of the UI occur. Anecdotally speaking, the current class names have been fairly stable without a large change for quite some time. ## Light/Dark Theme @@ -31,8 +31,8 @@ Discord has several accessibility options which many users take advantage of for ### Reduced Motion -You can detect if a user has this enabled using a media query. See [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) for details. To explain this briefly, users with this enabled want to have less animations and transitions. This could be due to a medical issue, or simply because they have a lower powered PC. Either way, this is an important one to try and abide by. +You can detect if a user has this enabled using a media query. See [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion) for details. To explain this briefly, users with this enabled want to have fewer animations and transitions. This could be due to a medical issue, or simply because they have a lower powered PC. Either way, this is an important one to try and abide by. ## Operating System -This is another important thing to keep in mind when developing a theme. The client does not have the exact same design and layout on the three major platforms. The most obvious difference between them is the titlebar and control buttons. A lesser known but also important difference is the settings panel. Windows has an extra settings tab compares to MacOS or Linux so the number of tabs varies across operating systems. This can affect themes attempting to add icons to the settings tabs. +This is another important thing to keep in mind when developing a theme. The client does not have the exact same design and layout on the three major platforms. The most obvious difference between them is the title bar and control buttons. A lesser known but also important difference is the settings panel. Windows has an extra settings tab compares to MacOS or Linux so the number of tabs varies across operating systems. This can affect themes attempting to add icons to the settings tabs. diff --git a/docs/themes/introduction/structure.md b/docs/themes/introduction/structure.md index 85450b5..e5e58fc 100644 --- a/docs/themes/introduction/structure.md +++ b/docs/themes/introduction/structure.md @@ -46,25 +46,25 @@ And a fully filled out meta using all the fields would look something like this: |Field|Required|Description| |-----|:------:|-----------| -|name|✅|The name of the addon. Typcially does not contain spaces, but is allowed.| +|name|✅|The name of the addon. Typically, does not contain spaces, but is allowed.| |author|✅|The name of you the developer.| -|description|✅|A basic description of the what the addon does.| +|description|✅|A basic description of what the addon does.| |version|✅|Version representing the current update level. [Semantic versioning](https://semver.org/) recommended.| |invite|❌|A Discord invite code, useful for directing users to a support server.| |authorId|❌|Discord snowflake ID of the developer. This allows users to get in touch.| |authorLink|❌|Link to use for the author's name on the addon pages.| |donate|❌|Link to donate to the developer.| -|patreon|❌|Link to the patreon of the developer.| +|patreon|❌|Link to the Patreon of the developer.| |website|❌|Developer's (or addon's) website link.| |source|❌|Link to the source on GitHub of the addon.| ## Body -BetterDiscord themes must be in vanilla CSS and be contained in a single file in order to be loaded. That means if you want to use something like Sass, or Stylus it must be transpiled. Similarly if you want to break out your code into multiple files it must be bundled. Both of these topics are covered later in the documentation. +BetterDiscord themes must be in vanilla CSS and be contained in a single file in order to be loaded. That means if you want to use something like Sass, or Stylus it must be transpiled. Similarly, if you want to break out your code into multiple files it must be bundled. Both of these topics are covered later in the documentation. Theme files must be named in the format `*.theme.css` where `*` is representative of any string. Usually this matches the name of the theme without any spaces or special characters, however that is not a requirement. -Theme files are split into two main pieces, the meta and the css. If either of these are missing the theme will not load. +Theme files are split into two main pieces, the meta, and the CSS. If either of these are missing the theme will not load. ### CSS diff --git a/docs/themes/publishing/distribution.md b/docs/themes/publishing/distribution.md index 01d5a48..7a36da3 100644 --- a/docs/themes/publishing/distribution.md +++ b/docs/themes/publishing/distribution.md @@ -8,7 +8,7 @@ order: 2 ### GitHub -Your addon file needs to be committed in your GitHub respository in it's final form (e.g. a single `PluginName.plugin.js` or `ThemeName.theme.css`). This file is the only format that BetterDiscord or the website can understand and work with. It does not matter if this is on a separate branch from your main source code or not, just anywhere as part of the repository. But it must be consistent, moving the file later can break the updating later on. You can use GitHub Actions, normal commits, or even upload via the web UI in GitHub to add and update the file. +Your addon file needs to be committed in your GitHub repository in its final form (e.g. a single `PluginName.plugin.js` or `ThemeName.theme.css`). This file is the only format that BetterDiscord or the website can understand and work with. It does not matter if this is on a separate branch from your main source code or not, just anywhere as part of the repository. But it must be consistent, moving the file later can break the updating later on. You can use GitHub Actions, normal commits, or even upload via the web UI in GitHub to add and update the file. ### Website diff --git a/docs/themes/publishing/guidelines.md b/docs/themes/publishing/guidelines.md index 96b7818..77fc729 100644 --- a/docs/themes/publishing/guidelines.md +++ b/docs/themes/publishing/guidelines.md @@ -4,7 +4,7 @@ order: 1 # Theme Guidelines -These are guidelines that all themes are expected to abide by. Any themes that violates these will not be added to the BetterDiscord website or marked as official or approved in any fashion. Existing themes that push updates that violate these guidelines will have their updates denied. +These are guidelines that all themes are expected to abide by. Any theme that violates these will not be added to the BetterDiscord website or marked as official or approved in any fashion. Existing themes that push updates that violate these guidelines will have their updates denied. ## General Guidelines @@ -22,14 +22,14 @@ These are guidelines that all themes are expected to abide by. Any themes that v - e.g. hiding potentially important actions, unreadable text contrast, use of harmful animations, and flashing text. 1. Do not target a specific user or group of users in a negative way (do not attempt to "ban" people). 1. Do not encourage users to further violate Discord's [Terms of Service](https://discord.com/terms), or promote content from outside of the official repository. -1. Try to maintain support for Discord's accessability features. +1. Try to maintain support for Discord's accessibility features. 1. Maintain performance on modern hardware. - - This can be done by limiting the use of intensive animations, filters and effects. + - This can be done by limiting the use of intensive animations, filters, and effects. ## Code 1. Your theme's codebase must be made and written primarily by you. - You may not submit an automatically-generated theme, a customized version of someone else's theme, or a codebase written by someone other than you. -1. Only import code from trusted services. (Github, Gitlab, Google Fonts, etc...) +1. Only import code from trusted services. (GitHub, GitLab, Google Fonts, etc...) 1. Do not abuse remote resources to gather user information, use untrusted content, or circumvent security permissions. 1. You may reverse-engineer or use other people's code, provided you have proper permission and your theme's core design does not rely on third-party code. 1. Minimize usage of language-specific selectors (e.g. `aria-label` attributes). diff --git a/docs/themes/publishing/submit.md b/docs/themes/publishing/submit.md index 735e666..4fa3b6b 100644 --- a/docs/themes/publishing/submit.md +++ b/docs/themes/publishing/submit.md @@ -39,7 +39,7 @@ Due to our small team size, we have no guarantees for how long a review can take ### Denial -1. You'll get a notification that your submission was denied along with a reason mesage. +1. You'll get a notification that your submission was denied along with a reason message. 2. Check your GitHub for any issues opened by the review team. 2. Make any necessary changes and resubmit. diff --git a/docs/themes/tutorials/creating.md b/docs/themes/tutorials/creating.md index a943bdb..b82f893 100644 --- a/docs/themes/tutorials/creating.md +++ b/docs/themes/tutorials/creating.md @@ -14,7 +14,7 @@ Let's start with the premise that we want to make Discord look more like [Visual ## Analysis -Since we're using VSCode as our point of reference, it's a good idea to work out how to map one UI to the other. With VSCode, it's not too difficult. There's the controls on the left panel which is narrow, just like the guild list. We can map those together. The `Explorer` pane of VSCode roughly lines up with where the channel list, dm list, and account container are in Discord. The main editor panel can map to the general chat area, while the terminal at the bottom can map to the textarea. But what do we do about the member list on the right? There is no default right-hand panel in VSCode. But the color scheme and layout of the member list is roughly the same as the channel list, so we can map that to the `Explorer` pane as well and make the interface somewhat symmetrical. +Since we're using VSCode as our point of reference, it's a good idea to work out how to map one UI to the other. With VSCode, it's not too difficult. There are the controls on the left panel which is narrow, just like the guild list. We can map those together. The `Explorer` pane of VSCode roughly lines up with where the channel list, DM list, and account container are in Discord. The main editor panel can map to the general chat area, while the terminal at the bottom can map to the text area. But what do we do about the member list on the right? There is no default right-hand panel in VSCode. But the color scheme and layout of the member list is roughly the same as the channel list, so we can map that to the `Explorer` pane as well and make the interface somewhat symmetrical. ## Implementing @@ -39,7 +39,7 @@ Let's get back to the guild list. The first step to theming it is to understand ::: -But you might be asking, why that element specifically? We select this element, because it's the highest element in the DOM tree without going into a shared container. That is to say, if you select the next ancestor in the DOM tree you'll see that it suddenly includes the chat, channel, and member list. Since we're targeting the guild list, this is our starting point. We can always traverse down the tree as needed. +But you might be asking why that element specifically? We select this element, because it's the highest element in the DOM tree without going into a shared container. That is to say, if you select the next ancestor in the DOM tree you'll see that it suddenly includes the chat, channel, and member list. Since we're targeting the guild list, this is our starting point. We can always traverse down the tree as needed. Looking at this element however, we can see that the background for the guild list is being set on this element. Check the `Styles` panel in the screenshot above. We can see it's being set to a variable called `--background-tertiary`. So we have two options, override the background for this element, or set this Discord variable to our value. Let's try for the latter and add this to our theme: @@ -49,7 +49,7 @@ Looking at this element however, we can see that the background for the guild li } ``` -The `#333333` comes from the corresponding VSCode panel. If you save your theme, you'll suddenly see that the guild list has changed color to match VSCode. Moreover, you might see some other colors have changed too, like the titlebar on windows, and the background of the search bar. +The `#333333` comes from the corresponding VSCode panel. If you save your theme, you'll suddenly see that the guild list has changed color to match VSCode. Moreover, you might see some other colors have changed too, like the title bar on Windows, and the background of the search bar. Next, let's see if we can make the guild list even narrower. The bar in VSCode is about `50px` wide. @@ -59,7 +59,7 @@ Next, let's see if we can make the guild list even narrower. The bar in VSCode i } ``` -Save once again and you'll see that the guild list shrunk as expected! But, the guilds didn't shrink with it and they got cut off. This is where theming in BetterDiscord differentiates from typical web development, traversing the DOM tree to find out what else has to be overidden to actually do what you want. Let's do that together! Checking each node as we go, the first one we see that sets its own width has the selector `.listItem-3SmSlK` which sets it to `72px`. Let's go ahead and change that to `50px` as well. +Save once again, and you'll see that the guild list shrunk as expected! But, the guilds didn't shrink with it, and they got cut off. This is where theming in BetterDiscord differentiates from typical web development, traversing the DOM tree to find out what else has to be overridden to actually do what you want. Let's do that together! Checking each node as we go, the first one we see that sets its own width has the selector `.listItem-3SmSlK` which sets it to `72px`. Let's go ahead and change that to `50px` as well. ```css .guilds-2JjMmN, @@ -87,9 +87,9 @@ Well that didn't work. Let's check what went wrong. Immediately we see the next } ``` -Wow what a difference that makes! The guild list suddenly ooks and feels a lot different from where we started and we've barely done anything. There's still that issue with the expanded folder backgrounds, so lets select that element and see what's going on. +Wow, what a difference that makes! The guild list suddenly looks and feels a lot different from where we started, and we've barely done anything. There's still that issue with the expanded folder backgrounds, so let's select that element and see what's going on. -Ah looks like another `48px`, we can easily change that to `33px` to match. But what about `left`? Since that's an alignment, we'll have to scale that too. `12px` is `16.6667%` of `72px` so that's `8.333px` for our size, and we'll round down again to `8px` and see if that's enough. +Ah, looks like another `48px`, we can easily change that to `33px` to match. But what about `left`? Since that's an alignment, we'll have to scale that too. `12px` is `16.6667%` of `72px` so that's `8.333px` for our size, and we'll round down again to `8px` and see if that's enough. ```css diff --git a/docs/themes/tutorials/process.md b/docs/themes/tutorials/process.md index 47e5603..9677336 100644 --- a/docs/themes/tutorials/process.md +++ b/docs/themes/tutorials/process.md @@ -12,7 +12,7 @@ If you just want a quick example of the basics, check out the [example](#example This may seem obvious, but you can't make a theme without some sort of design in mind. There are many different methods for this, and different levels as well. Some people go into it with a vague mental image of how they want to make the client look. Some people mock up their own designs in Photoshop or other similar software. There's also people that use something else as a reference like how the theme [Slate](https://betterdiscord.app/theme/Slate) is based on the [GitHub Desktop](https://desktop.github.com/) application. -We would definitely recommend the latter two options when it comes to designing a themes. It helps keep your theme consistent, and prevents forgetting what you wanted to do. +We would definitely recommend the latter two options when it comes to designing a theme. It helps keep your theme consistent, and prevents forgetting what you wanted to do. ### Layout & Usability @@ -20,7 +20,7 @@ When you're designing your theme, keep in mind that you have essentially full co ### Color Scheme -Every good theme needs a good color scheme, and there are plenty of tools online that help you generate entire color palettes such as [Coolers](https://coolors.co/) (no that's not a typo 😁) which can automatically generate entire palettes or work with existing ones to generate complementary or shaded schemes. Definitely play around with these tools to come up with your own color scheme and do your best to stick with it as you make your theme. Having a set color scheme before implementing makes the code more seamless from the start, and it also makes it smoother because you don't have to stumble over different parts of the design to make a decision. +Every good theme needs a good color scheme. There are plenty of tools online that help you generate entire color palettes such as [Coolers](https://coolors.co/) (no that's not a typo 😁) which can automatically generate entire palettes or work with existing ones to generate complementary or shaded schemes. Definitely play around with these tools to come up with your own color scheme and do your best to stick with it as you make your theme. Having a set color scheme before implementing makes the code more seamless from the start, and it also makes it smoother because you don't have to stumble over different parts of the design to make a decision. ### Icons diff --git a/docs/themes/tutorials/remote.md b/docs/themes/tutorials/remote.md index 1cd804f..4e57c18 100644 --- a/docs/themes/tutorials/remote.md +++ b/docs/themes/tutorials/remote.md @@ -4,7 +4,7 @@ order: 4 # Remote Imports -In this section we'll go over remote imports of resources and how you can even remotely import your own theme to let your theme update automatically for your users. With remote resourced, you need to ensure that the page serving your resource provides the correct [MIME type](https://developer.mozilla.org/en-US/docs/Glossary/MIME_type). If you're not sure, or don't what what that is, don't worry. We'll talk about it a bit below. +In this section we'll go over remote imports of resources and how you can even remotely import your own theme to let your theme update automatically for your users. With remote resourced, you need to ensure that the page serving your resource provides the correct [MIME type](https://developer.mozilla.org/en-US/docs/Glossary/MIME_type). If you're not sure, or don't know what that is, don't worry. We'll talk about it a bit below. ## Resources @@ -12,16 +12,16 @@ You can use remote resources in your theme by making use of the `@import` direct ### Addons -Another type of resource used by themes is... other themes! There are some themes sometimes classified as "mini-themes" or even *snippets* that can serve as building blocks for your theme. Take a look at the documentation for it if it exists, they'll typically tell you to use a github pages style link (`.github.io/`), which is perfect for use in BetterDiscord. From there, you can customize it via variables or even override some of their styles with custom ones. +Another type of resource used by themes is... other themes! There are some themes sometimes classified as "mini-themes" or even *snippets* that can serve as building blocks for your theme. Take a look at the documentation for it if it exists, they'll typically tell you to use a GitHub pages style link (`.github.io/`), which is perfect for use in BetterDiscord. From there, you can customize it via variables or even override some of their styles with custom ones. ## Your Theme -So you've seen other themes that import and update automatically, and you've seen and used these mini-themes in your own theme, and now you want to follow suit and make your theme an import that updates automatically. That's pretty easy to do with [GitHub Pages](https://pages.github.com/), and there's a few different ways to configure it, we'll be guiding you through just one of the ways here. +So you've seen other themes that import and update automatically, and you've seen and used these mini-themes in your own theme, and now you want to follow suit and make your theme an import that updates automatically. That's pretty easy to do with [GitHub Pages](https://pages.github.com/), and there are a few different ways to configure it, we'll be guiding you through just one of the ways here. ### Walkthrough -To setup remote imports using GitHub Pages, we'll need to prepare your theme to be `@import` style. But before we get to that, let's make sure your GitHub repository it set up to serve GitHub Pages. Go to your repository on the GitHub website and click on the `Settings` tab on the top. +To set up remote imports using GitHub Pages, we'll need to prepare your theme to be `@import` style. But before we get to that, let's make sure your GitHub repository it set up to serve GitHub Pages. Go to your repository on the GitHub website and click on the `Settings` tab on the top. ![Tabs](./img/github_tabs.png) @@ -37,7 +37,7 @@ The last step is to make sure that the branch is set to your default branch. In ![Branch](./img/github_branch.png) -Now, just wait for GitHub to finish deploying your site. You can double check by refreshing the GitHub Pages settings and checking to see a message at the top about your deployment. +Now, just wait for GitHub to finish deploying your site. You can double-check by refreshing the GitHub Pages settings and checking to see a message at the top about your deployment. ![Live](./img/github_live.png) @@ -74,8 +74,8 @@ Note down the URL shown in this panel because it's what will be used for your th } ``` -Go ahead and commit that to your repository, and after just a few minutes, GitHub will deploy your theme to be importable over GitHub Pages. Go ahead and put your new theme file in your `themes` folder and give it a try! If it works, great, otherwise double check the status of your deployment on GitHub. +Go ahead and commit that to your repository, and after just a few minutes, GitHub will deploy your theme to be importable over GitHub Pages. Go ahead and put your new theme file in your `themes` folder and give it a try! If it works, great, otherwise double-check the status of your deployment on GitHub. ## Development -Using the remote import that we set up above is great for distributing the theme to your users and has many advantages. But for development it's not ideal because you would need to commit your changes and wait to see them. A common technique to work around this is to have your theme locally in a `MyTheme.theme.css` and whenever you want to update your users, copy your contents to the `import.css`. That way, you have all your css locally and can quickly make changes while you work, and users can still take advantage of a remote theme. \ No newline at end of file +Using the remote import that we set up above is great for distributing the theme to your users and has many advantages. But for development it's not ideal because you would need to commit your changes and wait to see them. A common technique to work around this is to have your theme locally in a `MyTheme.theme.css` and whenever you want to update your users, copy your contents to the `import.css`. That way, you have all your CSS locally and can quickly make changes while you work, and users can still take advantage of a remote theme. \ No newline at end of file diff --git a/docs/themes/tutorials/selectors.md b/docs/themes/tutorials/selectors.md index a40cd43..238805d 100644 --- a/docs/themes/tutorials/selectors.md +++ b/docs/themes/tutorials/selectors.md @@ -6,7 +6,7 @@ order: 3 ## Background -There are many selectors that are helpful when developing your theme. But keep in mind, Discord is not using the bleeding edge versions of Chrome so not all of the very latest CSS selectors are supported. `:has` support was only recently added. The latest Chrome version in use as of writing is Chrome `108`. Here's what isn't supported at a brief glance. +There are many selectors that are helpful when developing your theme. But keep in mind, Discord is not using the bleeding edge versions of Chrome so not all the very latest CSS selectors are supported. `:has` support was only recently added. The latest Chrome version in use as of writing is Chrome `108`. Here's what isn't supported at a brief glance. ![CanIUse](./img/caniuse.png) @@ -19,11 +19,11 @@ We touched on this a bit in [The Creative Process](./process.md) section, but we ### What is specificity? -Specificity determines what styles take precedence in order to style elements. It's like a race condition in traditional programming but in this case, instead of racing against another function over time, you're racing against another style over how specifically you are targeting a given element. The style with the the *most* specific selector wins. Unless there is a tie, in which case the one that __appears later in the document__ wins. This is a specific wording, not to be confused with the idea that the one added latest-in-time to the page wins. But rather, the one appears last in the DOM tree of the `document`. +Specificity determines what styles take precedence in order to style elements. It's like a race condition in traditional programming but in this case, instead of racing against another function over time, you're racing against another style over how specifically you are targeting a given element. The style with the *most* specific selector wins. Unless there is a tie, in which case the one that __appears later in the document__ wins. This is a specific wording, not to be confused with the idea that the one added latest-in-time to the page wins. But rather, the one appears last in the DOM tree of the `document`. ### Why do I need to know it? -The reason why we care about specificity so much in BetterDiscord themes is because we are theming an already existing application. In traditional web development, you own all of the CSS and you can control what selectors you are using and you can be careful about colliding selectors. In this environment, you are competing against Discord's styles for each and every element that exists in the page. And you control neither the HTML nor the CSS on the page. So (nearly) every single style you write will need a selector that is overriding another in some way. That is why we care so much about specificity. +The reason why we care about specificity so much in BetterDiscord themes is because we are theming an already existing application. In traditional web development, you own all the CSS and you can control what selectors you are using, and you can be careful about colliding selectors. In this environment, you are competing against Discord's styles for each and every element that exists in the page. And you control neither the HTML nor the CSS on the page. So (nearly) every single style you write will need a selector that is overriding another in some way. That is why we care so much about specificity. ### How can I use it? @@ -31,7 +31,7 @@ Understanding the *how* of specificity is a very complex subject that browsers h ### Examples -Rather than worrying about exact specificty calculations, let's try out a few examples to see if we can understand it a bit more conceptually. +Rather than worrying about exact specificity calculations, let's try out a few examples to see if we can understand it a bit more conceptually. #### Setup @@ -79,7 +79,7 @@ Now take a look at a slightly more complicated version. What's the new color of } ``` -In this case, the answer is `green`. If you said `blue` thinking that the selectors were equal so the last one declared wins, that's good thinking but not quite right. These selectors are actually not quite equal. For the second selector, the attribute selector, you can consider this a "generalized" selector because it's really selecting through an attribute, and it can be any attribute. We just happened to pick `id` in this case. Comparatively, `#myContent` *directly* selects the element by id, so it has a higher specificity weight than an attribute selector even though it's checking `id`. As for the `:where()` selector, this is actually a special case. Using `:where()` allows you to be more selective in what you are targeting but is defined to have a specificity weight of `0`. Hence our text turning `green`. +In this case, the answer is `green`. If you said `blue` thinking that the selectors were equal so the last one declared wins, that's good thinking but not quite right. These selectors are actually not quite equal. For the second selector, the attribute selector, you can consider this a "generalized" selector because it's really selecting through an attribute, and it can be any attribute. We just happened to pick `id` in this case. Comparatively, `#myContent` *directly* selects the element by id, so it has a higher specificity weight than an attribute selector even though it's checking `id`. As for the `:where()` selector, this is actually a special case. Using `:where()` allows you to be more selective in what you are targeting but is defined to have a specificity weight of `0`. Hence, our text turning `green`. It is worth noting that `:not()`, `:is()`, and `:has()` all also have a specificity weight of `0` **by themselves**. The selectors used inside the parentheses *do* have an effect on the specificity weight. @@ -107,7 +107,7 @@ There are some selectors, pseudo-selectors, and pseudo-classes that are used way - Attribute selectors used frequently for checking the state of inputs - They can also be used to be more tolerant of Discord's class changes - `:disabled` and `:checked` are also used for inputs - - `:nth-child()` and `:nth-of-type` are used when a tree is lacking classes but the structure is stable + - `:nth-child()` and `:nth-of-type` are used when a tree is lacking classes, but the structure is stable - `:root` is used constantly for CSS variables -But remember, you are competing with Discord's styles so these selectors can get pretty crazy. Some styles are even inlined requiring the use of `!important`. Your best bet is to try out some of these selectors on the Discord client itself and experiment with what works and what doesn't. Another good idea is to look at existing themes and see how other developers tackle certain styles. \ No newline at end of file +But remember, you are competing with Discord's styles, so these selectors can get pretty crazy. Some styles are even inlined requiring the use of `!important`. Your best bet is to try out some of these selectors on the Discord client itself and experiment with what works and what doesn't. Another good idea is to look at existing themes and see how other developers tackle certain styles. \ No newline at end of file diff --git a/docs/themes/tutorials/transparency.md b/docs/themes/tutorials/transparency.md index 0aee99e..f31b31b 100644 --- a/docs/themes/tutorials/transparency.md +++ b/docs/themes/tutorials/transparency.md @@ -6,11 +6,11 @@ order: 5 ## General -Making the Discord client transparent enough to have a background can actually take a fair bit of work to do properly. There are many many elements with background colors that would obscure an applied background image. If you'd like to see some examples, there are plenty on the [BetterDiscord website](https://betterdiscord.app/themes). +Making the Discord client transparent enough to have a background can actually take a fair bit of work to do properly. There are many elements with background colors that would obscure an applied background image. If you'd like to see some examples, there are plenty on the [BetterDiscord website](https://betterdiscord.app/themes). ## Desktop -If you want your theme to be transparent or transluscent to the desktop of your computer, it's very easy to support that. First, enable that option in BetterDiscord settings and restart. Then go to your theme and add +If you want your theme to be transparent or translucent to the desktop of your computer, it's very easy to support that. First, enable that option in BetterDiscord settings and restart. Then go to your theme and add ```css :root { diff --git a/docs/themes/tutorials/user.md b/docs/themes/tutorials/user.md index cd28c87..9f9c9a5 100644 --- a/docs/themes/tutorials/user.md +++ b/docs/themes/tutorials/user.md @@ -10,13 +10,13 @@ Letting users configure your theme to their personal preference is one of the mo ### Why do I need them? -If you weren't already aware, CSS variables (sometimes known as custom properties), are a way to reuse the same values over and over while making them easily changeable later. MDN, of course, has [a great article](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) on this. The best way to use these is to find values that you reuse over and over in your theme and turn them into a custom property you can change later. One of the most common use-cases in a theme is for the theme's main accent color. They're also frequently used for background colors and sizing of different elements. Every theme is a bit different in that regard, but they all follow the same general rule of thumb: If it's something you're doing repeatedly and consistently, making it a variable makes it easy to change later for both the end-users as well as for you. +If you weren't already aware, CSS variables (sometimes known as custom properties), are a way to reuse the same values over and over while making them easily changeable later. MDN, of course, has [a great article](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) on this. The best way to use these is to find values that you reuse over and over in your theme and turn them into a custom property you can change later. One of the most common use-cases in a theme is for the theme's main accent color. They're also frequently used for background colors and sizing of different elements. Every theme is a bit different in that regard, but they all follow the same general rule of thumb: If it's something you're doing repeatedly and consistently, making it a variable makes it easy to change later for both the end-users and for you. For example, BetterDiscord already offers a variable that you can use in your themes. It's called `--os-accent-color`. This variable represents the accent color of the user's operating system. This is useful for making your theme feel more native to the user's system. ### How can I use them? -Using CSS variables in BetterDiscord is exactly like in regular CSS. Simply declare it somewhere high in the document tree and reuse it in your theme. At a glace it might look something like this: +Using CSS variables in BetterDiscord is exactly like in regular CSS. Simply declare it somewhere high in the document tree and reuse it in your theme. At a glance it might look something like this: ```css [YourTheme.theme.css] :root { @@ -28,7 +28,7 @@ h1 { } ``` -In this case shown above, we've made a new variable `--my-variable` with the value of `red` on the `:root` selector. You'll find that 99% of themes use `:root` to set their variables since it's the highest in the DOM tree. In the next selector, we use the variable in the `color` property for `h1`. So all top level headings will not just be `red` but they will be `--my-variable`! +In this case shown above, we've made a new variable `--my-variable` with the value of `red` on the `:root` selector. You'll find that 99% of themes use `:root` to set their variables since it's the highest in the DOM tree. In the next selector, we use the variable in the `color` property for `h1`. So all top level headings will not just be `red`, but they will be `--my-variable`! This can also be done to set a single part of a property such as just the color of a border or box-shadow. @@ -107,7 +107,7 @@ h1 { } ``` -Since `red` is not a valid border size, the whole `border` property value is considered invalid. This can lead to misstyled or broken looking elements. An easy way around this is to double define your style. +Since `red` is not a valid border size, the whole `border` property value is considered invalid. This can lead to incorrectly styled, or broken looking elements. An easy way around this is to double define your style. ```css :root { @@ -136,7 +136,7 @@ This is a good option for more complex themes that have many variables with many |`--accent-color`|Accent color used throughout the theme|`blue`|Any color type| |`--flex`|How flex items should be aligned|`flex-start`|`flex-start`, `center`, `flex-end`| -Of course you can always add or remove information as you feel fits your theme and customization level. +Of course, you can always add or remove information as you feel fits your theme and customization level. ### Theme File diff --git a/docs/users/getting-started/configuration.md b/docs/users/getting-started/configuration.md index 20ae7ce..910cecd 100644 --- a/docs/users/getting-started/configuration.md +++ b/docs/users/getting-started/configuration.md @@ -60,11 +60,11 @@ Settings that affect all editors used inside BetterDiscord. ### Line Numbers -This option simply determines whether or not line numbers should be shown. +This option simply determines whether line numbers should be shown. -### Minimap +### Mini-map -This option determines if the minimap that represents the code on the right-hand side should be hidden or shown. +This option determines if the mini-map that represents the code on the right-hand side should be hidden or shown. ### Reference Tooltips @@ -90,7 +90,7 @@ Settings related to the main window of Discord. ### Enable Transparency -This option enables Electron's transparency mode. By itself, this option doesn't do much, but if you have a theme that changes the opacity of the root element, you can actually see through the Discord client to your desktop. On Windows, having this enabled breaks aero snapping and other common window features. This is a limitation of Electron itself and not something BetterDiscord can fix. +This option enables Electron's transparency mode. By itself, this option doesn't do much, but if you have a theme that changes the opacity of the root element, you can actually see through the Discord client to your desktop. On Windows, having this enabled breaks Aero snapping and other common window features. This is a limitation of Electron itself and not something BetterDiscord can fix. ### Remove Minimum Size diff --git a/docs/users/getting-started/faq.md b/docs/users/getting-started/faq.md index 18ff21f..65ead63 100644 --- a/docs/users/getting-started/faq.md +++ b/docs/users/getting-started/faq.md @@ -7,7 +7,7 @@ description: Questions asked frequently. ### Is BetterDiscord against Discord's Terms of Service (ToS)? -Yes, but unless you do something egregious, such as use it to selfbot or use unapproved plugins, you'll be fine. +Yes, but unless you do something egregious, such as use it to self-bot or use unapproved plugins, you'll be fine. ### Is BetterDiscord against Discord's Application/API Terms? @@ -23,7 +23,7 @@ No, the mobile versions of Discord work completely differently and are not compa ### Can I have multiple installations of BetterDiscord? -Yes you can. There can be one BetterDiscord installation per Discord installation. It is common to see people install BetterDiscord to both Canary and Stable. Settings are not sync'd between. +Yes you can. There can be one BetterDiscord installation per Discord installation. It is common to see people install BetterDiscord to both Canary and Stable. Settings are not synced between. ### How do I uninstall BetterDiscord? diff --git a/docs/users/getting-started/troubleshooting.md b/docs/users/getting-started/troubleshooting.md index 65c1468..d3600b9 100644 --- a/docs/users/getting-started/troubleshooting.md +++ b/docs/users/getting-started/troubleshooting.md @@ -30,7 +30,7 @@ Fixing issues like this involves the following: ::: details "Well, this is awkward" or "You died, looks like you got slaughtered by an Error Level 9000" -This type of error is usually caused by plugins or BetterDiscord being out of date. Ensure your copy of BetterDiscord and your plugins and keys are up to date. +This type of error is usually caused by plugins or BetterDiscord being out of date. Ensure your copy of BetterDiscord and your plugins and keys are up-to-date. ::: @@ -56,7 +56,7 @@ If you are on Linux try running with the `--no-sandbox` If the installer does not seem to open, follow these steps: 1. Download and install [7-Zip](https://www.7-zip.org/) 1. Right-click and extract the BetterDiscord installer into a folder. -1. Run the exe found in the folder. +1. Run the .exe found in the folder. OR @@ -69,7 +69,7 @@ Follow the [manual installation](../getting-started/installation.md#manual-insta Try one of the following: - Right-click the installer and select run as Administrator. - Open the command prompt by pressing `win`+`r` type `cmd` and press enter. Then type `ipconfig /flushdns` and press enter in the window that appears. - - Disable your anti-virus temporarily. + - Disable your antivirus temporarily. OR @@ -96,13 +96,13 @@ Your installer is out of date, please go to the [BetterDiscord website](https:// ::: details ❌ EACCES: permission denied, mkdir", or any error where at "shims" there is a "mkdir" error -The Discord installation has been corrupted. Try to reinstall Discord. If Discord fails to reinstall or you still run into this error then your best bet is [cleanly uninstalling Discord](https://discordtips.com/how-to-fully-uninstall-discord/) then installing it again. +The Discord installation has been corrupted. Try to reinstall Discord. If Discord fails to reinstall, or you still run into this error then your best bet is [cleanly uninstalling Discord](https://discordtips.com/how-to-fully-uninstall-discord/) then installing it again. ::: ::: details ❌ Cannot read property "hasOwnProperty" of undefined" error -Fully close Discord. Fully deactivate any VPNs or firewalls. Make sure your installer is up to date. Then try again. If that still doesn't work, see the previous entry about cleanly removing and resinstalling Discord. +Fully close Discord. Fully deactivate any VPNs or firewalls. Make sure your installer is up-to-date. Then try again. If that still doesn't work, see the previous entry about cleanly removing and reinstalling Discord. ::: diff --git a/docs/users/guides/installing-addons.md b/docs/users/guides/installing-addons.md index 43e8c74..94d63bf 100644 --- a/docs/users/guides/installing-addons.md +++ b/docs/users/guides/installing-addons.md @@ -17,7 +17,7 @@ The second half of this video shows exactly how to install addons. 1. Download that plugin or theme to your computer. 1. In Discord, go to your BetterDiscord settings and select either the `Plugins` or `Themes` tab depending on what you chose in the first step. 1. At the top click the `Open XXXXXX Folder` button. -1. Drag and drop, or move, the plugin or theme you downloaded into this folder. +1. Drag and drop, or move, the plugin, or theme you downloaded into this folder. 1. Go back to your `Plugins` or `Themes` pages and enable your plugin or theme. ![Addon Card](./img/addon_card.png) diff --git a/docs/users/guides/vanilla.md b/docs/users/guides/vanilla.md index d3831e7..a1774e8 100644 --- a/docs/users/guides/vanilla.md +++ b/docs/users/guides/vanilla.md @@ -12,7 +12,7 @@ This feature requires some basic computer literacy. ::: -BetterDiscord allows you to return to vanilla Discord functionality without having to remove BetterDiscord. This is useful for those that like to switch back and forth. This is done using the `--vanilla` command line flag. There are two ways this can be used. You can either do this as a one-off or setup a shortcut for yourself to easily boot between normal Discord and BetterDiscord. +BetterDiscord allows you to return to vanilla Discord functionality without having to remove BetterDiscord. This is useful for those that like to switch back and forth. This is done using the `--vanilla` command line flag. There are two ways this can be used. You can either do this as a one-off or set up a shortcut for yourself to easily boot between normal Discord and BetterDiscord. ## One-off From b17b0cca3dae03573e717d01443a00099990c86e Mon Sep 17 00:00:00 2001 From: Huderon Date: Thu, 4 Dec 2025 23:27:44 +1100 Subject: [PATCH 2/7] fix markdown highlighting --- docs/plugins/concepts/patching.md | 13 ++++--------- docs/plugins/concepts/react.md | 4 ++-- docs/plugins/tutorials/addons.md | 4 ++-- docs/plugins/tutorials/discord.md | 4 +--- docs/plugins/tutorials/settings.md | 4 +--- 5 files changed, 10 insertions(+), 19 deletions(-) diff --git a/docs/plugins/concepts/patching.md b/docs/plugins/concepts/patching.md index c100970..bf6f53c 100644 --- a/docs/plugins/concepts/patching.md +++ b/docs/plugins/concepts/patching.md @@ -26,7 +26,7 @@ function yourTarget() {} Then you can't really affect it. However, if your target is part of an object in some way, like being contained in an imported module, you can overwrite that reference with your own function causing everyone to call your function instead. -```js:line-numbers +```js:line-numbers{13-17} const someObject = { yourTarget: function() { console.log("red"); @@ -39,13 +39,11 @@ function targetUser() { targetUser(); // Logs "red" -// highlight-start function myNewFunction() { console.log("green"); } someObject.yourTarget = myNewFunction; -// highlight-end targetUser(); // Now logs "green" ``` @@ -56,7 +54,7 @@ If you take a look at the highlighted section, we are creating a new function `m Luckily, BetterDiscord already has a system in place to manage multiple patches per function and allows you to target different patch types. This means if you want to do a `before` or `after` patch, you no longer have to manually replace the function and retain references and call the original. All of this is done for you with `BdApi.Patcher`. Let's take a look at how our example above could be done with this module. -```js:line-numbers +```js:line-numbers{13} const someObject = { yourTarget: function() { console.log("red"); @@ -69,9 +67,7 @@ function targetUser() { targetUser(); // Logs "red" -// highlight-start BdApi.Patcher.instead("MyPlugin", someObject, "yourTarget", () => console.log("green")); -// highlight-end targetUser(); // Now logs "green" ``` @@ -119,14 +115,13 @@ someModule.otherMethod("something"); In this example we didn't modify the arguments, we just wanted to log them out to see what kind of values we might get. This is a good technique to help modify arguments selectively. Suppose we don't mind that `something` is logged, but we don't like when `token` is logged. How might that look? -```js:line-numbers +```js:line-numbers{4-6} BdApi.Patcher.before("MyPlugin", someModule, "otherMethod", (thisObject, args) => { const firstArgument = args[0]; - // highlight-start + if (firstArgument === "token") { args[0] = "redacted"; } - // highlight-end }); someModule.otherMethod("something"); // > My value something diff --git a/docs/plugins/concepts/react.md b/docs/plugins/concepts/react.md index fbf83b7..5031747 100644 --- a/docs/plugins/concepts/react.md +++ b/docs/plugins/concepts/react.md @@ -185,14 +185,14 @@ Before we move on, notice that we added an `Array.isArray()` check to the filter Now we can actually rewrite our patch from earlier. -```js +```js{8} const myFilter = prop => Array.isArray(prop) && prop.some(element => element.key === "friends"); const PrivateChannels = BdApi.Webpack.getByStrings("getPrivateChannelIds", {defaultExport: false}); BdApi.Patcher.after("debug", PrivateChannels, "Z", (_, __, returnValue) => { const myElement = BdApi.React.createElement("button", null, "Hello World!"); const buttons = BdApi.Utils.findInTree(returnValue, myFilter, {walkable: ["props", "children"]}); - // highlight-next-line + buttons?.push(myElement); }); ``` diff --git a/docs/plugins/tutorials/addons.md b/docs/plugins/tutorials/addons.md index 6ece310..5a4a4ca 100644 --- a/docs/plugins/tutorials/addons.md +++ b/docs/plugins/tutorials/addons.md @@ -74,13 +74,13 @@ Keep in mind there are many functions in plugins that do not require them From there, you can even directly call functions from your plugin. One common use-case for this is when you want to add an optional feature to your plugin that makes use of another plugin. -```js:line-numbers +```js:line-numbers{7} class MyPlugin { start() { let myGreeting = "Hello User!"; if (BdApi.Plugins.isEnabled("Zalgo")) { const zalgoPlugin = BdApi.Plugins.get("Zalgo").instance; - // highlight-next-line + if (zalgoPlugin?.format) { myGreeting = zalgoPlugin.format(myGreeting); } diff --git a/docs/plugins/tutorials/discord.md b/docs/plugins/tutorials/discord.md index af81d34..7fb2f79 100644 --- a/docs/plugins/tutorials/discord.md +++ b/docs/plugins/tutorials/discord.md @@ -14,14 +14,12 @@ This is a pretty common technique for modifying Discord's main functions. It's m Say we want to change what happens when we click the home button to do something else. -```js +```js{3-5} const homeButton = document.querySelector(".listItemWrapper-3d87LP"); const myNewAction = event => { - // highlight-start event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); - // highlight-end console.log("Clicked the home button!"); }; diff --git a/docs/plugins/tutorials/settings.md b/docs/plugins/tutorials/settings.md index 9d42d23..3164e9f 100644 --- a/docs/plugins/tutorials/settings.md +++ b/docs/plugins/tutorials/settings.md @@ -603,7 +603,7 @@ As we can see here, this will now allow the saved value of the settings to be sh If we put all the pieces together and combine it with the button we made in the [DOM](./dom) section, we might end up with a plugin like this: -```js:line-numbers [TutorialPlugin.plugin.js] +```js:line-numbers{31-44} [TutorialPlugin.plugin.js] /** * @name TutorialPlugin * @author YourName @@ -634,7 +634,6 @@ If we put all the pieces together and combine it with the button we made in the const myButton = document.createElement("button"); myButton.addEventListener("click", () => {window.alert("Hello World!");}); - // highlight-start function updateButtonText() { myButton.textContent = mySettings.buttonText; } @@ -649,7 +648,6 @@ If we put all the pieces together and combine it with the button we made in the myButton.style.backgroundColor = "white"; } } - // highlight-end return { start: () => { From aa3108c319fcbdf61f740dff7620c1ba0223bc26 Mon Sep 17 00:00:00 2001 From: Huderon Date: Fri, 5 Dec 2025 00:07:44 +1100 Subject: [PATCH 3/7] update ui images --- .../introduction/img/developer_settings.png | Bin 40603 -> 63616 bytes docs/plugins/ui/img/alert_basic.png | Bin 7509 -> 9284 bytes docs/plugins/ui/img/alert_input.png | Bin 4993 -> 6580 bytes docs/plugins/ui/img/alert_react.png | Bin 7294 -> 9334 bytes docs/plugins/ui/img/confirmation_advanced.png | Bin 5085 -> 7476 bytes docs/plugins/ui/img/confirmation_basic.png | Bin 7244 -> 10046 bytes docs/plugins/ui/img/toast.png | Bin 3760 -> 4653 bytes docs/plugins/ui/img/toast_basic.png | Bin 2396 -> 3105 bytes docs/plugins/ui/img/toast_error.png | Bin 3174 -> 4836 bytes docs/plugins/ui/img/toast_info.png | Bin 3280 -> 4799 bytes docs/plugins/ui/img/toast_success.png | Bin 3403 -> 4787 bytes docs/plugins/ui/img/toast_warning.png | Bin 2911 -> 4609 bytes .../introduction/img/developer_settings.png | Bin 40603 -> 63616 bytes .../getting-started/img/bd_settings_tabs.png | Bin 6892 -> 11936 bytes docs/users/guides/img/addon_card.png | Bin 13286 -> 13834 bytes 15 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/plugins/introduction/img/developer_settings.png b/docs/plugins/introduction/img/developer_settings.png index 94b0d86b5ae921ddf1945f78667e52ad439991ee..6bfaa6c388f89638d4c4226c6307cc38625d8f95 100644 GIT binary patch literal 63616 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 literal 40603 zcmd43XH-*N7cPn-q9E|TA|lf4NEeh2K}11%Z=s18Y0?QjfS{sMrG!qT*ARLMO+;$w zEwoUiCv*rUkmLsa?z!WPasQn2jd8~Lk+G6JviF{AuC?cy^Ld`Nzi4YJGtk|nqoSf> zPp2b^5cSyf`$SWRaq4MsTB?7_hpxt zChk;JjIC#%a~;n4Z>Xr!AE`W7(D%03AVzpyTS@2f-kdF!sfYL?z24U6<=Oc8+Slj$ zrPw*pPk;BcgFGquKz$=V!rU$@`6|*Snr@_lPBrGm?Juld&th~ggMpWBXKR-6MqkK; zi=b)ZgmZ+1J|cMidG(i`4VPT)uz4i}G3b?QCKA&>cY5F1{nDwN^qz7E1l1S9$8_F}S3DrEx zv*xiEAN-ma&i({VXDkc+Iur_(v(V8$Hmjz~O^GB7&X-|+CRj)+pVeiyGdcFZ> z(MJxYJun=eH}|w*H)z(2;o^24XwMPTnSSEzMawB*2`iI}%rs`<+~ms4HiwpE`Q^W> z5)<;4OUXx$KIv$XYJGuP1Zcg*<)`Icx7#uvptd7uDNCsk)(ji{Wt z{3&JXp&b+Yew5oS!Gf$0zO%|=z-Y4_An%6E-PVq^468enLUcA&`8aVirAA@$`9Z~SbM?Fx@UM$r07wq&z~n}-tS~% zEaIrC<&c0W$g7B`RMKG1YgKW8j8&T~_<2gB&ieJR;WW7D`i-!eai!3HllN_xmDdI) z{GO(ub=0To;cLuQIh)%tN?3FPCo+6)?xw?yvfyj|2~Jk#bpXz{v{A-_QJO*S!9bm9 z3(MU^U@pr;12{`km6WsLmK7*}a!-8#AI9I9LV|0DFcIOkA zZ^=^@2oLEPsr=M;o7@005#ovt86)!VzCSj~HiTxT`2 z=0TO>>7MUceN2rQND$W@?~2_jRy%ZN zp*WERPnN#82+;jJdLS6PV(MzJfKLJRHWg2z#)Z z1Q%ualeSkbNJfRp_B9Envpwu6fP{+mJ#ogqOF4uhotAtjeY2xtG%ct2?|Mi&(KM9e zYoWJl-JWWA(ME6n+dhXaK@?Ba_iCbw@wcXVu|}59e@RB|$sJWuUVD z7}K?@5AmgS-{%O@jvJLB-gL&ag4<#mK*f(XK7GPe`9W`JyZ4U1KAvBJ*G4jDbpN*2#?>z zqc48?ToQaIx9J9bR9l`Y$Z1GiZ8dVcR27Kj1Cy?es?Cle#j!W54{DM%mtzC!F^(SE z*t#j8XM59yvqw?m{F$%rG|v^Xv-f(>J>--op2G9iW2@oHDZ$Dk@tH zh;MPOt=pq49;N7;o8{a;V}z-eI`ZY0;433Z*4HFXea}-o_B3PhhFMn5Y6PB-n9y`p zepFxGVP>C5Z>>{S9;Z4gQIJ?O74mj8rDcKgXDT{7lZ!@YUyK9(+tuxV?R;n*I&3x@ zpE8rhM8bn)D*_5;?7-f zVWAv-#YTt#gW6q=?{p$HKtO>DXPpQFDLG+IS{F%*5l?*AL?L^7@>!OrzuCHQ3C*c_ z^5n4Q>>?OMvl%^|EYkn_C7U|P^vZuu{53Mx=MX;OfS zZT$Q~0=ZG{moLP}0mwi;?Lcqb9>XD4xcttp3SkUu3|EkU5}lK|)-c9Kq(h+jCR?@Kv%dPf^wJnG>PVQ$;FG?diZ$ou5f7_$964 zAimUX!V;Vu%_T1GYQQjTnU?1}yuhm1{g%(YiS8e>B+R)3t8U-sgT+ewkC30YcXxk@ zA@?w{gQr(=)?XC`7d51-U20H4HwUQircRw=0QI8>SLGHDnS>`$tO@$(Rt-}c!-YX? zT5A@Cp~>=%Dp7CF^-KQn{RzJ-Pz#+{N?Iv5%R<34hVSAJ0Qe~kH=oamWXw<&J7i=U z{ACl;zmT);S-Xi8oH|V0^!GIAB}dmB&i@)Z4Pc}6C+G`F_;nigIIdN7S&a!HN3ND9 z*6>z#t9_Cg7Wfp`tH12e@}RcbL}8RJdDP?BG++-SRzm~MVtKyOWUIYppzRM((-YLJ z<(@~D@3BGcr!C7TdMLdab=}X`qYCyTIsO;8kmQP#k$jhIj=X^B@Qrm7? z*w!LD)umSsgb`|z-{u3zn<&eo?%l+aDZzS!SW%JY?6$)Ljhg@qCt*r{Lp9enp!nL@ zh4^Jm?&;A<0~P_gVTQ^lJ6z7K@Gt?>ls;QI4fkMn33&hGpkOq(?r07>-NfT7Dx=6` zlU>vztHnKXh4ZQz1O=9a=aa)4oa>3u3aVz!W%bRZ9)1zyH_#3+llGp zY>-Vgh%Dv4KZd$v{Yq61$L6Reo=a*k(B=#MeWvl;Lcb>IT!0;X-A%cZT}H>%|B8w%_g4Y;IYu{Vp^ zKaIpGTfV#$Pn(xq5YuYEMB-A#q~|DG0wKBvE=!=CNC|C6b80cBiFx#)3$)T(eDA2_ z3!B&sv)M*K)o#=+*;C)-TwTciU{o;I=kgHTw0RBQDF6E0TO^=kAsv$!_rdb`V^F)z-P5)EDY)bl6&Sp0Jui$G+OPOw%2`1(SQ@SJ)DN3?Z#rZvnT@&%a+=H$*W9nyG4Dli>Bn_yJJ@0&*rI)$kh_mGEqv)a8g zv%SWB&sYkp44yx(Z8B8q?XtsJmd8vT><*h^E&FedAla{J8XSt9Se{#mFMu735^=yk z*O_%L=0{zMV%4?YM_EonI2A4QV1eI6wqCz9Q3sjjfBw6`U-})Wt+p;d@-izyXjnp? z{Fu-tytoqk^5ewW!l-Xf7l5b}vrcb&I6`eA{hw8_b7Ys0c@3E}`hM=L;4f8IA?uQ< zP1RJ!3_1bufd4GesUKA8z{2Ezf=I&e1fhQxaEtCA*rzUMnRU?1|F-QEt}QXsGL70F zoNIGcEo*tqS-F*Vb+0nI0-MfDDGa%ct~qBz8@F`7Sxx_JTbrA3y~)m=*_xuUV3}IJ ztfR^m!QSy=XcK@O^7|nx)Y%C;Y@$j;p6V9bg#5_+mmnBl~p58gycUS%Q|La$A(8n9UUCAy^F^mVd!;d z7NIXZst22P@lEcp=dmss_P)vmZQg+16@T`C(>P8}h6Y2bQ|(1Av*X{BF&ufMta@7_ zyW3U%jPXcuEO*KxldgcfZx*F~y+m*k{t;sq2OVFo4i5usIJ>w+Y^(^=!PYaxKDp9A z07*{0yr1i;*3%4kyF+TBMT5a3kNuMi)vhd@UU%=Y;qarsY*N=LQhO6XPg8Sk<f`uq>aaIFi=6TmHzl@k`F+zXGH}n^OP3tn0X@%otnAW)C=@7^ zl}XMgo=WEQi489ACp3N>vzotf5#7*NLmBglMGmtC_(GhlMf${UO~#jt9Y-NhlnO)3 zsCSvg{uen*-A@Vn&X-EUDifC|_FO8Vze+eZDU=p7>7K)4KBe~Sd?EXekbQZ-uy+TO<|3j9hC-mcl1KWFb;k~y^BkUZK)P%3Dyi0n2rZCwCEJZg1Q zoR-83<+~O}{k$f+-191huCnM0gDMjynkppSrTlM?qkY1wn_8!0=VCX0J-m<9(j#8S z9i&K?ZGr2pt{jN#P7B3O_I;wmITtXI{6=NKBLPlvx~!j8e`y{K%X2=~l1V^mPsv{{g?6d~&3QxpYU zQrX>Qa(2h&B#v!Wb;sY_%z~x?Yr+Nyl{m%ah50Xr7G7m?mM<|!!sRc@_@t*%Cm*6V zxMo;$+Bd2EuYe_VrjJb{c_2;FLRsODx%LE#Wf^Un{UYT~?$`knu6p#?#7N72n-0`lxYjFCM_{z1$@WdwU|gM7wR6aqB>NYgd!LQ0ATaov5fjOv#rYjfOvg}Q&(uj*h(7i zDWoI~$si>@0x+=&*ha!9x9M&EEt`g`+XE$#5jemR_>8^vXCojzwJOWnmVjo zv=X%!0|60BG{z6y=u12;D|>TY)whh|cOv95g}Rgyt1y$9RcY<{(u1#!2896itCJ;W z9GR^wBETwNW=C?O*2BJ<)$r?V@Q+sD@Yi7K#p!2!-(veChvQU7Tt6=|quIA~kNX^f ztKfH;guT=GmG8#)cm^6Faplen#RZ(&vvX;7OAzdWBX-M}8g}7$k(Y;%c>`uv+e170 zC4!uOBZIVecf>+ZA;!EgOPMPspX3J4lCJ% zH|89CvN$(t)oqcjillxf|5L70Z9uCCU(u>dh=VcbOX41ZR(_@pW+HR~wSFQg{tV9- zjRU{dvD{t{tBw=wg8eJ?>FaB7+??=O=xj~oibvfCo4|J!ee!${Rg8Fw0NtSU7ybba zEvmv^B^`*GCH-pma8xFYNz_!QcV&2>U$3ttD=xI(<^*SJ$rc_Iyqyt*Ce|wk>Df8!%h~N>k~^Yunbv@G^)=dY z@cN8bD`zEy8hvgH)yombqt zLpWpQUjL4s>Zn}9*705$DdOtPEK8;E{6%zWzs*}8_&gO#!Kp>;?o(g*Jk#rgIliq% z9^2bIYriaT**V3FOt(Tq?T=-w8=H=aJe6r2H~PhCYPv6*Jg}6V24pQ^@0knFj({-M zd3N>ECh=}JelsT_Kcjq)v%gnKIxokPUWHT&puT)UT|?I>2nF}KS>)|TExoahk{AIg zajs6~kRAJR0q+N}itTIQ+gr!MOV#Oi{=?k>b~O$c;e646qePzljz|~n(!-*HhM|ai z#2KNyHSfXJQ0)%2freeLfhJWZ>rcDD>;R?J(qU0vaTm#<1a5s87B$H`i4A<%Rw~r! zv`@Tm`6^WyK*w$Q;xA{`gtfyt7}8xhF5`yuADjBs1PL7qxUW z8YL6pOz`(P@JaRp{CnWjP4un=NbuE`hbSNKrQOW*1xLopyfZ_aPOpU>*jpYkfbap! ztt*gMQFfB+s_zF;k$LQ`|;R!w))%Vqe8~%i?Uxv4H+F_#gAPq?bMeH)K8SyuN%Vr1&U|=k|`;L@$WFtlK{KH#d#B~64|tR zgN{3FW*63dyVe)AUhtSqsEAiiC~LIB#keYTG{`irJ%%q=p_zfSpBA1!3kS=7Kr1SR zIq=QR-<~CHb2t!6&z?g(Jl^!virXmxJFtH&x~Zjz35BG)$#a3~W{|>#p25lC3k$E+ zEidAF#A-kFJ5MUNOr2rX967CpfJX3b3;_A*xI(6-;~g?g=`BR+Srh|ls#!~Yc;&j; z<0yx%N3%N%Q%)w%La_dD>r1cLx^2_a#0Fjiq_cio22Y5-#=DIRZLzGj;?h6fnr~!3@r2iGk^9!23 zK8)mk;}o00xW6$(?$hNidSmXUpbgnCyi#+|F`c=<3dV+g>C7S$FX0XI12s~u?!BEb zvU@+wc94?MCcJ%A4xcOy1NLd@W>!COz^tCAedKS%^K1Y3h+3vNRRji?MTT!Mm>P|X zAS!@0z~6*N7A1}81JaK;cSh`>ta60>kokrp9>t3>fzoV6Zz4w}X?} zREG)o1GG@G7OeoSI_{`)GiMCq^PXGG(8>ssVGA>RQ_-YxiWv~7bo}DS0b*i8xnNJ@ z0CREA#_OYpybR!(bz%MUZDa)}I|-7B>^RQt7p#3N#k1DI_zI0naHn$V^I`zgz!7g=i6T3k8E<3e}z#E zdeL*Ejgil*UB&Wto#0j~hd=kaSeXWpyXJM_W>Tf|UAt@$sAtN^c{J2OKivubtx1zQ zPO@mWugr6`Kni}l-Y%>?u@bhos!y<(pa@>jyvw*>qD3)Qu-Me-83?WQ5K~)B2I@`l4ZucIgE0IpTUqhwmBrjzWxK_=l z*tpuE4gIm)oCxBN5?UCiKO43!P2q-S$)8~V&mk3h2rKX$f~+gl{~|A{=(JtHIiV2| zHsh52E76b%ce4N%6#*sIQ`m&GN@)Me`@=(R{E4TO+)3+Z&3YWDY9y_q>0@AkEN%ez z1igShlwy?Q_I{JDr6{i@#U0f&hfQ7CxNf`l_0Ed-;SEZO#=il+`4dWh%q^W3&gSNe=J z00UW_m$E2Njon{R-Xui0N`fO{LwwTTdN%fwbS#2E_g3ck3?bg(S6O+EGk?8bpUwxf zFXtmb&x8Q}@4rE#MM$@5&`)%p)l0_jgz94+#5CofS^!?Topd9YM7mm|?6d~jy-)9% ze_QJ~${eZ-#Y$bu)ndHwceMDrcgmud=e|_Zjz@@%ru%U*xVCw3C5B426Sb~&MLX~- z+NWJ6&FnKGySZy>F>X~GvES>}nY z>v120j-NT_XwB{cN;)Rbw%&74eb3xmgEh>6yV?%?i;U*#dlWB$oypy_xZQWzn*CwT^dRRCoAFs>z+Y&S0F=t?v{AP(G<~u`4*~)()g$f)#k7 zu@iV(s0|kK{4faX8NEIYvh5m<%II0>(wl9vw)pfB+R+-g4l*&Cqs$OQu|N$pg+uqm zc6(I>E44M^@RHNzNPXK6SK$m3F2v9i-U7snO{c>9=}(T-N)5zK-ogkpG(O(>aw5M_ z+<6}wG3nObHS(&5-8(k%_X`lt|5Ad0bOShfYNvi+F4+gbK$czdl~wggof(ybx* zq&IVLs&A82yKNN55TjZ1M`jBrJ)ynaH_Xz6Slt@7_pt?mT4eV|#-;bd=|XL2UUI;) zL-&CuN!EQ;qf_{$i=?9t1O4rei>PrPH-B;W37%Sk-HEvcq6?ESs!n|Ev_oxNsw?nx zyE<=C+Ak6vkIia@-<5&@9;4_>{TErxICrycdwep-9$64R#~%R|WDPskc{1Hkg1QK) zYmZrmlO-CpG(Kr0JU=4xxr~x1g7P)D|g@quix&+{KWpK zb@H)oBR`ty=Ce#73vyy~+=J%+n{$UW7 zt8I5Ue*JAz4XGZtp4m##C&(?*PSGP0#~PYZNbux@60JkE55e}l0DqB$j!y*Gl>FS9 z(=kxK_648B(J2+x^ANC*_W8me z_>1cQ(l!XRX?fc3JcJlMz1}#}6k-UQRc=eb=6k>U=FL_vV3I3fI%Wm*x_!I$j1Cmg zyZXRL%u$TC|Nbo;u$wCEFOqkK2wZZ$o(mGQY|u2RDNqml`1g2EC*03E-|YMN8)nFE zg$iMzE_8p z&#CevO~}e6HL4{bx$CEnU@uF3YwL)4j^ulOP#A0^`XdYa3Qvi^%#qd)^;OKp76*qHq}EJv(lF~YgMC;(hSCmJctJZa!K^# zniQ7>8O0G;%htcw-l%V0UwIQpWVsGp8g<{Q*!Sj5Dd;)oQ+IK!__^4sw%e2}6o_(` zd}t`OAOU1D?}ZHh*g9G5dmNeUb#i54ea$hcWz<4E)U4)(hlED2eJk?*4Q33xTd+W= zISUkHmA+J1E}tWV+1#hxl}bl1-;&w(*zT))%psnZyyI{pjEfhfFl_mi(6nP&6sB`wQLs6^XC}{-`QvFkMJhlQ#A;m-jAP{hf{q4dvak@L z3E6UMQt{s-tQelaPNhSzIzn)ayGy25F3peU5k9hSW|s-tMZR`wL3#A z?p0dUd&ahRkQ?a`fk#G%a>H-v;k&-aOg3xH3xo;E+zu@{5+h?Y`nPHWvYpWKIerCi z3l~d)bAP< zx8P8jBTn8nr@;CC_^#Xf=B4zd^ahnfC(Fzd;wZ#v7pNGBYd-D3lBwm%&mxLWLuOa9uaSJk0vJ(;$>e}fPB}oSr-Zy&jaExF z$q@@#_=-&tp!|GhGhW}ui4CJctVtViXiWE)`@NQctX{e)=l?b;4t*+MzU7JDFmaj^ z^Ihb}p7w~@E6JZNFQ22Ik*F__SIED)CksBy2C8}YF5!pB=YnY_j5X?UH}kR7t+j2s zsFIxS=%8Z@4eHUcqksjmPTKkc&w}nV8fN?aH7v}Zfv%*k!QxBc?wK5d%EGa5w2G=( zXpX7GG{BFCXgkG~oKE7!G(i$JPrn>njv?_z@_8{|qNYKvCUm2de1Fv%&~KJSry5$9 z%r6DHaNgv~si0P2u^@wXq=9&0YmZEP99^mAXSuUr?v^c(D=KvDPn7#1S}{&rb=orO z(=|(8lPB^J4yH^9@s<#C8e^SGId{lM-&<;-|5<1XplBLT_DggnWc)1I=D>1no4i0i zqUr4;DHBY|8wljyo-{pX=s$Fkac*|t+B2^4?)$X_#o`_w9N!z5q5Oa7D9xYQ)5wIt zOHYaPrY6AG_)@;+1#AQ9xcOljx%*0q8k;faUrOpn#t6}rsbq-dhYxX!Tz^`jHRgZ~ zBvPLU^VecgK)%2Kl7B@$G9vL1>dB*seCQ~7nVY1?@(MqfjH3UeF`K!f;7v2%?L={Lb}pE31zx z+2?u`WtzQB!0i2wgayB|_V#I<0;*1FMGlSsx(D7c8*dW+Dxr&-@ha$i#7IRIFixru z+$ZN6kVTh|J1z!W$TixmZ4o7!?alghJEdwVps`M-6LZ^GovL9-U}M^HkjqB zL~VOils5TWt#fkQ&Sogx^>-Kl;fbFU2WAGts`i>l<}H{opt6ByxytOK#Kc->F&UkiR4w<#F0& z`u7woZ?0J5JX>|Q@DP7`>@Mw}twCJI$sgO0xfevC&n#N123nl!Xwf;ZrXwkutlvK= zU48fzRn&RueOT#-meB>4DQ{yS&0$xQVgSg~$&4bz95xR6m%y$$Q)gZOp|* z?)$aJp@GjWiR)UU&JF47k{aZ4Z%$%k;I{mbylL5xFyW(Dodj1%b7^>qAJ+)sOADj!VN}Ck4)yhXTAymEG(l!J%nuRBa zo^MnEi}1_R_RiC}kr^IDRf*6K)6(2I&kyYiXYb(cx#bl)aA&aO$|!#Oyc0s4nn=qYu-i zk|m9iwyAkGifVmsub&eu_4f1YtUh|$Mk!k->s#Mj|cz9n;5HTm+ zdCq1wKn;JQSsP8ic`v80^8aHLhJb5M|)d)wAVBv9|^`^4&9)4EZ)my?v zwqlk+^&NKWvE~OKjhISO@=2$X_;vICg|7u3&fGbD;<{hLr(BbDzes;ASZY>VlBua{ z8L7thYIr=FpMG8A?C1VUrsekDFG?kTxy{qKrUP|f5;6V4yx`nqUNGo#o2k?_$j|xH z-k5FIra7ReM_i0DeBgedB^!H22~n4|q3P3Y7SECDPeQ{$=-qAlU&seHQzbQ~Mo;Dl zKs}l7*zqK-nLNPEvXJr-h4(PuIf_x_$nJYmSZcJdB*iKFSd$pKPD=F6M_F0IA8u)b zs?K|hIB(sHNb^G70mtT7MK+!d7A@RQagANmWockdN(f`EWmNfbg>&=!2KyT_bm%SP z7h0)l_9%7(3B?f@$9KZl+EH_*+4fP9dcU>@lY||rwETT=&86ay?OkMt?&bJmhwKlH z@cTt!cD<$sW2A53#x~gfbc=2$ctXehN+<3<5te_dDJn1v5ItjwnCaNm!eX$@Q?WJZ z(45PC*5M5vDeZ}cH^^TWm)Q=U@H1)O;cTj$Bb$MP&kmWWBx615j1P*=@jJ5Y^#QuB{Ik}Tf07+@oD zML-htI0PG(hhtliHasbcJ4l=VvB2c+J7H{VUf{?@kyfX=zH1e^>9LHa*3~>wMasE+ z7XH>OHQ;XRxCX}RkBL2}9hGz@5>Tlpu67?6O6)fzN8a?@#U;%xVFmjL;;L%7L~YYM zQchLDSf*NC1<=o6f23vZ~m9G2BWsG(1~CK7T*&!7^|@xA!r8 zx_qeVWexKDcm6 zXn~d5|MsKGk}D_j*0VX(x=tsm)s`QBbLQDaqi?tPY=8E+Y@4Yd812^$x>9nx0|b1# zIt=QGE#tcW&-q?+nqcg$hK3o)kKwnMON6*=uzde$zdg&+Ca%&N*$t*-{|b=!-bpiV zqS-DQ0yLBQ5q^Jt3j6-6UGE8agxN)Ayt%}<^>YnPoFf3B8p2=*8!>QG^9rYiVcmfs zuv#fil<6xMkQHt?=}?i^;4nN7l@4#pmVa01#~MGvX#9RaJ_7M>9^95;3cOVXebyiF z9X0Sp@U$uW8=+r9Clxgq*ttOlCeHC;_`G3l#8yGJJpt)j=~Hmf zS*jD=OR>1_yM4_!qmBYn@$~BhEuOD-k1bR6aseenccjFh(^gGY6ak7ecVp0Y8t<6l zDxtZr8C@Dq(>6UAk9&=^YCbS%Jjuroo0TP_U0pw5H_DwhQnMF%BJ|DwtvOMj9R3(- z>g~c{3hQg;&emE3Fv1JmH7X}2pwWc#88z7GIn`7==C{{TtBI{S%kY6#B>;XJK>YTv zm%RNsUNj^JNqv`NO*A~2s=tKX6q2;e`@Tt!XXGzkXhln}f7r+ZuQ~ksU zx7)pLEldAAet@}fRWXhOpdkpW6)Z88=gKJ)Ie}K6lEbez`J)62*1s!Q1O~niBIs>a z?)t@vZp|eP$4Pdeq>6-Ft0*X_Z8uVL!s;a#Fve<#>>LzxN9 zV;P{bYW&-96Y#r%^Th;Veksk3yj{80h>qUh0xFy?#|ecNXOWIZ_(82wI1(%%ueP6o zXMP4^i5Q9H&}p7v6Yr}mHWO$Q{iBLyzhHFN$K@^SMv+6-L7%v^afJqP^X-8vebqJ8 zS@~&f@xLb4{_nRw{kQjXqbqR;APSz9Izcp#K|TH%ZGY;XJLmqU>i?Ivuaf*4k2HYI zYjT7+OXn=d(fTznl7^!~XZf3?@^>boc9@SJ{?$f3s4XxUnTo$6?ej5}GwX0UH48uat7%3l$^pz>lfxIoj`O6AdQGlk<#$TSo@SLyTT>;6dCn*K{^1#A(Hh=R5vzHam2-zsQbj=0-N3-|1Jh zuPwIaiUznIWjY9n-~!aD6-e6{ONnVs=hfxOl7~BF$(O(o-*~4kq}xqyi}uM8bKfH$ zCiv0!c%eXI;&Se>v!5BTsRe9Jjh{^%?0%BC`F0S0d_|6sZsSdg3W!cp9WL48k?Mso@RMTKL=!;r}SkZ`F#{Q?Iwi;R7~Q_y^?XgFJkG-^3g{rQ4>r zCUCwpaEVX&P&p;BCQYm8)8|NXf?@0(J_59E>7U!=#n@LQ?Bob6@M6^P+K)ral*@x` zIHuQKQXKs?L854sHmCJW zM!El~^idK2QPm3{B_V{XwkP+TDWY!ikA^;7E;h++(d9|qsfeE!jI>bJV&)|1tjjI6 zn(t1P!K>4(4A@3G(|#Mf!Zy2kfiqG4Z^`ckV?W=uRK+^&+}R&f=g*cBjGbs-F;)ub z?KfixIO>_%EHy%2!FU-+HcKp4V@o#hjC!~$SU&C6rM(Y^)eC%bzsuZV^|Y-(u|`hA zw4DQSsi~vY3he$FE?FwOs^IE!bl!5OS6Hs$>-PaZ;o}$QA(L&7;-xHU99paf66re-Y>qbTMHF2>1T!s&`WH-l!yq~~~wRaHQ}VDav-b$smAnYt^$ zgtHi6%(WkVkR?8RLErUvWdUT(m(Aq zF;#%1w2aWlL!+K)HOn`>GW3ox&`ZZL~koeQ#uPh&5Vdwjh>B)`*sXirr)|L1Yb3K7Ji=xaAdG$Y( z`S$RrhT@T(i-mB9@5{GkP6=Fnna&8^$5C6!i8>2%E&Xejd|E?+avFLC0K%#=@F7YR zkSBUwwAN{nig#2@LZeYPk_l*sHRak)#kK4WObTeIG>(ib$Z(p0*f?r)P)`Y7?kQ_X z*>eZ`fSdqCa;v@A#wPN)*IOI8b9K1tD%f<%)w7v3{pLif7!ly9#c+6N2mXnx5{6Fo zTOCuj74#3l_4ykUM2Jo|Nx)}`2fyuvxodtJ!!PKpSr?umo0)PK43r!#RZA-^Io$Gm zbHGEFOAdBnZqZGyMqnE6*ESVWjOh*)k^L6!!L&xze?ZXOu{Vv&Hfz2$V^^o!r)(4S zp4Ic^ahZK2--ajui%VdtM90!{9LbmFu^xn2X(s$hO9I@EX)oPtNVcdU*(MRGFVNo+ z3<5Lg=Y-}{!qxj^C!djmGkt!l>GD?$+VJPw>YX*Kci%u}pAYRTuNzRaaT{{w$%NP> zju>E^S`#kiofUs?Ov?)6tD+cikKV^EO4#UW{*y>Q~Bo(*M^|E#L|tL;TJx;tM=%8^)P z>c(UiFxI_?Py(@&sa;PW^mbJT2Esnc!TZlVZ$@lKmWOY9-xgD9KF#@%x&8m{G1I-S z$HvN+`8S0LKH?s^dcq_&w3>t3@9igt2kg+}GT1Ly1d><-3y{}NE!-X2Whtu}ZMnx^ z0238mu!MiX>!DUe{pS*|l43|XB-(0dOmR^(1W5c3#w&F>)(vMtx=ls290v-RKn3)m zjdAb)qv@ym_NRKG`rmI$gXVy$VsZ;{`BQIhcu{tPALv97WHbd?l_;B@1Cu`+n`qKT zaec@0Gb~)U=Y`s752vU#ZVeuc?&^%ms&-|$F4Qi4&nDd9ED2}p5H$8-27_S-k~$0i zO=|hYxe=42+l@#{&>I=d>26*Wv_%pws*#fC9nxebT;sIMvg3Y- z>IeTV@*Hyh219N;ub6-MYqo_fb~6XxynLG)@ptB&_$#nn>{UnOCeOpc_!;WWlV<{t zY3pc=AeMsMAms!vmk4g|4ANbi8Gw`~bHp{%8eaH*#A_}i^(lF_yf-UcUs2m$o`YW& zDd3GjubC2;>{Mx8L=5X>zJMGcYC*SmO2KqPG{Im*ho1Yyx?s4napVz%%dl~6tgYo& z93gWP&c5eAe>N`H`M2h7I&VT_6hom?b#7m|uP0Q80gF zVo0Ij8P{+aV+o-lGg0-BX<+>LK`SfnBky$GS?>F)Y?ty@0Sfv^wZZR`Ha4=`mf@GM zRc&SLBAAQ!lX)m20I!0Kl<%4Q&Cp37soZTFMvXrgot&9g5Ody}E&7Wa zvUb>Q_wY(LI5x^f2r2Cl9Y?@tf_3GB=9GlSNlwdMtGiW2t`v1WJWG^|r-tT4PcKf| zD;Ws@yt3Tp%WtYzi7)c7p{?3NJ2L@6)4-m<1jB)*ELk$mObNZ>h=Gw6rZ8>_vC_V# z`ZW~nek|dgz>E4K;h~NHgs;TEPW&gedP5g#@4pzt~5+|8k z6-_f5I_8)uS4d8c&-tG7{Mr^gv)G7YTc(^NGNYu`Z4?UchxxWT7 z8ICaSun#`md+T5};8Kvc5623CgnUn^(j;3^(F?m2k-rcu?5@FB1MyYBwd z_e43r<5>NeEu?7tdFb&C_h#disQQ6^ux}!7?Zq^dz}f-~*O-Q~h~Zk1b9=%@k+^r?S!fz!*M%O0axW`?~%HOCTbjP1ix&ZMH72V}!3Aw3TN^US*ZmxBWH+{W7WHA1s(F z=Ioq>6(qdq&`}VJsDDU$0LwOl>iY1*wm0Y<2ce9rj9vo=3}dyu{^#V3?J(CpoN3$F znQN;BmpJ2wOkEa<6H34=65uIb=IC{1wF5h?-$`(tv{D)J{l1_v+ZLP~7c2?A`5nr+ zHIzJ>Q;EN4`D%UaCj|kbyQB-vyn$}{^$%x2pd7qwm7AUNR);lr0no#Y7_ZtZYjemi zSc(9z-=a=?ug%XH##aNLk1cmGUfFdF$VxPH99J|iP{B@Gjrz5>0huJ&lWiY$ojk9$ zqwM5QNX#bPT^bV{iFSPC%QmhH6N1~A|+nwhu@L$f=l0|A1?X$%tAWnMH^?; zTOoqoRv>6U54Y)wzO8VEWFTWZV7~MYjNVUX=*?{U%BzazKHd3%lCQrT)Q@#XCw^HD zTzu$L{Y9J|`)e<04hdgN%P!k<%8$eI*u!6?%v>a0fg0}G3^ie#F~K!asK<_##0^~_ zUWuhDPu|J&DwC{pZ5m#s)A(rW-^iz2;CC=n59(g{68L18NhC{1cm zdI`OT4oV9}2@oMvAs~bhS||yDvvBX$2W}OfRwdX@;vK1=lo1z z+Gs9Jl2n)&X}3_7j1oC;^~97yU%@WEsP*2}0SRUaXhUpCmf`%TW(2^Gx#p%wrEgH^s^c=}UY!r}HrbP{~Ns+}P^j*4p+ z#Nq^PpNV;@yQFXQQmz?(`sH7*T*~X#zTA=F<{g-}6PYAo*Mgcy&$m7jM_{~e)!AU- zV)lyM*Q!ANsWCC*pB^^*L>V=VZmjg#@w%NUxnrN`Ni7#7E4Ff}DO({%(~r}R-*kFc z*@dF6T@%PAG?u&>SKP`QsQGSYcWAid*7p{tAmi{vxL>VJBM1#Kde5CpKP3v`)>>NgE`b`v@ypE{&GcCn+_s>*sFQbKkL1Zo| z_{rqKo2rLDHsj3zh~7BKLkDHS6(HESDKmzJr?vx8$P`J?%k5TZMvHW#XaJFbk~DUuPu*DW_%p{ zLc9JwDrQe1s<-B^R!aW0?i)0!s7HTi#zF86!L8lo!>Z^I(dT7URJNS#<*Mo+FFTXX z;ylyFpF(XE?pcyx+ObBc;p6oC_B@4G(pq#_yf_HwUQ_#u=Ln9_YwflCn{~|0rW~6} z50_>vG92>uc|s-_LP}((C|s)YOSZXontTg9d{r_1o1EdvHAvzF5Y+LVAQ*N5m;1-G zu%fgXEXvvGp!q5FtfAV{#yu0rrz-c|p@#_{XJ$T4X}heR;feNEr~!Ep_+pH3tQq9H zj0wt{3iEP@A*y%sit!y(g^?XO!#uZ`0$VRHb9Q^;sFn7Fa?_2?FC^u9?V`7@wt(PI zE^Qlv`u2wIR`kXy9*gNYb85=|Sus``o_3Nm!l(Ji13p|ztuB8$PEhSIyY_a4k4M7j zk5{#_qX_})z4c!c5@cBoAGW`!>LgLN*QI05l^zzi$#&V@1g5Pc_chPletlYdq5Mg8 zXpW^77$eC|yXD2TyL;wcx+hxpW5go2)gE1>{+nKRil z?ioU^CPd{4{CzB_f!k|tU!eFf7XP7sz74i1`Ov1SdHAXFY9G=CM5cBO*yqBQ{1i__ z7i7Ybt^wgBbEy9adwkiPM2ynuWBy+O*ad-~Wtt?JnkJN9HV5Wk7IY#yz|uk z;7&8!V31VISe+B0yl3SSoz4m4{x<1R`Gz$kHTz%=Rz=syJ1n{3pGMt?TP1hZ9n_jZ zj^7IM=qFt3xoFj~d_()p@ZL`9RzSR+&g!SJk7e42zn-QTq zo`KiSS!W<<=5Cd|x!wcyz#8$-cZ+acuZD$PM)OO~`q#<}Rc^lo|D1je<$bH5rd8k# zc3|g&ylrY=Vzyc}^4vVmG9F zUGmSKS?ut}o6(<;iU_oXUZELw+nHm*`k99ZA#(PUD(8x8798d}Jb+0|tbFAZ6foZ3 zZx#N=a5?Gf_@=8*T|_OWWak60iBWNH8NUCvmK=B1soAUl+WAfbWT9T9x;z zCUSo6sODJ;jQ5zhp>IqE;>mhsua3@wV`(!40ml4DA|mRfZv)S5ud^j%G4I9N5*SAB zC!Wubqx;&o7ji90#3=>!EpzhENhfwZtS^ZOP@?@vV%%6BiKA|0o(Dw`&7+r|qE&%& zdcn#*eQ{oROR3Nutb4XzAbs8rKddGzRM%TRayv7+>EMggl*0yB0o>1FKqsi7e&sxyfmrM zxxwbzlv6#W1gIcAcYAMPq`@fEWx!_5LS(uDKS4ii?Ktv5M@VhiqMzIQW40nsS#%pu zb5L&9g6Jsn*FspSgWnGY*GG;P&{qtj5w4%u_gd|y9}V(%cwa|_9$fu0bo#(6frNSa zCSD^X7;$!ItWdrZo_j8{wafZfy%-KgK*#7}q~TgpkM5fUlTL_I}C=im4x=z4khg%~29TbWxLD{gmYyM#dv9h&@kpviN@a^{DWOxMs-e zFAW#9cvBf8{SPfB*C4U{pMekx0H`?|N-T1w+!84*ciYTxEY2d4LB#}Dr+9nv`wNMokbb{w4!Z1evQfsXLSfm7JWT@0V?C0vovQGdIjLDJv zuFA}F+)4Yd=W&~PGCLI6W$>eC84kkvUMe}3fRY0;>{Q)q$pv=)&d3oQ%;5}}iUSEXHh*rTWa&=^)(6{Zl3MB;#>?KQQoCg1Ou#ESq;6%uQAP=1)>dO(**+(Qp^N3Xk!vimP)rjg)(0LwJlHx z+inXhGAZa!<-cARo)kBRK?e2Gel6Jr`rF0gmZAq0ZmBxvV4y_W{w+$#ydE2H5?}NG z2Zy-S|G*)R3k@R%b(MaznAUV0$hrS}-_Nyl;eOn6PTQLsRCpY-O ze~Rc%W>lj&Csxb5@SB_8>Py`>_AfpTIB?3C=Ck6nl2+TlG(HsYhPU?wuT{kqZY@Z7 z)z8oAEykPvQfxZ8HfB|2&eM-Jv{`D33DLn3UKV`|NN(ZY-r9-}%hVaXqc=4GpL!0O z7QtUS8|E$TL+q3Ro1~`JM}32-A_=Yim%xikjTnA2apf1nbvrg6z&LN-gUupnj8+Tqd zHGcKEVxXWB@d0C?X|;XsZB* zCs*%p-4?AI@E$81_OJ1LwF>s@@OC54<94val$X-FXEZ$eA$mc4fVX{TecXn8+uftO zclT9GT4QX;H{flkJ$_A1~L8fD#sH4_L1Oc+&$=66T16wQ;UwFq`mv z+}Q~pn1miWz6dL%|11~Dp6JwzTe{iGQ=5nXq28o&*ff^6tq?MHXDCH2+kO6XSkV<$ zR3=Uxx427Qgjl>*`SP``)FQVwY&YHJASg?=bfo`!L;#pjmIn}}abm0q#sCzUf8RlZi?i%Y&dBb~j z?FE&uaqLlUyX$6>Z{~Lhaabxn^C{}O!bgc)b)(Ef>Er+tsyV}i<>3Jm0l^Sp2WI%) z6^Y3Y6Dg~h)Q-kxuWa6KOLCZN0G$w#ce$C8N~vtnmUsWM}CiyCbTA}Yaw7(52VuD_}O?!@6v(6{YZ2WDA;X!D$JsCENR3bZbu4=2Q`ciFUsR z)`xtKHY=g*2&OhBI1_zcTFf#HXLS#Ga4tT?HoKx6cR(fHRxWWF)H=7K(m(kttB}nm zZ^s!@u;U%T33c(@|8=Wp(mMd$7~j>{Jmai87(l|P7S7M4g_OOkon-1T^GI))yx+f} zTn|IVqd^n`RI>&qA#wD%u8jF@{;%M({4J18sGj!cboU@-6L-i)g+*rK?xdJqx}Qo) z%c*S4ku!#&d{`|)c5M?hT-U3%3lDm*MoidOEUp$rtw|qJuG2xwblt!$odjGU7@2n; zyFDnN2r#8^`zyL=F*;whCDz5VWLzJM2PGeR@0g#>eU{F!OS2d^@!xD(Kn`^*X%DBZ zw;BN?tF~E-$>tj9;IpN~#YJQaDg@b___KJE8d{_?y+0P^5I7dH!!IIQ_o2BlU{6tk z9OgWRtFN0$X-cbz*~R?T98;f$YnVh5HW+aQ7VwA-;uy1TbsbZFelw&j(fkMfh~gZwD+rxs=ob8)ANyEfhC4w= zzlepN?q2*)VJ!eub-k|nqC%Z2GA~FAs{s7vi;1IHSz!C(lk|P(&Pv|xF1I3 z*nD`zq7wSO6MJEw8_VYW=08WwiX*IV_D#_aE~L{Jy0$El$i9zx25e84{?V}bM>Zg> zZYLGzU|0VWj%w(xYFWa&|GwNs0X@I+Ss*cqAM?S!w<1ZZOzH0j``>pnd9jwPhht5k zZoG?tS?qrF_faEk9pTq8iWMn~bFS|08JiF-ilmYi2j*Jy)4!FbZQ5&hKf}iNknLve zd*Pni_WjYuN0#Jr{q3hEwT*AkX#KqO{G!aEgk~q3kGdw4%Zc|A@;uoSP;$DK547Rj z4#syV<8nbT1Bwz>rM?@{U^BeLS0x(p{lmC#d5Kdh;aMQ2lM5Lon9`j!Z zUaM@A@o*(xWuPb&5+3nu?HRVt>T3a^U8q{jnFG{o1YHYD;!{(-OTYh+x=wACb6{6N(-1oocZKyE&9^B07m<9lcYH~j`{$2N<0sCPdKWe8 znLM=kp^SH&{;tY8IX7(D6mRQX5Ht7uVg8>ZEsoh=Mvg0e3~9+26;r4qv{>&2muyh? zce@+kC^>M6ItI-Nb2cjI(OC$qNk#u6S~YGqD_9|b8_YE(i_jU!nKLCNIo1c5GbJDm zUH1nZDtLij(`2@mEL~&u`cvizi%5XOa*gW~m1S!7b>(oErz(?0qWQ1QIlDAJ7(;s9 zZ7pl%6U|SXJpT2Vk36ga`nHV8w?e<=eENh?js)}fH|a!@*@^m*g6VP5PZjjM{KIwy zfx-08aB}>Qj(d`*=`l@k$DA{V_5H$ppPW9mOgG}KOL+xFo~aPG-=a{o!SYWbiXb3f z0epx=e``LTlHrK2PS8ckafldV6TR(gaCcO8;=Z`@q~*vzP^)zPno?NI$j@i)Mb#lT zA)34E*4NCNwPmeBoD?~Lk;HOs6MNgTmc6qe`@^x06s6Z}igMljimY)`FKT z!`s+xnkF{<;Pp1RMz$f0M?_vYV}4UIF*yQ*>OB~~oHO7FMg+HxPYp4R`^86Ksw(uC z{nd)>%UWkRO+q%CO==hF^-zQ|qZ0fo|HIy95|9Ewr)n{bU_u^{X&08iW9E#F0;13> zbLHuIqU8~mc&CIIPJ-#~Q+Cx`}mR~D3y@eDXbEt5gvK+fZEQ|jBL}b!8 zDzGl9&9>X8j}Z}a?_2W@U!L>i_MRr`63lIFBaQ9u0PGG;s!q)2&ZpXZs?59ef=cp( z2kdWey)A0#=yg|0g3N_t>=4anmb40ZUUiJUrT$I->5cl&Mb$B<0dw8Vm5Q<%G@#v@ z-*PHzi2muG_^psdcNp;+#Jc?FQqx)|=kAHlPwIM~?@2cQ1(2M=d~XXE@MI1rYmV=q zM&34e|Gd#@SLJRki3%ustG6aKOd6_vxc5gnpfYXJ#5erTGKPYyCOvFHKaWX`Hes4F z6Z{N@nvcbEa~csptQq{9tG?K>)c*c`;Q*6!G8OQF9ta)$j{sz>r3uxbw_nQ&bLbK_ zWMB07ieC@8Ay7pUA8#jc9GU7Bd`iV~`h#DpV(AuBy|b;XiFbZqIsD?ojeK2c63j0NA~^sQ>gxcIQP@DX>^upp)=yjm~M z8Ia%4$$FL~85=Ob$iJwBZDs~Vnj3hS68=s?O!T^|CM_7qU%D}j2zfQ`B9d>iFc}=x z62<(jjm>_#Gr#!rk6s&}`op<=y)xDCPlHQ$Whd+VEZr3?W^^&KPblBeR*DhjCkr0syejh_p$Z5{D$Kz~aZpEPc01Ro!xqw+T zDNj#(*&phYf3;!FwTGfm(~JC3gp(b_*p{RmvRX!PXW6|u`BFSq;;{V6_FjJtx!S&| z>>Ea%fx<~A{VR*Ta~V=)@mGoIIBo%V^;KGc3V)zGVeYbvo$IfN!S;4qkB zldFYDJbuik`5uG$&eL3EAEkxxMd6+udza$nIw}|8b7p$1v_FXT^DolLVObR|yGtsF zJnu+w9G4m8ybB~rSv~{O;?cC!<-Yt=Sb0T@JqkNY+L8vAgf4W$`Q}oM6Ok8H$N+QS zC&wX%s$69?&R!>5-3VGSoB4eZ3WPCw4?;g!?&(r)Y!q-EDlqC_3OoQ-{PIMF zx(x;sh$st+Wp++S&;ZcclvF=YKHTv{Gj@~K^?k=WScn_drx?PUgF}lZdUb!)F1p?e zVsz9==vZF;cG0gZ$1~Y@NF2>-xE)LnA&`_1)5Rdi5wFG3(73vNg5b~ z?6c9EX1!Z%Iq1IIj7u~{Yf(0RM=P6?7hML#^i|tNT0oUN5lRT~!|6#lH^g``#nBsm;3bS$ ztCv|smw&YkP~8980Sq+u&LeEkf)9@$YkZ{5ZDrwfCH-2)eBAmmf!&|VfRiIIPk*G> zi&axaOn7d-0H;b(e;Fk@cMkjG8uCky`-01r;SW`AF#>2tAw{`|B>omBVfy+|8@BDG z1w<&#tJ@399$}>VGRDH1v-9bgEQGH=I8@YY0wOczT3xLty~*rb;ooJ+qTLX+dd zrJH3^p$22#7fhPP2y&|~3#FS3mJgZ;N-+V*(;)$CLf;Oy&ML>uqsbac<>zzZ^-sHI z+Xr*@;sw_LkKEdaD++aPpZ)tKm)ZQ^`t~F=YOnL?#@8vR(`?3DWKNbf60QQjc8saC zwM`Z%sKGlz0}_!ah=@SLFAtYXt~>iT7>^k|SRa=g&sfK512?GJ?q|_Q5qh9tgZJ+= z_n#;J5C3^rukBwgCCADh=SC%is(#;?tKYo-fAmi=?^5;_EuwtWeZGC7YZWR`o<7i0 zAb#ez|5TiK8`Ti|&%M3y**Nl71pb;*QfRS@@JX@XC!|$si;LJBHM?;y7M9vu^$55P z1pZ;7CeS+(J@g1pr>!A->cS#Ivt{?I^amUWp{Rf4lhra;qosxXO|p)a`q*1@?VmsV zt00GR*IDQF@bl7w!Itiiev(X+8*gVg^Hat@m@iRtcsmr(#jsBgtM_`8rYQAfP zZQ9&WRE@Q&D|YKumulnFYwR;kDQ3$gw{2$Qt}d*TGd3K!oLeIai1XU$V`B3ZtlD00 zW!l$RspMYtd5m1$Gd3gN+vyG3NrENLnk(n8y`L!zbx;?AT~??A27S$cCu02T_faTP zddndDb24$&9EwK-Kx=ake;i=o^oI9_gBw?~3{WL!N?x{IZj(K8bhKNGx(?Mx^~u3s z*`MzSd@>D>fgbE^pC?iXC@0zd@fi0X8pSy1Ab4BMUGj)z6B_2?x-0?SZ;Tk_<<2Hb z>pLBhX#zYFQsk93;|)pmsatEb0GA0rU^4%~o7fzY%R7-Xe4k|)VHci}zrM4yvF;UQ z6X`Hk=_lP;nmEZqJ1PAzz!_DY(#2<06rLNf zZ=IrK;Uq5as4V)_dSeO_of8${XAD{(WR};vKU;1*_^|{fgbQuJW~e{@*>fBYSKq!WJN{m zmQ;UKe;;41=b8#R0>hlwIb<)_qXhSw5B1@aApWGiTKZCpE+Df=O(Z}2=Li8g(>*(M z$k1ML*lDz?VBC*8`mY68AMw>;JS^ItX5^u~!dnqYhBcGQ0xCgv2E@2S!{#s9~I40k^IAMBypK!{&$cBt98}*tB!YPYY6}4(1 z9PKS?D!q)B-^Ao7xlBN4Ka!b(W|)EZr?Qo)pb-4BG-n}+*XEvqV?xsYA1_r&Pd)+x zqpu9+(A!(5Qc{Yx{t6S)id^ZlMyqB|pQt^NTno+NS$@5r}BqfE; zKh|oZ3PMCW@9vI+csIFN-vKUZu*#Kx9yfcnsqjXF)j3G6TK?6lm?G=aX(jQw z8k@5jtNTDe9WqnDuiwn;6DEg2r|X>~vJVAXy7Dkuh0j1=0k8C!8u(^70}kmpdGb}u zV9^0}_LOr}c8t>MFUG&<(VT^-*^8I{O&!z>r1}7OYN|dki#u5NE}pt=~`f z2PMs$Gg9;GHABv3rl~%hG^cZ;%#=lA`zIIHfi#LG?qLC~B3RxEMYw(gJNR4ASmA3r z3=YpwDGSTy)Zdz4JyV*MBC=CEw6+CDhZu<>x8hU=Fy{6i7^m{Ef={Nk<_u!cvPp#p zJK2)!4XMMT7}{fbSwtX^3xqA-1o8`+_MBm&-?IiS>v{cLCM9Kn@Km17V)IJYL)I8F zPm5;E(_^?WZ=#KBhcs(aBiZ+`oBGGBB5xWa(Vut3{yNe3EidKky`~|yQeZt%FZnOs z9GKn3vI+)VueYBm;yzv055GinWRUuxS~TEdLrWISi5hSISWT@~Ds@oNrRF8~<_Cm^ z6}#`7D194yscmzhn);SUhXo}1We?bG2W{K}d$lJtW(;DpmhKd?EFZ***HttoC4X-p z*D|gg2p<@-H`cc2Z8IGqI!I>(B9Tp6*5ew!&eP*_1b#7&1vTDLD(?`}v|eQ3Z819G zNP^gSk2#V!Mz+wD`yL!?^2}X`&Zfk4<%#p%ClZVkMk|uYyF1RDCXpzoiMu^g zE<5I2?Q8AgfysO;td15oLPa)V#F8kH9okM&Nz^E3=WEwIrk26g6vWUu;2A2~)%MUg zH_n!nO~AL7Ows#e@R7U9I}9NWz_s!C(>|)?ZV1P9B(6z~9`3w-;MVDNwa@^C`bl8G zEpGaNoH!ZPWcuZK^fukfU!yeE{#WA~n*EuR=PaDdo*Wt3f36ff{W)_Yt zh&o64@b^|z?8;#n6Wo0c*C*o8v0!`ndL)Gm}i>0c7a3ID}w0-!3x zWGAbECsp)rVEXOM$*%i*)G6b}y|X-K{LSv>zQ5S3C*u>h|Lhq694vd5L+}K`rlAo$ ziq*VxWhbYKJ}>l6SH}o9z<&9bwx1#H^#$iQi?z);<6TqKUE9d#)|cl~fK9#l;tT|< zeD4if_p;@ph=ps0oOwkb`xPtc(dv5CF~I^RXAa)qg&;P$K*PqhoJ59rqUpI3ZQrPC z+lXEC)kqCdoNM9Ev4j$tcQ``LVWJPzelPgT5o_pz!(=0$M8;>-5(%=qo|I%{LuQyd zdx2)ON~wM@Dr{NMfFNSvJ(!24(~R@ zKg}!wVH^`^NfIioCJBP|(}MSIQGHL1N#diVXM>V9y%?1-P5g94qFr%Bt-qomQH21hoV!-NDM@Oqy^P0f zPmeBake*j2iXvHH`>8ufrJB((3fwD()9m96r-#+Ez2NQxHN(m`hYN#W@9jJY-raX#D{BtRIuSe4=dXR}Cm7Id-M=}=9Hpd2*G0RWYQYjS{@?2H%t#lMm!eL@eo*gr(;! z1w_`!7zUxXEhhUY-Cgq{^oe%-dq;w|T{&2HMz*^|G$^=XIpflr;^{}>8%!l(!SAPP zr;X^%o1fy>Zfg}t2fs%&#G5r4-XjTSoT}fdadSj&;5DUrTsP~+nsj__BQnj z>Wn}PrD*Ri7OZE7T&d6x5A>J>dON#D81f#d{tBWA5vnQxa#g{p2mlM`R}j2d6Lo2* zP+tCf+biq{|1$q9?0L|6Dk0fsEMsER2`_Pmvzve%j*; zCVIkMS0uUwgMgYGfvN?dR$@)7AtbE24=BI*Lc(K!P)uB;hL1ryw_O#vPr=<-5jE>s zB=?b`^&bDJpu<`(fVT55e{kV4yVbM2alu4X@DkdkvZg z)9mR2m(>Q?eVdQ%)UH<4*x`j$FDQSynXO79@olXzPLV5gbLk8GU1y+wsdQxo1t)O- zREOmnrmsa#3FU=ZLFo~@pPPYdMN#G5KSu6Y0+l*L^2M$d?E-@?J4h8<#uqbzv2?Y& z5hS<(9K4f0>&XFc2?)51rem2m+gFn9 z9RM`czdX=^(Rzf>pYoS8F;x}9J;$S z0D02HI>8}jBgVc3&EIy>BxY3c{$W%uM06!UBtO?PY1~Fpvlk#n_0+wXyO&3fBq7%p zD@G;Aczk|fB#$GEAAiMvVxtbYY_}KZ#1N`-@sAc`BvsA5>%hDGh>YEjMQX&5Pahgi z^xSmMI;G89OShZKjUj<}`H|Qyxv?#@0fFa;JLSb9G`l%=-gYTL-h#V*0XL3l>N&4ZE{#SegqmZO$N=?yDg_Uw$?^yx(#q$J_+r!%0 zi+c5@KQ4d!W4Tu-PApD;EftG(Z zzxI6L+{ojT&@=YUvv$V?1>Nf#=Wq7Tx1x#&R3z|OXb%V`gS7jQ4E8aOSdflR`7@NcjJ4B zhuetL(mS@2uH=k)f_A-#!mtu_tL`~B#PVs730!M(Y!OCL{~;{;A}^^UTkIw7dVy#G zmum)hX&6u~avaU{OYmW&1EfCvyXz$N{W+7E;K-^jdkJIJG^!Tvz*0hD-&GCfX(jz9 zh1~5UIUeZq!syceJF}K|#JKX3s7v|2f3R932ZA;R9z`sEzGk3@eUr9W33-{#nrjmI z)+X^lQ#Bwck;EQsSl+oV)zyg68Pi8Mut!+sRVInzXNC2nX`tt7YqXg;y;nRz$#W_l z%oK^uhhrbCc2*@X+pq;bN*G=D`HK<@Ra>)(?6`gD2U>yRFPO{1lY$=ZT_gX;ii92+Tl!`HL z^J16<4wk^}G5Dyxc3_dPFSwmQ649W7RmFzeEAsjTa=atRj@li^aC+&U0VA*V-hvvX zZ_pO|f5=VWb}}{P_hsZWR?!J9QBr##>Y^0?u=YH!TBp4(OM#o_@;Ut||U*=WwgPE8B$Q7M=UrQc}W9?fQ2a!qn!eW)`EcoTK z;*M()aDq&ln7}a$@e;4dF+Tt2pX`~N^B>h_`lpS4_~fnMSg+^67DqaRei5D^`|n3E z9F2_uX*3lD>@;gL4z5WSx_$3iTMP7PVC?qEH4AV_33CuEaEVYAdpgazjV$2RVb=p< zG6QUC_R4=B$sLXEsI8=x-xSp&$w6sAnjAG>5kryU#JCi9ok)}gi*2Ty z4^)+m@1OozIOsASkpVIUvZpIk_W(>)d9?oChoI&+KUJUzOH zQcd{u9XPyFOC0i)(=|d`zI#XBUip)|qIqloAYd1+$+N`%HPefV;iu;g!C#>)_4N+r z>|qS9lkI|X!gKc&0~+vEA~jP7SNVV}>*1S8f!bPQJ;d#DFR&}BukqWwQu-hG3qHqL ziU!N*tz_x#)cZfmyI?zS@bU&zrAZ{uXb?@Fi-Heb3NYWecU#!+ba6n(@}0}3$lRw- zUYs5rcBR6h1-!b-_7@|dVmWMq{ z!>v~t`up~ANK0&ne7Az{Q$8g)gg|#z6l}m2t)A$)z^Ou(>Fj2I6i^B~6anfoa+EMu z(|ve>cUM2*GW*cI6s0p|+yMT+bk{AZ&~mi%QZ(&2XfAH`qtB%W%!XdOGS$I9YwFzS z{_&mJC!59e4-mOpwEF90FKrQJ$5`C-;PFpt1U;^}t1KDjZX|($b+3VCj0bA0M^LW1 z#Q3f+f3q0@=Rz5J8MSI|6MTsgjUr%9l=Lb8vjCZD+w7tyjzDuY~h z|9lV`7q8M`A1~+|G(RimqH0R6&{^7<7sHfqSSx*;u?GS|#3-FEVsVW`e8xH5671Qr z=+<+N58%(n*f?nYH}-!Rvl*rP5eI^vd*sgsnzGg8&;5`uE%c)uN5uvj%>NPB z`GvX2M6U2Ftlbn9oy1fF{rfxLRU5u`w;Y|`XiuAl7fKn<>=8Tco5LA#yjk6XafHtQ98kcxr|N8fBz zsdoelk7#0hg6zuC2l9Ocb3hta7IUaLxX;|HVO*iIlm~954f)wTUN^Iep5(K6Fw^{b z$69=m8oRO9yzPE}O;)I~#H)$*gcu`$p}O~;kw-_Lc@YH^7F65No-KV~Y^gX1I|Edo zeOdd{qilvEZlbApQh(kCP`Kn(`=2LBKE~HiX%KJX=o=@tq4|wFspcM&JqNexkUKA0 z17q_d^|9N}@%9n6J8huI_`$k~=d{unUex{hqD(>(6!a}R9R^#*$?wCQ;>{JGg4??O zTLD++n|-UHr0Z>yJUfWUonFTl*ln9x0tP@6EjSHbAoNN+{u) z)$GXSAP06+zvx0nw9cG#@zkI8?hXfkUY>Unfc~n+=L59oju$i33KU+05>c_W8D?%~ z;mTOOQrbO>^gNn5{KEwM->=#HzcHczSxkuXQ{IW5yYnjy(e$pyl$<-gCtuC*x4G1w zCl|(k@t-M-fbB-pt~-~;qEReN-2TPA-{9s);URX`$&yyhXDZx`ldt|wn0}o6-g4*Q zcKxBjjdwO^z!|(h_=~;8Uvq;>04**ZO@o$}9gtYEZ0)nY%4>g(OSaW9QhE(EMa+v&mZG0(i2kfhi^BWq`_j3D90{-R$`W%{*5@%}kq;W&vPI zFZjfkpv!DAIQL+uuAzzl%(dAL=m*!0Mty4{lf)~ao6_b5qZ}>eDZYLbLp-Z%hCpme zxp~Qd>^DDWYZY@4s08rd_BOuD(c{@=js&sW4QdE6hD=M>1J5uYvSLhN2$Bl!u)xcJ zXANUii?&%onKht*pp3yGf`IDLz^}FM@Oq-p@kianJj6zVgJLAVy;K5>9|+j>`@o}X zpM)glqJdGLi#Z@Wp@VwTH5qOge-shBB82S!MtM`@V^Oc=_e|i}1~G^=j)AF^556ph zocze|WQA-fVo3$M5STX!cAtPc^ZW8zzFh#3xX+XI# zwosz~TU_3b@b5m1wf4Q=Y`JMBhVlQgk_Ob3YH!8L&-D1@*`|^1oi^8SaRAEKM?Nbc z5V51wPVtmU$llrq+lfB_?`!j@R_)W#F&C2pmPL^n8D;I53{UU`37cD*TVTQAhjryY zIz{$h|E0$v{ulH(Gn+Qk&=2dr!8@{nyQq=ny?H!G;4Wpvr_3q{2pFmP>*!|y2_y2e zU)1{3;*aDEmbU>C9S~po0#5;|syC-;dFxC}C89Q>S+*lH3fjhy$Y~(zGt@-R7}~D{ z0%0?^D122)XE6Y~N-xN*z&s;0H$qDHwX)9HGbOY5PPyOZ>@E#J?LE){52hqtumWKG z7^o#CZbKCfj|)`u%EM8n6679d$Tu~rqB~x~Ry8YSSI4ZEVY$=!h;^Z?@u?yoB5`ah z(4=Wt0pq#-#@H`r>FQzA?<#qZBqP{(bD)xTE!7Xd*`!xp&|rnYt*AB(c=^K@-G(~I zC>S`+ab&q$dG$M~Xm~{SF3x>A2h){)MEt+b{%-V;F$CKMRuO{&*7#u683q7Y%aV>Jd}V2VJVU z2h<3M9%sGpA2sk#vM8+doSL@Q_LE#YjdMotqZ%49@~cBxWJQ^b zD%@gTZz=4o0htdAJBvPWHMTyJHo7K-?!)gr-Bz8X>WoTj=x0M$YRyTbmM+M?$y!L+ zQqaL4nW05IA&O;%a9OZ!%&>$XttzngKE8I7dpsb}VS36CGY4X_nl%~#*jV}X#1A78 zDMaG;lcEYm6@bR6uD6A_Kr|W5^Ljtv4=;F)%Ru0f2l&enfnG$I`>IxIzE?JJcuLS}DB@D!xe8OY&7J!b)U8ubHn$%n57BA{mQ#ttS>s9E zAF)ION(V;61(3Yer~a1eKo$QTsSaS0Xq;F9w9!)wRck$KQ8VL@84SQ5&j_aFFRhd< z5S5Eg7^r_^VkvRX#xgCb*n(<5Suays1M_uW>j!~dKs}99Zl|4qkQ1%Of=#1;h~QIp z#VpgO2FJCfusfBwvrh#YT6Cc~HVu|x$&<2oM_%J~TRF(DMkEB)r}%~!#Pb$DrTRE@ zE+=N%G|wm&mM`%~u1xBDGiRAMs*>aDpiTAgfn^7y-Iz7VW`^}SZV|0pBrjytObQ&|$Uk5k(T)c%!xv--Ti^3=!=*R-w0|wwgBveTRAsOR z3ezz!`j;ePDNO8`1%dlTN16ueoSv zcU2mgOeoW)vqN;#<1S-9h?_UgpeBD+J%wQVrZdb?l`*$YhRn&_s9Pv=HM`Sf>(wP2 z_(daq^~{0?@kcs6>DUUPAaOoQsl4G_{#8?(h{{7|!bXUp|I4<7ykx3dM#e--ZnFV1 zvRKm**jYWw1bBZ-pGKB=GyS-3zsCKgn)daj-I3HTdDj|PV1t5Rx%GtUdAUpma89!N z#i+XHjH4%)XHnIQt8qHAJNA60ULJvD1xE3NEQtW#Qy&oB>f%Y1so03L3YD~+!)T%d zcFQ2)b<$?~DDngRU;QUG2oBR#@~2^vMc`HrSFY+$iUmk~Vvi%#Wz-c92!_L_u*0+) zti60yL&LQyGm52xGq$<^kGPXk{*_1N8mcW)VY!=_llwoVa!!6KYz5Ma&;k46+?ruH zutXSz5?K{XvK2PeN3Eywf`dmK>A8Sbc->(vgq2u?oHXvB!y)Nwfuu;nhW8@?qd4Gq z@nIECnyk-XFj{G$ER;j@O*GtekluE6C(5b?#i54|t%|R>J>V*JvkeN7>d_`hOlybS zB_{pjgsE`PA5QPdv-}I%`edeQ2hv)9|dQCRu*bM?9D6^k$D>n`Cpe?{t z9qD|QxVXHPL#bX-T8U^=IfNu)O3Zz_DYt@=oz%n3NS>$BJ?GZ|NMVtZEl zaOMN;7@#g6o4=Wac%j~2v;-r@B#x-5&jgm{zVy{T_t`dWqs^_b-%(aHuMmB@aOiHj zfY8k=ANRehIw|aTztz-d4@ePj{#D&Lkq7;_-&=JmTKiW*B9vTil5?PFDYy^Buhdo7 z^qVCL*e?THcVj=@Y9F;dsu4Q%0s7qAeU%g^Uf}7^5Zqx`HZaHb8dvE{@+Or#e$t7R z2Cto6uYlC*2KupCAPCFcy$?cd)2kF-E+j`Z$7 zJG}7tuO^+Z1ABf;g2$Np4>J>gAoAa9f~<4hLk=9aBB77iW*>Z{9}$2@a%Of?ETtDL zqV9rYbN=oQc@(ZAUJ7~$pw9oPNx{T#fhcNa)$vcQU$0=7|7mRL)A|^1xdW`3zYg0+ zpY$A&idS-&i&_6)x5xkMWofS_!ic?o1-Y;nN7Wt9{x9^nMe<~Gmu&t5LQjE!rf4n5 z>1R0RO!m3AuIW5Rleps4VUyqQ8ovU5%w7AeOZcIl4$v7NWMi}ERbG+C$_rK}nsavA z|9cSY%)e`o`TI4>W`_6i@=4#`vH;m6fEZ}hLAXZFT!w`&xhVbmvp+X#Hu>kUmu);m zF153~b*?gWxgk|3LvkPXR{kRp&Gwm9} ze%;>rex0!+>1vrqsEaOHq1yZ^S67qK=!oIqnp2^KWYlIHiE^sxZ{hMz+tNLZ5HjXa zVL%R^xnI+;Kj*nT){k&s$}|b2w|%Ny`6VO}(V_tjIb!d~va5`oHydCjL#**lwCOa8f#uCQ9HpVbR zQKUr5zNhTQ(#2$KF=;SeVk|LXyzDau8T*9ixINE*@I22ya9*!-UcYnB_xJkzKJPcw zP=`!mO;Hrz!^UMdd&KH>21!h8(TWN%v@0r->2`W@mIL~>FQHXHiLLiJHFfY53WYX* zE-Y~ykZ5n6IGVF900Gvrk5vemieFR4k;PZ%w0>dmY!x! z2P4D_H;KFoL34M3PS@(YXRgh;Ex1so-Q`q&EkhR4Fbvw9Xck*1ss?YKQrjqzmCw9t z!m9u6dZlLkC~cyZ>K)JTKu~S5(+F7U6klMV2J*E zX$@skyMFgb;f)TA;f6sY*OX7PhVuQmtPvS@cmTSB_E|Cq#ohP+b5SQob^S z!*BY1+2;mA?3W?n5x`B_PfwMHZA!mkN!AIkGsHU?#}{CQ7UK=d$-?_RhlZ03xxvo2 zk6g7huO7K?-bh^NG6;HViA=KC$v$5P9L(2DmMWJ$DRkFW&`v_ zA&I4LH@*{K;}1k&Y3*cy3phrYWCnKN39Hi|?Gqi6%vP>#4UkF)H$*1pNFu|R<(Q_p zcZw~zo$)&_P;-&SV%_u5ZYKpdU3^tR+BvZBW_of#$j#NpqG)dkbQ$g<`4&boAZ~9K zz8UoLAWa#`NbEfpu)<*uHJ%MSIC|uRW%u6H#rB715$LR!QqJ7=72nc8lS;#9BXx&a zh!1a3ZV_8=asA1BgGYwG>X9<{VSUmYXp|s#+VS~cQh%3eSMPQC1M`{KQjz{ldF&oC zTSb~~IpwyUL37f;+j1pVc`MN?4{4NGz4Uh!tZ*}Ekx#_QwvW?ujw&AW@SqTa>R6fX zCBCbqna6o!f}2Jo!S}W9@|#U2irP3zM;h&KrjyPTbHfk9>kCRdnj?M2!Sv!TqN8up z$d=#%OJ2FnjF98gk)-5=dDNPiu(q>6<&D_=d(ms11^8J?J#kSQU~p0Uah@BQG$mA? zy)&vy1voF|OO8h*ViV19`4KxY709TnnVqV23skrrTjjGcS+trGW=si93Nc5KMOdJM z%L0D`_IcK&*$qIxWSKB{uJxCdQugy(MFdLR{$7$~m!`t6Zdi;fzOw1^(eKwsku&x1vzVk(!8j~M%jw7gQyO*LcIL?*TZ8Z>g z^wE1~eVg2HK!E@COn{x?DQfNP_?4B=knto8^V*OX*T{#EoAgEl|DF5>Vs#GG#8JoQ zc6kEDGsq<965K`I_rQJ@ux51F+XlK15WhGfw}jY^t3%xr)bbL7p*ZAeaKt1}c4BH# z9VQA~WGUsbKJ|1l+K*qi5~X!1Zot)!9SPcayHq2~G|i9}t+g+$6U_&J{OoX}Qp7I7 z{ZW=qv*U#58@e;S?E;5+jzVM;yP8O!NqAJFQq_LVYe7{!;d=YO>2^=rCjXNC&ocl* z0<=YX-Fqg7b~X34F_cI1(*`bsb+tb|x$k@9p#}am>5L%Mj)Zs5ZlHLxP<9R@ABT~R zA%&Frj4OTwy)V#@8dww7k^G~KL8U152`lBGa$T|u{PCDTIflm5S*l*G}eb(K%)IA%L=XZ9y8Cf7b(li zU8D-Lrae7X{pTC6T;f}L`+|VV8~IHv-IqtO>h5svh`|KNLjr<3XSK-ca;QRQc(vGt z)kbX%VtvL>-PhI&5(a5&+}a~EJvniqU@N4i<3jCuLJUxhelc#@1SA$+oO3Ndm(cVV zx;M&VL3d{VM-~1hERI2J6otFoqb%^h@48v>dOi_l=#C?XjHy2|sD zRWEPc@Rs(`jw9uwtn-8-V`k9C6>*p9S!p)A_*50hg4AzV|KwQ#=^+2_>E?F<_$XtK zXvhFd79PsWTOq|<-)r_(jDgwtahiP~&PT9bPL4{Ln>mO-j_*TsOA82U=aK8-lp3H` zOcDEX8514xk5guSrJ{!m=Fc{m- z&HN7tgWJ2+UhOv{sp_4~6#IufJnxa&o`2yiAWtm&#o6hA z;HpX$D`S>d$TH0zPB16IFtjjeS;!5wE_Wt$KriN(_TTLT`5n=DVwl{MZNZ&maQRVW z^Ebx2lGP2UHp!SdM7o_LAZSnNT}*3ihkg7pgN7W&SgDT7xX{gf&aYc-_JGIfLM5L&{Aa6NocvPGgGH4{l9fINo{=S9@z zB)!s3GAp}14;RHwi;8yfT?}lBNlem?t@bI@JBZ0vtSANk4b<3{-+&j9&h6Tca}a~1 z(|K>t8XOz>AySdA01F)kK)%Cmv7*(B1^aG^2d-kxr>p-AbcBU!6dp3;5|X;V5_!x0 zL4|Hxw||Um1F#G_LLboc;f(5|Afkv;TN7ar_TbJ^99+NlsZL#WZ4A*a+jCNYi3S)? z9TmSL6x$lTr3t=3&@-!!vYrgjGF2Py58Ypyp-KQKrpFsULxdyO_y1e0ivRU>{_kcU dI%@aeXfj@(Qt$EpaJzlvmVxP?Rr=1+{{k@)Zl?eM diff --git a/docs/plugins/ui/img/alert_basic.png b/docs/plugins/ui/img/alert_basic.png index f78f2d7ac3724b3b195e1e0926dd545fcd050b58..447ff244334751684034b980571c8dfe5f1014e7 100644 GIT binary patch literal 9284 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 C@F*Do literal 7509 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 diff --git a/docs/plugins/ui/img/alert_input.png b/docs/plugins/ui/img/alert_input.png index 238617f4e561d05bc89a222b3dbfc750d6d2f5bd..14502e1c4e3120098c44c682c908b90759a93825 100644 GIT binary patch literal 6580 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 P44d8!BW?UOr-*+8{LQmM literal 4993 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 literal 7294 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 diff --git a/docs/plugins/ui/img/confirmation_advanced.png b/docs/plugins/ui/img/confirmation_advanced.png index 868d36f6294acfe78ed7922f82c5762960bc5dc9..66cbd7c14c27b565e122bc67594c9780dd36dd44 100644 GIT binary patch literal 7476 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 DTfTfh literal 5085 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 diff --git a/docs/plugins/ui/img/confirmation_basic.png b/docs/plugins/ui/img/confirmation_basic.png index 7fb1ae9fc652696ca75807ea286561efd8d3437e..55ff5e9d0c7b3eee54561ab637fb57e088c9e32d 100644 GIT binary patch literal 10046 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 XM7yim=Y?@!5myWuP-g>d| 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 diff --git a/docs/plugins/ui/img/toast.png b/docs/plugins/ui/img/toast.png index 4367688c9fa689f448333897497086a4102a73d7..7c80c754396c63c69b7ffdddb66aa1267a8ed53b 100644 GIT binary patch literal 4653 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 literal 3760 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 literal 2396 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 KMNUMnLSTZQzi)d0 literal 3174 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 M07*qoM6N<$f^tR(>i_@% diff --git a/docs/plugins/ui/img/toast_info.png b/docs/plugins/ui/img/toast_info.png index e1c4807caa97bd613e7ca7d81f648a0f887514bc..60223f112e156beaa5a713f7e13a31918c060f9d 100644 GIT binary patch literal 4799 zcmV;w5Px{c}YY;RCr$PT?v#F)w%wv_wL!cr>CcZ3MxQQ0)he}1pX-qiY{JFK21hIMxZkUL@@w} z0SFNJCqzI01D8F1Y`tyC<3Cd9SYII6M$f|74Yr=QB*)wr$dlac|G*D%iWR@V4?%Q76=Fg$sdgD zU%1>?XB9HO-lkF+XBhz*fo_U`=nKk!Auq2$q$q%>%IMOnZ@l7%NXs7ut)&PmZ3cJO z=XSzXdkpR62hs5LKf5UevRN_$|Dgy-t3Q)psRxvrl#tM5_k(Tv6VRG^!|!s!-S{m$ z^{4q7bWCgP4W%vvF2^ZU?syK~#&1))zFb*GKt|vqB0#}EBEP6gPie1yW>GQnraZ!y z)qL_A8V|3IYo%%Ut*~5qKOd{w^#YoYZ|HJwawq*4()&(D>Dou(Z7z?wjzVuj;hg30 zx7DL;^J2j7O}Z_z(>(f4o}^mOew_4qa>XD5>P$Nd=e~%RGdof9@vGeemd?gYGDddC zekEgfGIhj&AA&Wnmndk0ay^-%Hugc^TVIE_xeDc5mxNaPMCXzUu+Llyb%qsZ{&gR` zjU^p6qcmj0cI|J_d}1@2kF5*U?d)bsJC(X^eo!S4dxOS1I73H0eBjMGG8i6Z6^QfcQ;4; zos8`>|24SkPT}mDUv}7%1bE%SzoO}zwMmmdN%Q4u7Xg7}NOB>~5|Qzo6s0|o+=Ni<1 z@pm{5ycKr@)6A7-A02V5wfu9QRf9A6G&CJw2V>D(D75Kt*PUjG?{ii_q0K;H@e26b z8@WDZFSCdL0NEpd#DPZ&O4fhzF6zJjXUrbwtif|(nQ$Lpi)K<)Mn3YUJ_dd6P`0JL z<_M~GuHbf}i`Ft2xs!ecZFYZtk%_0N6ji%c!d?3fSLId9HWJQ~-7pQA2ZbgL?Nwi* zV*4KuXm5zQ9@(8$R1EW&pF(Xg!|!QB^NEdc?0*Y%p9*F_$LEx7_%#CFHsnoPh&0<+ zlx=#FU9j{%SHnE^XV7HYK`(xA)gDFF&Xo}uc^c0`smp>sZv+AX4;l`=3vWv`a>o4} zsx%Aec;&Wd_@{&`1$0$<6ZF)9sJ?}_X4D-AiwoBS~J_OWqs3GcWRM7zf_~O;#_Iu3Heok@}rAXbvj`)6kn@ zVnhb}IKEfv%zV&x*Ot;xQM3C+1UxNlPWXMNKDL$ahru=q&eI>o#4>2iSSLReasO!S zQB2CyT#n5CGmtaxZm839Bkm#LMT@O@%$>*_G#e^iX3X(KW4GzVMjqqZ?7k80HXeDO z?MqdK2ziBrMSdGk5~Xn7A0a3dol5sam+F1X8$4i3KX^E974r8r#@?`9^FL_(dNrJ9 zb|Bzu=O7-D$T)N!+zlnD`Q%T~WaJ}f!Y|NPaS)YTpN=8FE_WF6XDvlb$!;_q`w+$< z^H@5TZ(0m*Q&~j&(d4(ycnaE_BGl}82?~`SIpcqhmT&jMvG4UryOnC>U$YoWy$O!b z{t_ZP?VgebWwhP8?Ec6e{S!D(ZiyQl%N#HZxmP`irjwh|bo4`{_r01Y+=e6nM%{tG zfCez(Q~%{Z;I2Cn`n}=HcNqiw_0PfIUWd9v@31eLJK=tKnoCi(@kuCDIvzZmq*S^rRDb*`=)n@Yrc!4@+4_a>IV&S@WYP|v3&(*!gJL#R*Vk5u%8!;oWiY`! z<__p`2BUh%a!w=r+Z@Q~GnH|w+_4O;XZM2IBs;yWH5?nTMg@pz(z4B30$256I1ckUm zw!W4cWcI%nxsxA3%h^3>`072R^}34hVbk&Tj2GQQ>(m8k`er?k&&+`{VH|Q390ymS z@vDCz(bz59w3zbf(C3fl#j1AS>)ao5vndvmGWo5AL&RiWy+xfJc-Q-AIQju<_r4OB zyr$tlfEWm%@kspWKh5r0MRO7=2fAp7vcKPSb}8I-C%JvnVw4c%Flk$lm$V* zsNyqL0s>8P^xC7S5>0-(uIP88V$0HCeL)G4UzHT6L>|pJbE(eQ_s;+{q8YICw5j z{B1r&Pix#dsrdXIkzbWzL&2Qqp-#(zx7EReu>R0Hanpp+8u|ESTL8Ug0&5~T)&c<#c^5r$DvSZQUCRO><&nk|0Tx{8>-);6DD=b#ZHVM*czfY~sKd`RIwt zcSU|8Fa=x42csfMxVnR@Vpg7L@{9tvFXsuGz$4cU6=9W)(T!|l+1f$R~t zb&32W1<55)stplsh1)}ZJ^7|2`8|y#Nbh|$DmE>K%W>@7D!vF+yH=pB^iy_qNS+5} z|Amo1RoS0+^+MDh_;U!C==%{d2-OBClxlWIsIcoa>c^o~I1%}!+&0BFNHvsid@|$` z#*_U9`)HJ{ebFE10{I$*aE&r`@>(ZEG#$mT0cj5yH(}dCq6mji!!wc{@D>$H`PP3q; zWLMn0ZAY@7HilTn-^)Rk=962H(f?W)2Nj0`MBxU8li%$)4*TrqIOGrCpx%Yzg5*8I9LROm9cTL$8a>B`XuNh-1Z#djG1+JMDSgv>{%f3`C|P|!JPl_e zt}mQ>-ya3b!i%)Y$LDHB$-nMJz}48HUFNZO!8rU@2!aaEGasRP$MY$ZpMpjdRW}Z~ zF_=zCA=Sq_s3t$c@{TDTzPcVg7bA;Msi{A3!?#$h)zcC=NQBrgY=E^y^1+lbVp zfTB}WQ{3>ujT7oBCKNMM~Q;BF1d{?5j(QVr{rN08C?8df|s!8U%gwhQFXD-;DyaA#gJg=U??Im_T} zrfsxO!(Df(!_$aBwi!#H$;jovOtin9Oq+6@?+=0K{S)7xCGlIPm7f$&*}DG@xp>{p z#_np5V71yss54S}uqSKqjj&FBko(l(gFRQ=2FrwdxL)<{mpR`qm&*%*Zb^Qnn%xAI z-i+KS5Ay>>ls}hC@(2VU>>=_ib)eu$Dkb8PUUw_p4X1-DK%wLtLp$D-8Uyd=uiU<@ z(+7G|X%c;N~J6z%*h{ zOndHsH2Eb^L^^>d0gXHf^n{Tj_o2riz@+!NA^O`Poa6C1=RNMK&-6c^>N`*V4krLf z6$nc3BfJV_a3Wx3A;^3@`JEP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf3}s0~K~#8N?VSm5 zRP`Olf4iH#a%>XJNfHi`I~?V{!GhGO2cncisd5ZZI#Q>{j81Jk*6MhbnO56ctB9PU zMG+J^1S!a++{AFo(Lf;N&L-JpvsZuL|GtG~vu}@_o%a7>-emXfd;9;t-~V^N$E;@9 z$nhRha5|mjal6UwaVvWy5=l#<)o4kh)ly7MjIxJF7$HMWhl5OAMpJB$Nn}XrP8ywF zIYc6nv;-cPgBnWDlkMCNs=vICV)S~_Xf$3UY-q5PWzcMj@B5%~xI`jpO=|Ktk@e_m zG8l}cMGA@tC=E~|X**zVushhF*6nstT#tK{k0cUFTLHU+{jm|cMGYvCNZJ@0Qrkn9>gb74NwhhyhE^Y_Qa-uGQ&1E5ksuM<&v@g?3u^ zjaAtzdGX;?%1PGK((UDR;!3@;w{2+Z*aLD*^vlT|=*Yk8>CZdLmA&oDl8MRGCB-0g z3%VN#1@9sqjeubFpO3e8SBNbbI0xrOLb^pKHXo)K4Rwf9_i|auG1NWXKzF4X#3DvQ zr#tlG_-?5NWsjsac=N{@!noQCINJ9YX3_V1#VLDQo?v4jpyaS##zh&`BQioXV$_(_ zJ5FqBOza)2ylTt~pOw;+Yl_5HTH_L%@BOnIN~oyHr5xFq!V0H2Zo!J{bnZrjvNtr_ z^J{75TZQ!E=2B&kMACAUvHsROJXB$et|=Kd9re|M&0)#fBDz@OO>3I{FQTS<9W?IN88Fy>Aj^fYfwBK7WQ6#K50J831Su>L8| z(5_~hIm|*wF4xi8udQ@_HN8vYl<9}Vqd zCb!2!Tk>it-lV0m-OZ%cXy~i+Hu~GHiktH+V42{W4V+~hx>Qep-Q`W=15?7OgA(Y0 z0r6xp>8Oay0+a#=FW#PBsmUAX4ahN)gZ=0ADkp9GwwA{BFyp}x`rRib;#kaQB0KKg ze7(cEnj#*1GRydW{w#yntGeDziDsR+M*nma-~Av54Xi0j8k8Py?5v_Nvsc{G^Ei6*s>QxLw)>XPo>yG5$-!e0VRVV zN~)cl|JMlxozT-8U6GPv12C>$nMPqCTY2G~ZV$x>T^`uUL=Umzz!0(ZWu+X=Mi9t?@kt_m z{`g3>P`(L0<7f`oyE{+Ygu&oD@6C;)@jYTW18~wQUT7?G4cF7_`J6A$*u>nYD(O8^ zA1GxX9uGPbo54{Jhr-2@2C=mkytcf^HT2x3Qu>@dJ(Me0GY1VCESj57fS{jVUo0Z18gaZJdNy!u zNQ3{lt&D!pV*~=@`_+fV^v}aqA#5BQ!vmT5d|+nIU_&660;BJfZLoL83=z0jG!Xc21ck(@2K zcr0WHA0D#OXD5T-i^h0xhA{m7-+AXViqA!s^680cVQ4RJDHZY`!p;Dw$yrTDf{g)i z-B#AmNTZ;SutwMtH{F}_9Z>4p2s)pi=hbj7?xIIWB+^3FqRR12q)yUx^#dKVzIdUtLnz4oItk){PkY6pLTFYQHy##|7Eg5f_;q@ZwSP%=ab zf1rE`oC?lnIbxoZ`^1Y>QU{CkBN}dld}Kd1MINJ!xV2{pFGtQ89WwUU}f z1JZ987SeHm>&M)&_PBmEIY+7^KH%u!l%gf95h8Rq$B2qKjl_4fHb}D;tt_Hnth>Rr zQ4RHEkBgKk6o_Cm{$5BgZ7vl?FsVL+!vMH}xmpP*og>c}#_HfY+1w+cD29zA$7LAvEoKobm zlE8_X1I|GjQ_Efybrck+PsiwQZ=Ahh7agl;Gw$+2qHXt;1(ve<%wb8v23 zkd>qtsluiuIrQ4}bm95-o>xy@korKlFFle*8=uT(rAiW=*FX=Q$I636`O9M&LLuNW z(S(QwDBMR}=fM*%osmxK7iWtIixg=-8w3mw(PSgb3aQ)pp0OeYx>)KE^$e~FT|p>H zQ-M72Na5zEazxVsPGzN1%lNa7qYk3hlz|E2SjY$6OQe(jgpxOu9yRdV1z9wWqYOYd zvar%2qCFZ%!3Z_>X08Dt52TCl&F?5=hGtzb&Rn+(*_9J+@grs2muW7W%df;ZaE+VKEt_jTN} z9qdonF{|@)_|K8HD@VyuRY*FMg>Px{ZAnByRCr$PU3qj|)p`HD**DEdqmf11edE?#2AVw0HR6&)G9zNfN!D#1eIzGcT<`u z2q*~1K|o9-fCM0jBL5fh1cbNP14AJ|8u>*eG-|-8#Q4|GYEVXc-60T+K^03H0Kw&|;`BWo6G)h~5a{5JQWOLf z1STf}q6oo9@xPcPKV=0(!}yhbZH0vai+1`ZCveKB6a*#%0^y+yKt)BBNXK#$W?hCD zAa{(mKWTt*RvGlQB~Y7n+$`>oAl%ZA;0ZT8@1Bu+E2W--fP%oaKtS64iTt8L1L)KR zJyu&~Mfo=tLtkk{JP<*oeGrjW58p#qZG*0|2x^lK;no3kzipc;GHX%!y_JAQg^s6p$ihi*POT9^ZokY@^@Fw0 zRTQE12U`)nB+r%CR$Ed1#2SQKJ!t!<4@Z2G1UPvU18+5_>RyS-lsQDDT7d}2AxVL^ z%&1OtudgeSy{M`2l~^xw##Q;ZE4i=jKiWQ?Ar{ouymSg2_b!0@)x+@bZA-PKzNidZ zv_G{S34e6ddkW6FT9Mz@lTnO~6>vSY41I5&z`*ZL%V=@AO39zjLdoqj(ed0a1dnv* zZL5&KAXq0vWjQ1nPe&Ehg(r#0n%)8FczU61~^o6-M&$8)wN%VlUN&A1ji+sjs!7JzBK6TW?Iuq>;B%Ai4{ za}YiMae#$Jb+G}i$C{Avg}FYx$YiHjeoZ~pMlIsOD7+t>L*M3;5VAgBQoL?DZ0l#h zO>Y0*HWn-$_cua6)y91ZU-ZEJ^1+m#nchL;+;WtDc`i83DF}$U{cyi}1i@oT14sQf z)R(}2v>QdstD(|s5I*0J?q7V2SZ{C`4%F}BTN_}zbviUfdL%+I_ztwQl~-xiaBW<{ zZ90Ckld~!n-&qR%G&{OC?L(-!7o^9OteXyv-2{jtdt2_84`pB!?e;@$)^di1Vn4zq z<_@BG{S2tBdc=DC=zd{8!YuW<*I|7F~hiMtK zX6$#)$(X;GFU*=0VQyPphvM62Kw~px%pu_gy&8^t=E1zUl11_KIi~CR)~@%D=i%De z1f4UPQkTl$?pE$!p%=LIR1DNn9p zqtX7uZ8^zL@xGy^7>@fFVsOVr`1V{vJP<|P9bgg_-BgW8w-5bqoPf66jN)}O5IWb# zfM=7R3`N=37b9@28-v@=!@8=DUB|9Xdl0#hDHvvxpZZVQM(^v#*vJ&$HWPtkUFd!J zP)5H6oeC8X-vpIKhk@TGJt6zubNH)9(xS}nx31a>+u8>B4|e1f$E;tdN6DYfM(|)K zJRi2ed}Aewnrc{x?ETGQ&;l-dpb_4W&Lez&AocIQ*N-y>)c3eI0?!|slNfzzCSvXY zI-c4Nl}X12lJpnv&WrpEx~{Lbu~155pfMG%n~6x9m)%ENyiyzg!A^KTYJs(>2BsTa z@a=7b`#(P!Mt;JBj1-Z#?|+X2agn_~`u~n+cMS^{iL{nw)fjl|6dNI`8~29M@%&zB zOHHtUX%=)64`u^((uN8jg_nMftJ#N@To-y-J+(D&Pu zFwQQ6ZEZap;*Mu`C&#&Q1=K})4E(+svAzKJLpQ|=iCh^5%dCZ_)WmC*3K>}X%1*S? z59{h$*zcN?Om)9^2ByXeoUWT5R z4sZtuKz(&FJnx-F@BbXlAWP}}3t{_Q?TDVkNNzuiKAZOPfT?hdW6^UgNF{yeC)cR- zFXp57)g$olYh!E58I9QREI>B->As0r0-ZnGovg1>@lKKLG4MmPt`V7RH#emE$sS8u zzlmI~$5--wv*SeRniz=j0+ycVd}t}OW#&{Y=lIGZULayLfkc3^8#|HkMUq%&^{4E? z#W2*{xsDi(Co%Fz(DtKke1G#zRUALkqVs;(!nYs;LJKw+9n4d7zl$+7<)Q%KZC3nw3(XuKYgKN55+f=fTft&DiJGIW z-7Dtymrtt`<$QOKtaj})x8)>%)e~zVs0G9ZLM#Rjyn67CL#?AOl0LsT4xw5}xu|XsxRVuJ0~~rr0yQ6P@X)KHAA`YwB}) zcYSXh&k%B{5_vnNch3bKHI4NI;6Ky}&pT&QB+VD|b4WG4l#K@Mw7MEwhQ}qPhAE67 zC7gEg>>^=P)HIbt)$~-d94#YzE~PmPo^)pz4C~GH9ESG1a)?7q%597U`%+ zA?|2vHy`<3k2mpr%M~Am@`gH5ZjQhDhqod=5FF;VQ>;|^coPqT(hvQcPv)HX%I~jY z_w3U5-^+QO{&=OxFA>3d%QP5jY|vI(`3q!SFCJibH@#$&pLRCOjZASz=-co$++tbQ!oOzK8MW3%77x{zDz3BPH{=68Go9MWAJ_M~A-fb5+9H1gC z8u~Zweu2ZC92$`(K#TfXlAo~ae0CS>26BpFmIKz+b&NHIT#=5!lt+_~{H8`1%D%b? z-mT|gxv3h#h}NnJb3H z3{=D7-u;$ zbO0JJeJzSY2J)~x@1I4a)eHNbvmuzYDHonJ4id>EA&#(+!ncw;XQTLw(-FQfkTE~B zlNT+Y$|q2LdoQuT=lt3Yh718<#X@sj3OS7}AKrH{!!+S;Wo0bvq4(SyNl7eJXb64t5zWJEiDwiB^V|ESay z%B!b}f-xC$j8Q)<5oo5WFGRVvZDI$*Kq9F_77VT9~=^=@;s2iSy{vJ z3%RacoAwnD*L8R;e5rY;Jo%||V zF_p0kp6p>)pVZ;;lAroUhLA+Q>{K81ncP;&#*lhW3z&=+rTR$dQ)$$Q4Tj-)rx^q9 zoE;{dN@+nugPk=KDb**XOUc73e{czBFA{?hHhj`G1CjchOV}`^zeGl%PWd;MKxNUU z3^B#ojtz66ahQ4KMcTbA2um5M>{K5aJAJj4vnu(HEt?iqu+S)_NIQPM8__QRh^aop zhQ>pwRx-?k+b_U4ryOD^nsoa|S-a#R(%4w^6-5qvNRuj<{LacM5f=SuyiZ-H*sOA6 z6QX>)cVEujclym};+)@E$|;-d)Sv8!DiuF91hP}8pIS%qJeYQVN|TXdFNJs$t&bD6 zKZ4UaMHDIKD&WPQqSdu1yKgAJIl_xQwl7XY>0NVq>^-j>#NbC4CMpg}zw#h35y?+G zAI0yK6`_!fQgM_&SBiWDk}vi+r-+~rdFbW2{?hF!HZTAB&?~*cC?c0U2vh!2EwH;x z2S-S_qS&?Ph5e(x&?CRwO3iDDz(gd!%Bn{t9aeH$SWoEr<$=rR9IhoepXFzTqeJ9Z z0iszyrcZd$>#!y3lfp@M>Hpm+^uL)q?e|&6P3gOWz-Ji&%8UrU@DTa==eX1mh7KEy zWngsDPh&N3)0j7ec%QsiFURsMrHz7sg231jAYqYz$b;Q}{(vWdB03Q!?t{2q*}Q4FNF_fe;<~bhotg5AFRB^_p?H z|6}Wt(n>)B=0U;gdQ%>6qf=4aaTPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf4B$ybK~#8N?VSm9 zROJ=N@605b>_8F{5<`LsArQi%kg$bK0*I&L))o=>R$QvKE_iCSEk`}>*4p-Hv05ut z)FPsY9yUQX1%x0ZKmsH{5=cTqLiTMk)BC^kCJf`ONlbcrz8~kEnfK6~C3Pn$%*Xc>8*OQ;0pSFcaM97e-y`2I^4I*Pk0{O-F zBb}c?+eM*J^aK`D2boH1sr9>JYRfGrKYxGH>2y{RwzaiV@Z3}inv$gLu23j`OqzEV zQPcVY3J5Tg9w{gypc0@$(R)B|&>i%rH=8>sFe6d>NTE>l7SJ8^$09UK4X98kdKc&p z`qPueq9$P!iatPe$NJM_W>le2^bOFTUVE=lDEbI}cj91j_#he`kthq^D-;Uffc|vp zW5!uxo}F*q;sv4pfpq|{kX+!A&`sCzpYG`lKwki|~S5*9N4JKx^H7`K4 zdvC^rbZg4=9|#Z(3hFPPVILJ46$&q4{drvzLR8DL7CRN6BiIM~_Jk0F{Q_uUV7RuX z__4qkW32mvuD1REVjG6&n7E~(*{Ry9b8MmtFkE=()Ex(_Pf-j<#hI}qX>G|qYBQU( zPcCNZxs%#a7kFgU)imppQM9+JklM{1 z+E&+$=pRo@M$hNI^`qSCVr{G9r3tstjmcS*fBuY=6un7T+rBLFQa<)p5#hIIk7`@{ zmWR@RLW|g*t6LlBbYr!))jf@06?hj3oz;J?Ku!4Yu6Jqqv8{3pj`aqlvRG^c8vH53 z7^_ta7dK4)jf%!QG84+AEQ#`ACtGI-7DhiD{db)gH~lfO0zE+ zt!?RfoV5`bGJq072U3WiQQP7jUWxFAODAgY+yeo=cSVF4Kep#RDsOV_8A}__(cL?i(QRA*Mg_HJw5{%0SNc6&xA7%zccr#Pq3Ag( zo9n3A)J8R}joKFP@R(mhQ1;4hG_^Way1f8j;WWV(IT78kt+1|K*1JN4F^v8(^&Uxa zOB<_bS^g$E!09Q{SpYF7vIkl`Je$%643=#r4OR5c(Ji$9+zD9+6QWb-=Al#RyUId| z)Y+WME=Zap-`m>JF8enjQp@qCp3P(_Xy&u)JHPNT1_Rz;CcG1-d<7py) z=aKWL>B{)A6c!M~?@Q^8!yD*SL#6f&R_yzS-)rtD&*$^lKsO~%r71C~wEXy1+H&R) z-9K_34dH#!ceFV#{xTXAY|Rjg`8(e#*evIc)CWI<@z)zDlT&x3?4O_7M`1kfGvY>) zj{j{fJ4}B$^krv1(Wh+o+&GUtmB;9{yf3JUjmD9mveUgbF_Xdrf~l;jhTc8)HGNZ2 zpnYn^)p%c%m?0@*|9}ws>*PD>%aZ*xJvL2lNk#b34)NX72c^kpH*uPqJ|KZ!&09<32PV^ew0xKVVrxt7Iq zoG*SfT@jlupA8O;lm#qeaiQk>j0N&#Ne-DT9TdVfr9I*PL2^8d1nKOeq0?9p7W(JW z&9two$m!%jgfWDIc>C97hr}Q{$SfBvl~du!z)-q8DoHYh{MyrWq^6Wc@dcR{J3>49 z0{5oPq166yw6f?M7F(XwvcE{3MH^2alplJ+@U9wsxzy39jSkh6hy!ahwa|x!J82`2 zG5UUkmSG_Ena9E($s&M}!UJOrrm?}p$<((uOFt$>59{nFjCl9iV_dVJq^y_`bbs1B z`7V3lOct_Xl{THD*AK5F0}K7W5p!j1?Qu2UCF~^87l`B(3$vDA+d51%l*|aG+oynE{Mh9N}Ks+J=M4MM#A}Kf0X9z8gjSJBUku`zq)mu`g zabN1CE%5gv8{|B4_~MuG{!N^Pz#-Vcw%>D~U&;Mkyz}|CMtU`OExmByQ&|tt`*&Us zYd^QizW5wsfm3i~GDl@ZRR|fLJ%>Gi2!F@uhy-m9E3U@-ZH^!fY|vF~s4pK}BMt%+ zXMQ}+c&G#8kQ5#xBC^j?fV;M*#0+QmXQp=ww$KNKJ6QaCo!*N^d-IN_62?(^B4fvLn>GUxd%+F^ol9b665CR-Xe`6^9k<;4MvzO4l>~$T1 z7k+i(?X-Nx19V^7T=9DJYy73=>hp9vEL3XAHNc%#eOw z$!Qu=N%Y?yU&cG9>V!B5MD4Mh-ov;tgYJmCw)=5<3Ip%TOen@5!a`&QIRBc~1{%QE z9_R0BoV~RX8%S5X@?XPv6d^no>OdRzLWBrC39y3G$nMmG-m-^N)jPJmPWSJ8OAG|! zLCWL~^#8hzFVa&vE3I|i;IWdX*t0NsibSc`53iR=9i+rv0Rq9q(EJV0cP_u;z5=9S zh!7Cf433&G0<14co-C=(L+qs&ZvL}G(Vild1qdNJ^V(=<$?oNy{k(qDOSFQck3GJO zH=GJ?F~xB$huZ8si)p7;=Q-l8ZA4Q?C+H0rd!xaR>&zf+i&dD-Y}bgc?#9_08?o_4 zagGEhU-2p(U3FrY_Rfk;h~A{2>)G&ngI{ueg~5UMLJEo05h;@^VB`<7x5dQE_VOcA zgm;+D6lAzK+Q2iz3Bhy2fYP;z2w%X(tKmq1C;(%H$Y8Kfjawk^(Ql-o|K_w7lMbjA z;rWf6PQr;{vIqM|b>qe~>dxpOYnpu5@N97`$7;)D-JXK;XJk@kI@hKEsgNQJRfp%@t-X3>t7jqPgGKNdtjC%5CNt4{(!ovC5M29|Nq6)VY(5D+N zogh*B7zYQ8v8!?RWFz)%fSb8~d?E8@nE>YZNp~Cud%HmoG=Y(0o3a(eW z3L*j0yiHgAK~k;*d|sH%bYw;0c8*#n#89y>#s`8$`eu*2@rIai4|nCPM`=OQWZAa) zOrDGbqWwOu5uM?#?KNBj7V&sMd@HW_jf@#4>zr}8rc}~Tq>gV)xl860Hl02wVp=`> zF}i2?9J$u-AKy-SHN`H+*`19zwgE6#fk_=q0Q!P1ee^g>%yXU};6~Jg=zQVs9dGtZ zDry5>ZX6feNR_=Uj^PoL!lPxT&hfT_4eT={Y@iH$cT+;tAb9c!vy|T8>;BHbjb+q5 zn1H}+tT!Oqqz#Ctll7G@$Hm=v<9G-NGl~HFK9{jb#QN~Ae@R{D3U_TII$=`Go9jC& zB0=h4+jpQ3V|hIBG>hZ+x*KPAHsaWZuT(s~#(NP02=Px7Z9q{m&ZR$+{DqPbQ z5%wgA_P7@s5g1A-0a4*TAqEjSv?JJt&#dq-&IM>o3w=7D% ze4eqVspWbYv!lz8ZdC$wf=`jq5ky8?O^B342~VN$4WA>SBM=>CjIbyHDimF#TOw2_ z6x~OOP@(8!^rR#CLlp{zqIVJ9vHtY9>)&3|yT7JZC=?{RgZ_BYQ}b@$p88fO6x|29 zgZ}jRV}&gT%cx;n*PqBxC=|W{y+L=-pCRs&#HILcWJ`WInJVi^A7UhZm{Am}P$+s1 z)PU_LtEqn7A!^!DME?H%Tn`#ZH!d^FV!?0G%x3v(y?B-1L|J_J4@ngYg=aY0Ne##W h4u7Q=uR5Kc{tJ@OPx`yGcYrRCr$PU1@k!MY?|LES-?Vumsr>c4Qj_84wr;SyT)lC*OA_^*tARw{`Bq7OJ>dsfklXQ1FNq2}$6082e zlRkY;)m!y`%lp--W>u?J=O{#Dj6+iZT?JGXVBk;{Kv7sB?k2w?5s(N3gMe*wST?{p z6aN|(U|Ph!&>IVd{Pc)2VH~>3psArhOnyTmAQAX|5HKx{ER!K43*ZRO0S85Xm-OK} z0}JlHzt0HeT_pk%fqW6*9LO+$tCcHY84|aWRW8%u)#7;hs9-J+d`-o& zz*|#2ICY+*_cTLXv}vjbG0{NxNm)W%2&Kiv0JDbbcz>UTmG9*cv7pIx$$#bokhCat z@;}f~#k931w(gVU4`sgS+TWWbL%XVIe>21AB__^Z3a)nrt(Rc#63n=!Jfxy(1%_cS zTtB1t=Xwld`>IIZVrQ?{=tyA2Xbm2XVdy*~D4baB8gV=_JQyefU-Rrh4c*(QNSvF6 zecw4R7Pf7|@X~OPhy(RR0s$gt_ika&zZ23HgBh;6OaE`=zCN8HH+!Jy*6G)!|Dp|ot%Xezu0(VvPT>)(07IbQvTnV5{9pi+8FT9;H)B9 zu4Z+8HyWh;U<<2Cmi+c63|sfw=+a6BMJq?oa7_4@fp1R&mC6FkM(g-B)tLx7Y-D(M z4GA4oM3rGky~?qEyM={so4MX{8WOJ{v8#q>*P6nTHjD!%KB%Knb;l@vbAn^~TIV_b z?Y71YqwZHxyNUuj$KL1|$p%iH&wW4Y z_kg=J4Cthy!VL^pGdSM=(#Fj7hR{=%j`WBxk*;wm4VW`jNAr3Lo?L3+i|;w^Z_6+! zUPHACOjKSDpRh&r<&Dvgzfg6D;ZHRg42xs^4jZS=aXix1dFIJ;9OM6G;J~pQTf4hX3GFo`c2N)$t@z9# z;YDX+jOneT)1MilBXWP9*V^6iv5BRlJg8aOmm`}$vxL?XY81j6)r;k7Ax_`v)`nr) zKo4I1(8TNwmKgu*lXS6ppwDl)|AYrr^lqnN>0!=Jo}0>PPc`7I9_;6N4Y456zc7H9zzAzt5UiE+69 zr@oQ_T$H5a!WH1<_e@m3kzrUj4X4i8NStRNx(pKrGPWWU_xmWt#;|)-G^noN*EEi0 z?^r0~VHna`!4Ic62G2EcV|31Uwx`(Gu+u`1+Z1$auHv1~ZA@8h<|02ufMleiBN<-& zUlSxQkzpZ&Gh%^(!$0{NJtA$FRtl2ewQ=gaEv}_8JiXjNl?n`x-lL&@9K-arCN8FN zocM*K=U-KU(?9>m#GAWq5p}K@?ZLUrL_h=62I@ZK@6e3atB!-mZ7lh>h1QJ}JkUWA zhIse_XPiq$>4>=jNPgGC=?hMuZ;DmnlFPf-lw-$MaGZoN@@oxovd)p8iTEl;_0aI? zw>H*(V4-6(XAa-n=io(i_;i9M92sd_zFku{~`#!NGJisMgyy02jZ zk1fa&*J~PwWd(jO+W)g*-Bk4JsATt($nV{6!Y+A?2ZoV5RCGVPlI|>E_dV=+!!*QJ zM0PGWb%2I;O%!ox!{u}?q5w*@sQLHj`5`Kr)mHH63nntNxWI_!YvAlGasO_u8JV+{Kz|c8r4%p*H(%cLz~75M)lML4y(60{iC#Y;Rqc&5AZyz82*HF=a3?pL36T1WJHY| zT8E|#e}Boq;gbMe=T@Yuly}xH8C()I3tGGR<^1%lVD$%981g@UpNheqHBlN{w>`%j zuAkso!Gsw(M5pj|^!*x^ZZ?I*EvSW(^XEtY`mw-*5jtX`8O~qk*ngBGd5amaOz2Pk z@qH;`QITl?N6v6;`@+JS53GQOgFFtU7wwuVB4nnLDTStP3K2+n%F9Aiszl|=8_VV1 zV}1N*J6px2MZ73ULrfIIgq3DC!3f)`6@W3lHIWK9+qD_oaFjfRw}GVV11%(PviTcT zcmBLFJ9ftQAwPNYzjX+lOD=fR@DXz9eiZEx@o4i2r5rm_Y^>U5W*fA;1V8#aDc@w+ zl6t7Z7jo}l7rDQ{O8i0!##(54Mx8^6tPaGzv`rx z?VB<@(#1&^Bf=d6;ik9+t=+uHpZtUdisFMNf5W=5Jd_$gS*b10g^BR{zA0HgSl-p# z8N{|PeZ%U_({)sfQP62@W_Es+mk}r`^1DQM=q?S7YcSNU<{UvbaixLnDfx%}p6 zR0T0=RARzoeD$QP0^QaXrc3`Bp{XMY=&St#t#2KJ8V3b)BjVM^5KN zGjz6s*i?M@8{s+KOf%fhKwkk4|(RI^H)lp`nJ#U!g-P3t!-B> z&%kYlCzl)9DPf?nziAx>Pb@Kza>QA;-p?h^{CkJ}cQ#Y9#Yhr?X^v^kwW|P&9{1qq zi#%Jb&Ts7&8Tmsg^|fipuy~{g`wlw-l7CBR?}V#v?&$sbs;6`i_z%s>%-0*#kE77n z*)+89EmMTC8+Y-5b=&;HeiCa2$2%g+<~^1mMtlo3TOji8n>YEt{N5I#8HGCTP{rJl5O?N+EplUbmnWs5gW^>oWJ{K^*MSzftwUVJ8eFHnGNbI7D5*}T*?>ig4+p5{QT_`y}VMZR3%0z?X6;v$i zoXwu{gHztBQl4Sn@~WItDmkQCiJCABu24sPZC;n*xxtPg>>6Uqvq=vjgG%lDQ(Wj) zR3fG3U+Saukg5z+Rmp4H@*TG*82>;{i8N`Uf#YZMFZGdFIdh0EO05*Zz4?hH1jn?i zPS{`2+NB6_#vol7cG5{++iu~NZC2>ykF6HV%SRPVemB>D`~NHfeqq|oA)3gm?s_^C z=dTpz4)QzK8v+0Q6W9Cs1wD^EKb6Wzv3FCvg1#d^cMxEeD--z<)Qdg4=X*qrl|mdd zME-kp;E7(EsN1$3?JE?@$tb=E6i4!t=c5#|a#@B^y)^7P;MC7$3myUSVh@o&GMpnK ztl%SjC={RakngUh;2-B)Iq~HzY~B-`P#EgH<@H66Kyf5Ly)?Fbw2qpU7(O{@WAZ8^ zTbwO=1WM-}(=%;{{EEU+K2izl2rr5fC>Jg`QSb$gw16K@+qje#>NiU#_;OSdf&Uf) zwhdfJ{f+$8iHI~xu_KRke_ypQCUnjiGW0)bRuv$-4@%{#nIi~p5F=oA;bUDIqz~*e{ckx zaNh+X0QqUt0KIw{%9h_hIHq#=5`kimK&HWQDUGeIcxfHwYw^1@HCAHD3LMBopK zfMrphZ##K@LF5-10po}Yr&C9y2Ji=6GjiCa00H`e4hr|(w^4&4zgq#IlU-=<|F!<0 zM=8Kj4nZPNVi2I8;i5xf=dPU2eg?q3F}->j?qSeX=QsZ7*L~?R(kPUe^&&f30ui81I>c=v rJ8jdY)3Qm)r!yyg!}|QaK7IQCW+!1{D;=`700000NkvXXu0mjf5_jQQ literal 2911 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 JPDHLkV1o6LfJOiS diff --git a/docs/themes/introduction/img/developer_settings.png b/docs/themes/introduction/img/developer_settings.png index 94b0d86b5ae921ddf1945f78667e52ad439991ee..6bfaa6c388f89638d4c4226c6307cc38625d8f95 100644 GIT binary patch literal 63616 zcmeFZg;!PGyFaQ3QqnCc-CfctCEYD04Vwn(?vN5hy1N?*rNf{lHyzT_c_-(5-&fAK zzkBZ=aPAnWLzKPOo^!6}c|Ntml@z2{IHm#SEu!zNb5>D~Uqh z>yWCrM~HvF{L;}OIi2-bilfgk$sYgvCFuwA;fX)2wBJ8pofQa5(3vED%V!UM_z@g) z-~V_qeGJIf~rE%$7?SGGTvOUpPuG?5;HiUbAdHJz?Wi&ss1jX0a_jMZg1m&tk zIA->{laKw0bXa=&^XNp^Nao)@`5!M$l#;n9w7Tvttt2c!uc6Q>Uaxa9*PZE@@nTio zI?3Om?d3~LO9;=r{L6KDR=UHnsIRD>m8caLY`eL-_6~hu0hfreGjqZpR7@A5vOiX+ zSmkr0GuLtVs9dLBw8nJc^`!4|w}W2WIhxf(Np!9GcjKN2v+bsS)@GlZ=j-3nqj~HX ziky6Jn@NsV2Xgt8d>1q?g z3WLuPoR*_G65;XE83Hd|_ZNZ}eHV+d%oQ^PdOmWMKHGVBc}#b-K2qA9jlvh!o9c+f{Ge};}mi>1gWhn1zxpA=1wYwQv!8{acY!KHnoNc)$GL+PpF;=Zu#b~~zzR7LBLjLB*e&M)gwwPp7ON;T+7mp^7 zKLw8ipAoQUi3aw{!jcFyk)n|Zh#W3c#WCq}e-iLOV$fusLbSel=k4WnaC0V1&dCYO zVg4;BEsbz)PVYUZrOJ4bGS=hAiq374tmeZhKSiLgLc+st8|@d3#|lt*9aj~xV9u~V z^4Mq3@Vf5cf6EjO&5`VQ_3cyhxZF^QI)hN?;jmEr-&1zW0uh!ttSfpmlw7{FvlFCU z`?hn4Ax82rl~M-t{Ia3z_f#dD)4DUx1y=QB!3c|V9NFXb;lsd$goGZxI)uVz1iO>% z`h&F(hR+c=w@MKdF;>ZQB=sUXlW2=F7a6JE=3_Hzp>tVDul{*C)2FZ zd-~JfiScNIag+_+$^bW|q2uPsLNie&@QU)Yv*a>Y>U{tiW$t1%lg9!ehJ zg}mvgxLF-grR8QZfHm%oGDLZVN2j8O_bYj`p%}qM4Q{VDnvi^Cbu?eDKaGdfb^rEB z$6fnZ5$K@(7hchTbNW&5_2I2pHlJTl{}vMovN%CcZZ2yQ5>)4%X#%NO5)R%1i=X5v z0v-XEy1B1L$oO7$q~J7}4JJxn9O0<>loq$C6|b(35Vm+}%Mafi_U)gq#Ol+kmv9ay zF;srT6SZKD)x7_F6Xf0g{@+n@B1hqO8}V2&O53MD=Dhi&XfubVN{58`Gnr`e>TF*M zeHxF&pu5IQ?iti-`RYqBa!Y@8Gd5g!qFhTTwk~-Sxe}F?9RpUl6^m|z8ls)1Cf*6V zQp3*K)0a&bM{D9q^b;67c6vBVpB+}7p6<;Pzo4S1nKHUQKcw(PilzByL#v*^uo$$3 z)!@X#F!;-B&yHt{(-6Hp^0Czl$E0F4`l5xSmT2=>JJw8(oC?Ck^k^(-eWmY~-gq`g zQZDaxs!BeRz`NrgWfo(6*a?T#Z9@=63z9=lrktx&k^(vgI^;`uL`;C30NIwJ)>vB<1e8| zgyAV!btn1H-gqs*=1@R-95I^N#hHsM^;?`Zt&@7A2=XWOFD@H;FaF@YhKW#%2msZm zUhd-;Jj1*maN8>9zG6DR5>|OHCZ{Z;3v1`Bihaz~nEc!Nx|MM?-pdpZ&)h7M^#{vO zd1cl$9Pl61RInwWgUDfdMUmJ;0!uYHJT^<{rxk~ z)O!~a{wWDwuCSouMiX!p6sxIgkAeQdP-i)Yy74WY$679mk$ueS17~mq4#UdMud%pv z0@uB{>>Sj3gi4vI#2u5V&F!+pXdNPf1MH|&7zMvjXywd0B=zr}PNA=Oh z^1ZeiT!jr5t~&LMF&7>lUj3gyn|)VMACqbzx7XT9-x;ZVu3@c~QW<%3J8yRO;CER6 zvwG7g{>NJ!Z}#+rgMvS+`}Yy@JaemK=jNQ54H`IAkH4dr%t#&5G z8s|1r3ANcUvm|6wR76W_MC4eI>`LscpG3Q{sL#UzpG{+Ti9vY|oLK@$)G)WvWDfMQ zEGm|3LGlIrY!Csvg9`GaTC<@T9(%E*PVd|6)S2zq3sJY%e^^1WidycGb4+7xZRYxc z{-17t-i9ch?6*2UxDG!VF@Pr6Z%p&+?sRqFY?fW?@<*VTpUBmwAJJ@-O-v{ z%Q39(_K${r_A|C{LC@Q&i`=IT2zsi!VNB}{7zz4R?YAu{Gvu!ukT{qdd^TTD!&RKB z7!CEYM5Xqhn$<+7N;uS`Id9IA`F=n%m6p&vhCwn z9;YFK`6DU<{y{51^g@NDg$Tp5RLA~ptRgVnSXrI*1UP7v|J-w6t^qHq1oc5RFea7x zcck%ywV@XAx8|THk^ZMEgZ2y>b5`dKQCs)Jrh_>B+7D*xt(rjGKl2cH6{r)Li2v0~ z_i*or?^Kog2(DtJ$erwOX^ZRJ5b=XKb2`AhdiYLnI36SEr70hZJouRY-~AuK?QKA* zPTxOxr_Q%9*iGEI%l;2PX6BQ}NORx2whA@lq;2XS;9C0O6t ziTd=i=Edjlcn2~ca4l5|zpVJtG$P4MY8zZ2}uA{KUq<*~mm z-HufDZ-p!gtd69?2g0NEgrKAumwhb@d$1eOG4eQ0ZO24f{im4a6S7qgWlO)WR4P$J1S2oJ)5f>H zJQ-CRt3;S7>em7fK9rC(3<(KIky7(V=8cJ=AuPd`I;rdP1-@3hxwhbAp)K<1i~Z=d z{_TCM@&o%vNLUn&t}XCieQNfHWGG!EWjNvbQ{XR&G9vw zkcZ87=9$ghxe(1%BEmw;3D1dcFjCU^9gpn{J{WbSM)PDQkoW-(p_ENT;CMUyW#^X@ z%1(nMbp3lKS~{PL$kG?X5+Om~TOvYko9=_9TxS<;E2m#IIQRnYk9^LTJl#D!Uhwkb z^Sj-~_&*6Hqot*7@qu3ay~7T)F=#L3wJGH?^iF<_jbVL-KV#dx>yguBb?Z_I3JzW> zWkJqSC@J7B>wn)E~I)+r(AHc3$(*aCc{T6IgBHpmc@>#k=owDhvCZ`S5$qN10)q#X; zmHY_zLvnOM&r=QMH`Xwkv1~>%ld78!^gNcSlYhmwGfn-MAatXW1;Z(@ljEgjqKb->uO{G>ni7&A* zfo;&y1jjr%hiYV9iAH&u#4b2%Y!*Mz!4Xiy7`i+m+#>$~;EAeOgLvq-&B=1)qqU(( zqpz=wM?Th<1m0Yph=Rel%4*_yeQN-he`$TQ%Wv0ui!v~D;`6&E>KsotIn+uc&pk!i z&h|X3mh|Cofq;6>tL; zJ$91J*_G7z7xIa~kfw?xJ+F5$WJnl?l~HC@msn-isZlu_Yg|n1R9y3A_1O8Q?^(5S zCit^KVw8vxN$&;$+)Gz%ru`ydC}I`+N`6eKsG0M*cQ$A%(iEd;61D>gRN~t*ab*4x zjB-f5gGr@LI68HqWDNfj0Ov%Ao5*@{tu$es`fbih5p%K^_%Kseu$sc~XGd!cvQUFI zcSICIZniCC)n%?47)@L^8Rv;U8e-Gng)|;}$nhqdenzFk*GUy@8;qt{Qg|&})loK| z+h%Td(|$iN!W5Zq8TzKjfJ5UOvl8!3{cjWSr^TW@Q>6kFfnxeTF$>AllYNYA=0NOV z##G3~AeT!N7|A=DBOzNy6SQYC{A{cT&AY9%0$%4z`LqDS;O~?uwYjq;RY11KEpgJL zZ6X2?W>Pr{MNb!!B;S61ccK(I{qz}r)O>4sXmL5Bo*W&LsA#29tE+yU{o*&{wD@?k z_htk9$ttyPQI3C45$ZPBtSq$tBnc_|cWi(_u zIf}&{9VOB2L80KXQj>}y`sJ`YCyY_|sZ9oh2-MKfx^?^RYe8*k0JHa1ZW{y_*6bJ0Hxr@k@4h!ulGS+G8;bfLn z8OmC@4+=$k%{hZoN$L*qEv#mPYGIv;2zKCrjR#bL^OrJ5{hGWX{*tV@B_5VBhfV(D zxNNs9Y@CIq$wZ6UKMJ7;d+jKl8L zm_@z^XthkYkp$oj%}i8g%{_Q*dNp(o^UI#WoC@%|DG>7C|K3kz{&x`~0`~TaH`#4= zt*l#p-|I`WA=xn8Zd-ewuTpr;3hX|>r73bcWSKtQnLZ)}Q0MlTys3ssE0$zl4JmLZ zhiq0>z~>sDkmok!XKvrCKD*kDTRhv|h!l=8{X2I31va=K;E zc?|U2-}Nf%_Pr|X|6pqf4^Kh6NtGdl=y#VJ>b|pY-yn-LxA|ke`ESn^fypESQ?%kY zsvY#d7ZE4o4A8=>P?GOd|JEe{Ay)4pgd?+2=-&(QgUu25gW=&jc4vO@d#NHnTohTPv}q&yhFP=aaHs;>Om zU`uE^l#EkRQGxL6SvTkptnZGsVBz4r9n)`#_&EXhHP`A!DjxFehIamY3L8ZT8fl5w zB>-+w_-vT7jr-TMwrSR@CLHJZy*_r_ILy~n?@o980gk_?)Yw9#w~1M^NE__tLkKwD zYL~fn`rS&W^Wo?;+7X)U5^7@Wx;EI(J_j&c@)NHEWb=m+sGQ1E$BM%0B4Y*e;9Bqj zyRcaOHZ4EG#8?2SHCr5>LNWrorQjYefC<#3KhCJh=jPJaIL)Es%h#_HwcDNkfhl}0 z&q;*5&NGjP)N+^M=?Z$A^4U!FKGa+HsPJb#d*&JhdrJYMaPpf6X@9m6P+abQ%}yIj zfKo2fJu^S)h{R*b(QiHFcClS(dkI)Y+Ux7Lv(9bxfgic7BjTy#vMk5eCsA)!eRw9^ zK*h5ScOWy~fpYxH~#z1{qgoe-V7cVl$l zZoGd8v(T^n93S#O9EuP?13YJleygj|coCb%mF2d_o01L{FCtqoFw9aN@UX|hO6Kjy-tT6#)9Z{_?R@!WwknQy*+r#{5~uM z<+n-iGhqNDX6V0~4JAW6{hw&$@@Ozz-aQ8FiP%6qm2#!Q6J5m%(-@A4vlRD(6!t3F zq`~ux4Zajsqa4xk&5jsq@7GW7@>fiTDnH8q{EQk^Dd&mRWUTmsIlbDrN7iPpNrneI z$9f}?F5%$ZK_rL(Pww`1dg>G1Ar{uk&$*#NaKa8(2e8rtND4CGC%Zq^|DM+CDABBp z;I`E<0sYPD?XoH@7+K0|JtkAw09v|UU>qj;`(y^wBjU>|LRtSX)obC&wgZW6}^E+V*pX+n?!{y+X?2(Ua=A9Y^6PL$Z!8wwV zog*VCJa%)P=Z9GD`RXM!pBoP*ZcVp)xAK{T*||TNiBPA(CYW0OdA94W4#swJT8RXS zK^ua^w@)t*0N5ZBa7Qro)rX~!iqRNLR9St6g^8Jy!&`94{1c7tNH?BR1|1#U4-7mN zB!ib|uU@{I@jQUOK*FIfQh9Y;_!OMokP3Z%3h&Ef_mgcLz#vBe3jIxY*v}Sc%q_Y1 zKdSFD6PkTQ5vrtjkbTAPSKoW7FN*r9CSnvF*mD2ohPHX;cM>>)A{iXh88yIr0 z0UIiv#*LC8>>KmaY29dR)a3 zHSVUx$>y$DXu zXi{@^VKl}Fs<$tVVuqeR&2pcBha&|e<1^pe3!2MQV!vSIjkMKGAk36~KMt-g{_Qy1 zVB2!2o+aV~CboNIuzmTV*j(2Z-GCjn@dak_&n_nSIU!^v$^H?6Ox))cz9hrIR6L0zF>Wq}O0}Y?G z|4qmjE$H*J4ZwS)a9Xn8-d;6XslKiDxh!s5K7@982L%NgAFUSCtII{4zplsx$D`Oc zG$h0rNLbRzjLjAHy)cb$M?OCF8EsVdef>L9MZPNKdG5^10u_YS=XgRh7X^D94F)C! zL3t7ofc*UA)3}Y+Uklf+NbnNI@;4j49fXK@}tRt!bLclt;u#46^9m`^tZ6M-Fyp*aL3E( z78i!sf@rHk;6xIrm8fAXEG%rdlTZBtk`#&x_HgtI-@8YVXK!wtGr&)z*!GRqm-@0O ze&nPBSTCz}K}g-#MdNR-HEzAuj4LR&D2r}w6%$0RcILbyZPOll`X48+c zu*);!S@y*cJ8X?gI&Y8TB*RvOS*`RZ3DAb35Jmt{XncDe45(SQRk0*Xx*K-mZdPns zrAG-giW)r4F~t020s_y(Ls9$A4_6?|-H22nrthp5+J5nRUp}kQYYySI^_uvqZDTuG zhA5jzTM?50pSqg+*^400&c`tq=a2=hTln_;iE6<$5=J^0*t$U}uYS{&gWx>{TZOPH z8JR31F?Fycj!vVX2M#T6(`W|5Hk(Or3DHb}e46n@$prn4$r1av{Gv*)CR52BdcAe*2Y%eD&VUN$AHAY|??nyzk)i zi-Rfb{Yxk6GQDP<6De4uFF}Y(g$kb$R(|NgP7wv_)LW&V__vE-^RM=-0(i6yCrVP( z-p&LV7`rvX@YS7#&+vcNnMBh0>R+HWQOPBj^v4LC=iU6O-JtD=^xl_r@T4+W&3|)# z@P6B@94Kznb(S1@dY{TCiv?egM1RI*(n&puM$l_k=!XB&=C~%i{g_%P36ISr#`rEv z^vTHO@H9pNc@um4>Y8*=$29#e=#Yx__N6F}pW6JwQ;#2wVsZW3NnoR! z7gtC=%EirS{t!AF*__$jU}W&QjH6B|fYBAiBZ}*=6$r7IR1rqQDTmSt)b*IEM*&nD z+ju7a4DCRZOs&zbunfN(9Fi#2upNJ`yzz}Vv45e}t#W&DceXJ}i=DX_L&f{B+;=2= z?AK zB)0i{ZvzI102a}1%{cKcJ7k}Vp~{pNTpPT}$`Bltq9f%nV`>o#-bfHpL+CE)#CcD~ zgBxBYvo+V8@NR5((KoIod$S{TTM8nNsE3gRR3c4xpii~*7q|a(9L|%$`fo6tg7E28 z^z$NLxgf2`X<2L~@)j%_1<_wMi{wC1X>mrt=s5CQXteK$IOrF5>4{L+YIaOQ_Fk<2 z#|u!=9FEmj8m9hdy?yh?5*{{-0g>RldrX(3ZWn=Bd~#x2?lb0_V$Ge% zpsBD%G05oW!$t!cVZ-OL3eqOsWYLKi`at&w1!$F(Btj~n>Esx6ODIWWiwoQ9l2BuA zVPP=bl`pop3oeTjkb)DW99dbH)^R+flTO}?%dBVNu(QR&#~uUSHl*qO$zc*R>Gd|U z6Njx*xV;X(qMX}eDs`HY#b3p=H_xy`C}RHN&s`R{akM_ai&k)tNTF5Ef!&@gCpFR= zxcIa2T|GzlPr^%oYXPd(cPFx3r*%FSr@xWsIy*mXE__B#X4Ecd4Pnr%0K}GVDc<-q z0x#!UDdU8wNWJEoT!r*YW!xrX>#foJAC30HRL*&TDe6w=cVj9L)Ow!V0MG#_uHdIa!A=!bzx5*JQvYzSW03WliG2*OX|lrH z+uypF*jk9ruw8)NRQm4z#)_y~dPzwJo0FdNhAzOmEvM;Kv{jK|N5;pQ56H~yFq(Y2 z^;S5Xc5~>KV+E2B2rHP!E4D{{i&7&5`sL+d_gdYIWVIsR(5sgOMFeqMPl_Ru-q3lM z3(3^S(dny}exu@}ZRj8G$RiCqNZw4OzK;468ciV#io1j7Wsb)7dpgeWC>hvBuM5&7 zTR>K!`Vm`A^TF*T%`El`) z^=^K5f9$MZuWfbPe;)Nj*AY@*ZCQ#^5EOE|DDi1ial@K;R3$p9()+@Dy6T11t5>|b z5%Gh_DRoo<8YI)v&$-kvE_)(BJfALSfvkm|?#>n`oqi-;bxU>8Zm^*e6F1EDzA~(G z-Q^<^x~7pB1{f9@%;B*$oj8Q0>ZO=VULF_RxPrYHdQQs=8vdoeK57+gPGTwsDuA&p zG{9V4DC`&tIF@hyj%4!R2SQ~oDw7nf8Q`OAL&;>`$KmN8?gJph=5sxbFjY^5@!7aX zg-FOtA|H)lQA&Q^&1R&l-c|7TVjxpJ1#&mjyf2vluz&M^P*Qo{S@^2ca(CurY5&hw zOPao^>q>9OQ~PqvCA~KH#|r6uxsk6@WRClx{)b)lfOTU z8dC6%G+8m+@>#V>-`0`S$(5aTL;!e2bE)C^YvJV1`jh9i)DVCT^1BOt631qm#`Z`r zS%#A@O{}^yntfy{oPJL-sV7dVMMTyyo%zTR1F$n=6=87nJ({9vv|vt(&u!0wEx`I( zfE7o(ULC5_no%wZsduFeu-=-fZ_wIR#iHIpL+plqoYsJtP@MLjLJE3)@rORM%*EP} zE1%}2^+&C^VzB}LL;+=OXL66%$&L`JFRCrhmN<`-$njc2Ls!dD#u4Xaljw`#qbYw6 zEu(o@M4aO&&(xS9C+(3%jvnWR9r>c(sk(}-tG84QeNgDtS8dE8Z!`P3vwzjfW-j%IEWiP+u z8G2>!F#+ON^^6dsjT~ZzT-0$Vl5)2D}8!5EStsck!ZYwWUU4-|+! z9@RnxDUnW-BnBpAk+lr%ED<5DHRc>8$BU8hw{juMzAH< zpL2Y3nNY!|^wr*Ti4QQgEW4k_&z_%Ys)$pXFN}L@?p;ihH?21yj^RtA?lw7?901eQ z{PRH2=u7~w2?R)umrd+{sJ%)>E-Bh|GwX5 z75S1BUuuK0vc+s@oqiejmp=Be{N3Q!7S+NSE0+#zT{q>;pSgrq<3$y?SOepQx7*e$ z)p$7m))Be+=`2z9sJ&D9jAV6`kZ4WgwAwDfk9#b|jT30&o3}*<)YjHw5*)b=Fig2B z$Hh|hE8zFG(pp4v_jJ^3l!fKOB4Xxfl=H>ywn|73dB2LVIb}h9YDTJqQBp&zdQHYJ z{yOuv^z!UWaO8Mo*=+^tWh-sJw=8b?I}eZIt3+&VM3z=seBWnZ;~yo##e!<1@x{Pk zPSV+mKhc6zHm;|lmsBNWsxw`umWY1mDdV+ZR($64Py-3wuF^s&45$*s(!lKOXY-T*SEt<`_deD$R< zH~=$(TCQjBIfFydNQ?0VQ#oozRw3t0yj}j$TXC#@SIHv46v>=IkgAA$vB1R7uF~Yd~uNG6glOJ-b zME4F13eU`j2Sx;9OyCI-FC3-(OS3{u!J5SEc+V*OWm#RNfz1OoT{ht_#oPHF7*F_W z&Mf)=GQ86-fOCW2nO>g!FFz~=yd=N-7YcX(vdeEmff-}>M=@vkUyAD6I?;@maY{D;kQG*OzT$X9Hx z$w4_s!U5P?N`&vOorq1pXP`K(4}S%CdVCT1k758JDOpNTyZf#|R?jZw$@JN?v3@3OE#UOhp zk6&t2KdoQjx8Kr*Ov*-i3GLUSRS0mk64Z}K%H8ehmOaj)%Olme=H|9cAlPwDB0VD`i@ z0%UzQUvHB^xP+W9Sj+4fU*OZf?}q#f)bS7fTGE|b;aF(AYYP6ifu|Z zrt8s<^$D^Z?HKSP0xNJZx4->v+GJChf2Mwi+U_*`|K<$JmMBB`1{~W<0K+!9?mmCc zWfgW$Zghih10Ye-f3P?2IgF%-@eRloB9mp>RiIG=-0*m!R8unK*;W!+I{TVt*rN*I_QdCszQ$2^9B_m@~PrqCt+qngU@C*mSeCs&l5B4tc0T*3LJ+8)gC5jr#%A zU!K+Dp$6;s!oLosq4SrZL0xsf9io$Wf_AwSdE?D3i=FTA@8AV>%&i94gaj$OcOkol zhQ;r`h#BhOHmR3tXylv@r`FrHNLxjVzJnsz^4Jb3#>j#aY?5$jrN5(T?`s! zU#g5K#@UkS)w?_WZvd+;12PBUWRU#yvT(`V>xClCl^vJ}1lY+ajX6C)7&Pa884P2#6Yy@srD1Lo@OlC5{*a zh(U+~&zhPyu(pZ)%rPXec}#8lI+Yy*m`9Ye#qtqgG`B%`Bu19^^vpL3$Z00P-o@*( z?W}gw`RBoXw1n85*m*;r0N*=#Rpt5Red&wM4*EwuwI12N^%Cb-i)in4F&fhcsaOXL z452#F(CrPVLA#eE;v6_8*+yTfsTuaCs|CSn@=N8oi31E{Jz-!Tx3sB72fh@5m*HNS9WTk8Z<$&H<1Jl5(J1TSir-VgR>} zCw53k*4M#cd=(PfLPtN4$Y;R+(4R*O3-?(JSZ|mLXg>-2J_f56iQbiTEA6wNEgq_l z_bQgepVa3(gEXMZW&Du$Z&76xC8ItA843n5O$KsD&q@RlttOi*I8NrZ=ylxg@=uz! zU!DjczUzn%*ayd|AYSF`#dd@VV{;%r@G81u+be z^+5&}`FhU)pF#gg2NQon)yQE}W$l6Zo@)0)z$;zTygS}3xV+bg>c89FT)JSeWbD9V zu$2t|eCQf@L-=@KuRgA*pQVA=X050o|MSnhL?dU{g#{7DInpqj;(69u4|d*;#nVaC zm+o6!mlf}Fu14OZvFf&)Qj4iIY?bIWlVeg!`&Cu3O4qp#CKjXnGv=$8CezOV=~T7$ zYNL0O+bG_Cw%P>V-Lp?sH!WS*mxP$_I)G8Trn9Ffcs8h~pVgG=-v$_?(8(prmse5E z`--)x`OzO8DybIAki|{GcU-WN?4DXS6ug{7C%llP0a`!G*>ql!JyAa=CD(5BmRfw z8&usn#4z^LVXySd+Q{zs4hPT(B+Dn|O+Onk3sjJsS7=a9Yot-^z z+K{-0tGs<2A7^BKsa(Y#`(qgX|^m&>(#L62`u}l(eH}|pjX)=7%aXt z{y&+kDWRA&1eiF#19-P0ys@7c&hteThSEUi8SW5vm7zY^cvTpGPc`Hj3<=#)7l+H^ zCYq7QQ|HA?%SqVZ_8M47I3(#9k8u{-kvdyDTM@jyFe>-cMf$&vz4cdt^7U%vCOuee zRxrR5_fBv=uqY7)f&t#-JXPbbkKgYru)Db6YmO=XkM{@QY{^_l=I;QH3amC$Mtbt% zf5BcS8}Q`tg=AV%{aqK{XJCL2b>KpIVBYBiPW|8bJ_Y~t;y$g9=;9lc>m(sOB^7-4 z3{=Bt_OLI(9YAyvWc9s;vH4ZQB_=3*qxKkxx?P(;O%A3EeWjYyW4&{@T8(pr0beI| zFV2@BAtH8xUdd*iOo~c+%ONX|uy64B9T_l5VtfN64HZy+Ohy$apI@=uoU?fu*>s$* z1KSQhyJ-;@C$(>^O(qb;qk#rVuJDPM*Ljl_*i7;BT|F@W^PzY#A5%d9YkTiy=_{I_ zBw4L~5e2G8Ake-*X3I5dCdV+fT3@x`wO9o908l1x@PQ*W5qlRd_jRiMj}mpc?%2#n zUqfS+#Ax^=r$O`%70_vs@kJB%{M^^z_u%pvQ~dCA#dJO{KIcu-!@6nQre1D2 zPms3(y)K!^?RYbaV5*mM*g9-crx&h~pRO#*eaI-!ns zhfnUdRHo2pr8)}?mpyQHmNt0cbsO6iQ!OS2@lLjHp4r>m!@|NAx#r&ueW+x;ngxRr z3T#C?D`uKbokdKcVkWs_#vB4N^4Cn?+i)OW0!w(mvFD{pPhw}%Vz4HgSRk9H+&93RA?Qg0OdI~d`Bhq7mSjCuQ94dgeAN>vvO1jl1n9?-nL;;el=Hlj zqP>Ryu_oyggPEq=@9|9>zZ>(DJ4%`OY2(cLL(1zDRar4{afiLRm#e@L^o4h7lXE<(}?Qe+Y!6RZpz!6%)Iz<%z! zI};6FrPxH$Pv%<|La1h?0bMpF+9ru$OX;2cL z*qUd+F%#Ss2v4T)sYy03EQ{kT&0+ipIQ5noEd@@8 zfr!kCL!YQA)&OJ%&{F$S*i4e3K#`~&982=r046$PpcK*HXQ&|6Ale1VkkO%Bnjv^~eC-hM}j9HA)*k8c4hiLR^6yK#g91;*}vTV5tC> zd+WGR`ekSzsc$#PJtrYdepjBjlPB-GjNAae1%y;!GAY)3W2u%z+)nNW6pnV_ALggVo2Ni-D@^@6aWeYi)XLG?(#cg6)I~ag}0Ao@j(-jJEyOofuACc`Z`etn> z0678kFo|~i)5|~O`!j(+R6b&DOc0-{m``$N(A<;a@@8JPJl$#L`)Q*9-Hw#I`80>a zki2}bL_zQJ=110J*<)#M%&wDz0|@|}lUVDI)2RGQS*VY%$i^<#w>e$2>On-;hucO= z_)84JbI;V?3bieode&l-zS9GMYYaYLZhmCLZ7P_-5{_imYqawYg0nRKAQAq7NjDq{ z)qDz5Vl_c;G1v5Bv_L)*3VmZU+dvH3DmSY#tbsqwMU~zBD-dUq4_^W)kkYW~PYf&) z}V~mkI!3EUm4D1Ndb$m}qJB^y`1E9Tz`- zSM;~?xQ+jAmeW}N7KnNtS+aXOK&q|+2slqM(}2bmRt21YDp_pt56ttR<1^KIQ7zU1 zk^tiB$`;0LMI%8S0GJt4e9oedj|IusOTgv!W~PpSURd*pX5{8AlVsPY&iU#Uw_2AO za!9@+aA>Ki&c*w@AyS{H6er&yFF+&W%_Cot`@r0{JyAM>G?x+q-L^lYhEdG9z!Xe& zek_ChBSOM2jm!G!fO+x`nfw`GG;n=o6iOxRB@YS|(w{zg+7=7d8R|+B z6e?6mkMZ;C1Jgy;U}zGNUico!6RT~()kv!JLdoWh?Fm8y0|)5#wy|U5vlTec^$M#2Pu#~$4KjNbtHeX(Y%-eRcCb?^ zfvf0g40@)gG7E0M=>F@*^4Fq%b1IHDBgU~pr+tGBhY?O*M(M~PCVQkXmM>SRktN4w zuvF0z86ZIr`i!7V;v*4Dj@YcEsH3o%rXN77rSI~hSvnX^UGdtpVV;33(TzaG}h9t-IQ5Ra~aVS zf?d{Km495m2xw5s4!DopHP|m!7{om1dY74z#e~igQ}X;uGv}ZINiQ55IJwb#BD`&@ zBENv?R_#Mjc%D;#4zG3@4f4?IeA+P93gz4u9dyeraawi*ewXbci8^fC56HhHU$nr0 zwR1oUtFBB9Bph;6)=>N}r~rKOkZHveg*0v)`^EMN+jJ@zi=$OUdOk*&**SaVo0hcv z(;S@*8lI02J@@CZ2)t#TNxK=Qp7g1*i?!yJ5qu4nE2X34pqv?>^4Q||n0lKRe=eFN z_$74U{s5@J!k{uhsD#zIZ@(wd#14`sqp|hh7PFf%Bj*j@Q1?mZYgw_BxV*|I6$t%{ zUw6{|z5 z#s?Rsb}w&jd(1qLKwR%75Cvkn+6VlO^1TF7vSG>d7eP(a-OF1pj3W;ukpJ};*GUJ$ zluNEwgb!B*6Cwf=1?9^cvt)m;eD}F-&r@dG2YU-o3HH`cq3|IQ{{4P$f3?;{|2-E( zabRzs@TF5f*jvH-IJ^1&DEEWC6}gwUHl07d{)>)J?-S}7pXFvB?Cs7_?y%2SGe8U@HPt4An1jAE9=^^m zY#bC3$)Us;N#mIBBK3`PuRnee#Vxa~C%846*LMR2RUfH$2;K6+8xaky?+=#K;q|ex zg&@caVQ5xiJ~$!*Fb?cKv3ZNfk!)W(q?aQ^xiDWiA@S6@T*8MKb%zx4I#6^&Q~aJ# zU^tt#Ug}06%>kSK3;P8DkXNSVwwcB@>7B8bl#Imfny$`8$3Mr!p;xQXrTQ=J-(y zfhj2T>axMFwY9avDLXqGB!LVWb?RV27Q4E6?35D1?`ng#L@xFj1mK@O1JR`j@Gud; zh@yf}h!s|*eLG#WkoP2&j?Nl!7MG3BEgtBxcbiwD(7l;@Lf~x#UL3**>v7nqfM3ZBwI zMoch81t4#HZRT6_X;SDQw$C*lz7YjX~E`J!!$R zr1a_kQ%W8QqX`aawQr(y3Owsc13WNdsW&<;h1>Qix1CpJg0(EH{rqLxrTmaMU`5yf zdlHi;lW_k$2EfHgfk#=fn)EUbX9#MZ6zjKgOJ^>?gA{Dn%@rD$EmS~oQgrRkb@Kpu zd-8@rCZ4hvti`>PgbhU5l1Q=;M>=jV2|;W{1U%Zs0c2%3ttUqx*_gsr zCG7yyFzUA;(5X;r=J)`ar{wnj!7&Ke0B`_z=)1J1$Y_7No_{~Ow1E-3fa-eeFdcPl z^u|&Ulc35kweQu|FE(4*Mb_ptn6csY87RloryPEod}<*mxh3}6NHO!j8e*~iSs>3~ zv(P3PPMd06`TrfikHORg_)R=t7UytTk_<%h%5yp=VJjqJ0Q~d6R}TO0@%#R`7oQ_0 zBc_uVfqoMUd~3_#8BrF~Rfr&wP~5%Wad#UDV#hChZ@tc!Lig__uW^9N3^jg%N1^!x z*If(1!w{eI!OIE$_?od2u%eQCI>RuB9(%}$DsU?LW+B09k|4Pg2?ju`8k=} zo}R_e90I`oWvPe)rl+F2wV~ezc-Dq}I%J~kz_E2gk&{A#iJg+%qqdb}tEL~7_> z7#1nLSc?TI1mm4)#KB3Kgx=DY-&6KMS!90<&#Npc56S-4E+DDc1~NfhWASXcYjnTp zEt+cle*b^5_trsO?qB<_B1lRLiXh!3Atlm{fOLbTbcmF6Nr`kLjnW7bAEZ-KLIDM& zK?O-^1kU<=pS{)RH)rO=%=w*vo|!$fW$z6exbORYuXU~KdaWM&mh;Fd%AZei+!LkV zvbQZQ#inPPoP5_V&U`(boP<_RvM%hh!gl!z8H#92ssiu#$XAK1$;{MKIg$?_uZ^Pt zqp1rwIJ0LhUJBE+oDW(uo(BNCrUfQ$maw5z~~vf{Wn?v0#U-TA0LZY zVR~D3OqE;Vv2BW+^a=}4Cju$VC7xk$FhYzyu%zWsIjfni^8*-cnQ7eSTH&-bdnIJo z6BAIVR}&FoG?aE*pHz@9F^E;wD*U~Ih5=EXnrwy9-L0QPHJVF$t1+Y5;&&gfPwKM! zPC?cAhyYi3ykR+ndMSmQFWLfNPB7S zLlB-l@CN=CDzyG;s`BA5p{h|#-gt{qo~%s{&#aC<(mYr<<_B(En6 zJS#!DFPu(#tgRT_a(;?mf7N-a$N(kYaFi6GMTtAepI|K46Y%gat%I560l z;=@X!RfG~{s791}UySW|TfFrJW|`{i2Nw}`p0C3TDB)AW^c>mk)s$!N zAuy(nkEqh`g8M|Z>B((SsqYuumQ#L%FTe z^Jg+aHI9*A-b7fwJ%j!&SDo;kYxgk+7JKNVcCfpdZ|0f(w5xpoROdC zUWn!9bxXheHdSLA31I-)p7caBdP6Fgm3!BCEXlRX4a$_0nOl3P_u|A=9#TM|=*BdLyXuL?uu zQTV&)EUP%h$CoMpjz#;RaMk|Vc7^xlQaBC{Z--R-FX-8kLi)S1zd7n7m-y zkKg|bRYFyZ;qkRNL`vE>Ja#obXc>8%m^U5Q2vn52g=ci5TV8Cf4b<%Hrens7JKFAAJAt@D`YgFtS$HAvXh~ z_fnD)`S+DSG)C%OWcLWEn6Ja&=ToC+i9+wNn|#cAFE}J1+vuwv>qzqFqz+R;DaRb8 zc8%)d8VydzzEz?5C|}X^Flr`GTk<~Lo6s)4K*^4g2gj1axWCRB5EnMei!Z%`IZgjp zZ_(79DaRXgD=RiJlB~IP?wgtanYxhm-)sP3MvEC;t@*U}S;Wo$nW`j`=RVvr-A=M} zfvgfbon^incb=x3xc)gQvT6UB1#3RT@7-K{-WwGs^R~R`PL|o=2;NlgD%fp{FsFei zO6#?6XEQPeiQ%zVLH&s*7elbFb`GTaDop#HpSrWOGgDf{&_tFjIZlS&q*40HBP>38 zz0<*-6jT1_)|pP%Lo1So-!0cxD!!A_7Mhyo3sTytknr9nRz|6MZ)dyOv%Vnytrv?G zk6a6S_8+)wPe^`ZJy+ojWW{br&g|8$nUkXF3hW(jn*nYpJuNAjy#`6Wc;rKGA>o^B zFeZBTDX$r4g^7~?aHn4a;@KGrV=zm2Hfb$Bbuh6K+ji-%V}=ZM!IC+Yj^0Z)?{bH_ zPu$z$^|q?~$2|I9PakgHviYF?CAq))(xrVo+2OH+S=z%THDc3e_^f|w9Pp*MqF`e2 zN(Z96tc!_KSp3H{cN%i%(MxC9l>`R_(bj)VbM0UF1)R99RY+XnvCGOb@c+vAbuBHg zH44i!Q}WL%iY}XWF0ovIF!={IX*7Z|v9BS93iZd0zzO%~*QynP;P9oj`>z&N1QXFI z|5U2$EtT?HQ_8MZ?K<4W@AH@*2YsRvUc?B>E;PH~KdlvckiTq%_trhb3mft-t+#z` z5FYd)ZyMGk-`!Ki!uAQNt3cV}*y50&H11sUV#MFss@Ba06@+Wt>i^Y%`2U~j^^4ZM zZTV1Ubq3asJCDDG0Z->U70$I`$|Chw5^Ll3s)()RZ(z-X@r^&beytErp-S)lZCN-` z@4vCMkNk4{{S_8uaxuZN5(HKBi8?p6o=>HALoQm^)A$g5s6FsGjf8{pC`G)(&Q8&3 zsOB)=x~)G0!4MUuoIscS58VoiXuHC@HlYI|CvFzwfE9?Lk>&8R72AI#)Y9ZvSwZ@I4W#&f=crY6XM6%^QR@a>J%IXXhUnyr%6 zEC3158k6hu?)4&&Bn;YKWMrbYS$$Hei9vR77tj>Q1T%{UQ#8~_CawPBu^U<2n6*aQ zwY=sfhP5BN{&5x3sE9E-LBbsa4-XGQyLjXz=tO%X6?bw0v=npU}P2yZGy6NuyUqw$om%! z5^6NnvlYfI&ui`VY2kI~ae93FpNRc69U@?=RohO;+*Om zV0pa^{GzTfg1q74#ELdzb1N$*aNC8!P`#u&63m(aLvk`YZ zPZDpBggm5jTYTJ8OVbHxIF^~sLg#TGUR zP61;s?Bb}KC5j90lP38=G%(<~J>w9jtDco98SX+0_5J3E7b2QRl zO(UPb@`3_qjy$73Q&T7%Dn=8n+-8#;CrgAsmD9zG-<8C~go1BU^&XVHI45U}{}7i! zKEL$hYyD7SMyjE2!$8A?k=G!VA4mZ+)%q612vhp;y03|>evrNT{Hcn*?{>1{%Kpk%~AYgiU-Ks@4=jRFR*>3a~ZvrkaVBJCWf?PC9Q_zAi0_l^OvgwE`cko1C;I*1S2K7zsO?A-=f3&#u;jv0v{3oXIwkI)~oBwq*hQ7ghY`aE{OBBgTt6Cnk&CgF0^?U!Mev z5uj06D>DIOvdrlNh6+%+bTN;C5-~rJ`T^q8$(jM_B0iTRmx-FGsU-o3&IQbM$uU;l zswIW6)w=qwx+?v;a+{Hl%|5bwaT^mAL+6PPvA~^?S5xUkN)2F39M{#4GVh+R6Oil^ z!i2xIL>rLnyV~tvK`t0s-2;p^xP7&Bs?3?;?S(a!bDb&0SYmTT@$E0^v zHO>zmv;0ntwb`hVcl9R~G0bU3gD|mwy#UZsFF-e;aG{4j-U4tm;BZhZK{0i z5>6u^A8QqRbsc{$QcrM7Om+{!S{{D$(DCu+j8YRXvi&x?W(vKS@l@?P9Hpp0WMQ5) z9+Vx|y1Mka*~bfhPERJC*Hi#l3=|JSxyM<8f`(N{T8*LQ!h!W9phVa1)xFfGU?*dV z+yJA?SfqmA_n!%u-1adHDyJi|lNBAQuM$+$B`J7Dkoeqrs^SE}M5p4ygMqB=ig(QE zm*deofm{c&+08Nz)6bw3H+H=R3xQ0{0nif@&r8D8>&>05H#T?DRp(~jx)KEhv~hK& zjO;iRai-oef4OeeV^T#xD?znr30y(}&z%G^V`x33oVJFoLWv9TKJ%1ICw!)L+S{vI z+Bb`CP5crC7qt!G61@*SfR&B_o;(n_$OcVW&6WUnGeVN^1iO4hjeWR41r-&i9e5|y zi}%d3**o{Jd3~mOX{vor_<&z@2YmXk+*F<=U%OU1STH)v7Paiya;nUJnLVljEZLvN zzS(T zeuS+-eq*!2v`tN)51mbW_i_?^>u}A6VXe z@^UnDK?ux$<5sT5&EA+mnt$ac`z-cezOQDnhAQ@xN;=#1f_iPuinG+ThmO;TobD(Q zp^*CH?_WnB4rS_*_k$fz-E2~AHvVX2RKUI98;j#;WU>XAW#v3j9KdrDMr>;XZH7{y z8p9IAwCAA4>3d=(KQ~!57a^_0Mo-FlR=_4%Wx+Pi@_8kmH2AReyKzQb#bF#D@VS8R z7QMd{o9qEaXQkh{NU1*Q)mk|ssuecGSg}ujZL72nFoENe4kxcNt4Y~YTMnd%+ZXBg z^E9JqPYDe{8t_u-nO7Ab zMv;wart7n2AtG^ZlKX?Rs0|n#5Ji#<&xP7Y_Gbg1o3R&eXn3L5*{|zx0tdh}tEib~ zTw50>+&Cv;Fs=0}JVb;qIYZf7%+`&(*bq-D9o{cIv_6cuzw!A^gN@5J|2W6uEZm1X z83>b4tBRn}S=Tj7 z#=rKB9?f`d<~Yv!asw3))j#7XFY+&ym8J+7UeN=h79rPln{U4q+ z>%Y!UHkm06Jhl2*eUsvz+M)Mr9c{L3suN)HMlKGCZr=CxHKiw^G-}e6e525-l^x7W zNQ!OiX@gP+Npgi05f6MUK@D2pcWKMrlabPF;g4RglvFg=l68Fe7R1Ua@p&VmD+Iyx z5pwbn3TsbdpGr_MhD{?Q`Qe;NoW?nQ=7WwZY%joAtmXV@nUHIJdAZ0mSC2JIr?@k# z5(a==wfbE?64RW)S>zgV9YIx2_y@_r8vXRFpVgvJb&+Sf#SafsNcT4w7fODttmNRL zM|2^tDm8--Hy|o(#9cRMeCW@hme)9cb70{ZjaNQGW?#0kFhjK{k82q&t zkKoTO{T|iYU`zh-U9r~NNxB-2RILz#4+g{$q@2$|=q={TX|ap4{d{_h(WxwoRDRZo z6wSq?J-6F4X6FhiM_12qd}5VtDOFV-P5bbUqE zO(_Yv;d?u46%9<3+Mm@Dzg>WpE)oD=x@A9E*T?S&u(H+1jrB}eY4mDRxnYA!>9vKD z`e{!1^EpRRt9ht85xLo-Asi^0xN%_xnruxpd|eZ7BtzZ$A_}5&vyX(7Q*J3!G{?=F zM+!mRh$AHdfAVKb0(1rHMi4V7iT1~C1j_e_FZ6!^i+(b>mz@K(ql-{NmrSR zDBSO#wFhvl_2cl@+2;?$?NH0vF3{PfW2jeJ-N<9QhE~2!*U-E{bKHezNF&fwAgvk` zhOu(yzybRyfS6$BbsWbYP?D&69JG5i+=|M~!23s3^4-PBPs+93k?aAsL!mc!W3QNJ z;=h*+eVRgIN;A+8#%rkt=l3q=#Aw^b4#U~aX|K#j%Fg|tHdB7DpCpoQQ97$SAdJbkLlD@2YHPJ^4o9p4~kiW8{~9Edyv# z(N)Sw688J$gr;{zLHZ!$cPPw74XaTMq zqtkw_Sx=F;nNH_qe9*j9$R|JW{r()o%J{=CpeHU!K=hU4Bl*^|!*Os)BgbXhlq@l2 zvY4WDBR7mf`}K~hQ#yf;RzCTb)OZb^=d{4-7To1%$Llk60Vi({3Jz=0vZ9ZRGiosC z%>RpfivI!@M0x$E8~X?M?ypDyQIDb(bBjL`pg-7PKBNEru|Wj5U=(jNvi>bAiUstG z{Dsn{n^S|&Gb|R=z5YjzrUK*5{+~!b{EK87@ZG2l_V)er4g4pIbAPT1@9&Qh#PE5^ zHp*I0|0spi|KzZ5Z`WBTbo6Ucvc|_?tH~dlxkew@6j+w|8-k zo*K1%P;A)xv3WPld%M##jTo`rJ{bCEI^d5Q?BAfGm(Mbe!i+r@s83jd8bWx)f)hPt zC-$w9KFq^SRK|!HffgDgO=b zY~T}q_hII|bIKCAtF(*^&F&U?@J&P1GE}g$Sz|H$HR%qI7OQH^qLNG$$1OS3{~rIq zDX6+9OR%Vm*HJX0b<6d@`A|)#+6&640LHJiMJ=jx-IekZ5>Im-zDxoEg^xigjqshu z%=9}#uhZG-B(vUsek-k9sKRd&q*jKy+XrdGB?;{e7|?_?l+aY}#1WmWr(IIHW#+|X z6fA2&NpMD3=eHXAdMy-SRYtTg3Svr!Mj3JymtXg1)0uCq}nnOQkPSeZm$ahZG*tS4W4MRcO(JzHGM@yb& zN$vK+me7Q#(bdI{-;bReLC<}5)ZRy$uh)$9`4jurLMjJ8Ouc3A-sJK13@h-unSOS* zyW@!X`R2R@#rd@sO zwWVQ?-dTrfM7Yn%{=4Gl?sVg?$L~r^y;J@@H(MDlx^MFK%shS}`O87wqrt@F>wsKV z`xndRM;-C6<>(F~c4~dD<37%C!6tQRRy!y0n_lZ*J7;y8D4V(f+*0*+&z+@iP@}*? z9|E%6;#`}gn*~``x+$$wR5`@(j&nik2K|N-EE5!dr>@K*(v?R)(rLB`i!(42%ayho ze=jYZ6J?B9Sf7;BE>D*1BhV0K7hzd7)7CrT45l_;_rbAG!0mF8_N2^cIU=NZINMzk zR!Fz8PVum%^)9?p!Aldw*<2V7rE>eX_WN&lLlqv7aQvzz?1K0b?70x7WwHu8cC3fU zO$fX$sUUk778ceD$*EhOJH$Y0N2-8QfFsP+d_S%A_O?mQgEoW4lZ^%p%-^odgQ>JBxk>fe)+Q5+Bj3_(%I<=U^^{!8at4wvBivFq_t znue2XyTeXHWTyhNVYNVR*wkS4c}Ec(0XWDs2<9-f9W08qABXgOqL#mXs=U;EcFbxa zPC^a_UM_9e0BO{xVW5P4xeH${DM;5iK1 zY%z{R$CJ3Kt@{aPJTmonu66n_QGW+?>ySVf76$uT2I;Jp+w65wY*QwM9uP!(AVk*hU$cBkXVJ8xN4A|ni31j41 z7^6N@z1I&eqN3yR=-vRJvtXtuUIz%JV?5i=s>7M2ti=fZ3?WwqOdEna(}Kh`kY!m+ z7)xy7Qsqs4x;9Hx@4|l9)!fK}h3OWWBmKKUiIkjZq{W=E< z`oi1JEaOW+yJm`IngA3o^~P0*Qgy?) z>lZ-ro@Fkns#XEL^kbkD2~Ee-E84nY_;^@k!5yLJ{#nLfuc2s9mTQ)9CWdI2&YF&l z9iZzkFKzxlpdE1o>hw-g`J=yG#9B~$;;e*EigxO{u!?>4l6J%HLakBJ(l@QUuDs5y z2ZOVF7(d-a)S{)HwuF7prD|USYoaF2>XhRvW)p^S0Rmgo5gsENtCQXD6>RP_k3>#) z&CFp{CUK&;)Xt~MMWilkVQ)9wIzbl`W!naGd9g9BY(lo;c-zZq#!d&utNxSq@ z0|xHRVkv|{+*2KmXo?eccETUbZ@8}5QuHx7)zk{Zc&%CvOYJFW-mGf}Q;scVxa;5h znZ0*id0(=Yv&KC|2#2xu!1jRG0Et(>yEyv&=yzG$x+dSMigM85ZFKF!kJ)dSC+|b4 zA1oUta4rS;Ke2Y+s_$&%4+_341lCB-AW^p0vEErWl z5-b~J5cWCNs2OBGu$$Ts+TpaHZDxmCbA>mckD_-z3t)8W1~h7RIT|@!*9c4(z_MUIqKu-6yyz zNfH0P%&0g}t8NA+eAPn$Vf7Wm=x*q8d}?DX8-jbNEolDN2<%-wtr_Y8D^fd0)j|0i2Fzeb>Ze*g(7b zTEE;t(D`8F?s9py{i1$J#YmuauXK)4)7w547Rn%eXPbWMHm%e}R;RLhChx5_^i_XI zvZ1lPWdhk+ZJXD<=N^f~WWe1)X^WpLWh1#RodrLC{%)cICL;Z5&E_InujZ5((mX0j^FAdZ8ET1{NfjFRJc^25&e%t3;+ck!JxJo`hl}Kw`IdWC*q&z;_ zv0yW9#scY3b!rWSDecfg^AkO(T=L1dXqk`YhS=Xfyi#|5ER7#tpy6%0IbCliWX^C_ z1n*T%^inC_e(D04%t}aoR1vigg(bR#pN{)y1Q4bniISFtXkxhS>z}qus%~i&-Z!E! z#m2Z+8h3T}1MK2$>*z3)RvB(quqyySz zqKZB#oJVrOIzQgJpUZ??@H*V0hONZmz^)hHT(f4rmm4u?RK4#6~{LXVPMY3C%=${rf zU?NT|?xSFASsP7g0(%kqtvWM?rF)d8H=0g{LUSJba+Y`sdl7__d~jHJpLdQ8OpZwf zW5n|N7seuA`};9bO~E63pU(2H9Xif5G20)wwtBZsGBR(AXwW1xGSm#*=ZXq9#@$I&@c2YD{Y4OUsA3~Bi4(0{Jv|`xFGh$h;g(zy zfp!0$R8_`uhFaSz?fr$bnQaWeCwF9gi4n@yD3*V>NkRVFD+^oiwFon>W6{bN+ih+2 zUT{}A!HZ7KBL?5K(cPxVE!l~!h4&BQB5Q;{y@2MBYi*1K2Umwu>eXV1}a;e1v(yh|cuKr zzfv}CyT0fC_%6V8B4c85m^2Ehpt5=f<=KO&T1rhmwJaDq1LxmTy*4&B76BtP5P_dV z0WI)W!0i>k&oOTT$7#;@GiU%aV6!(EG+_Hq%hU^HI|pxyD>(x7J>j@f|oG_g|Djfks?5b(8!Hs-F;^2TfnCyaDRHXko& zV%(v0d)oSjfg9@bFqplxPt?`FpnvYE4~&rem8NK5y?$TLyFlv%@A)X`!@w?~%fi{) zV6ATa><0e~9rrqml&}L~CdHj&z!&r$u2m>{K>iVU4Az9eRSts1>RR3hUvT#L2^!AM zE+LcsyWd8z!8jc*yOBg$Gqx$c+e43yU5}jjB6m1w7Jo!GEzrpdH5ya|wT@}`#Rjr) zpz!m#WR&e!kL&DL*U)zRdf$0QJ4M@UG5-^JAK>3WsU$>H%72<{a`xO7VA=fi@~1KO z^rxhW=~K`Sr2wZkQmTvH5EmKU3Y`iUtUR|TjCQm5HkV!+&S$NX*P8ePT**-t&8xw^ z@hwWX6r0L?9f|L%!QO~Rrn}!%VSmPD@Mh0HP=i}{I(E`#=o5y)!)jLp8-;)yq&D6l z<;}TL;VaGc^&6KG!fuz&lg*Y;z)H-)ju#|Dg9G-rcwRJaIm3I3bG^9K=o0$AEG&vZ zZY(!=`xq0tqg%SEVCi@YqYfJ6W|p&Gg2+iSSn5iu628}kT3}acmhi!^CJ-)Nnv$ZJ zW`z+2lvW`CP%s%Q){HQ`fByo^lY?<7gmR(xhLAY{u%3`aSX21w*Y3DAzEv@HII8m< zO*-dLTe8nrN+-F_ZQgn?TcJMAz0Qqg@VR_#tb`HPyyrRy!p;n&TMLXO)KIcq6L?Jt z7YNI7A<^=}zg_@G$C~xKw&Mn+MooHS^{}!KHntIZdwXkKPv$Tzugxk8$2nEhID(9oYWtt2#xjeD z1I!A6uU@@kt^n7?;&6`S$TTMzpB<9YN&^jVu`!GXE`jkwO-svmj|Z1T@jKj;43m5< z&XH3_0aFEvU#(8%ZCMrfCQ3^xzaPldQ9)jNmEEigt}4VUsK69s>o(o%QKnT!hJu0u z7L=@)zMKxY@FlASw4!{5GWX?^*secX@m8#v1$vLtVwV8lGndfadLVNbRdPLiFC3p} zJXAMpVT3vlqo^@mcRZ;2^M?ujzQ_Qhuyw;S)sdo z)vwBK@LD~1bd|8~hHgsJPi57_XPIU7BK*+G-+sxKD4V_phRI+WX{<#gx<|kXA1;es zTAhWjAdrI8UMW*N!{8Y!JJ3Kvv~jD7k1unudv;}c*ukX(nRXS?y|;QzW` zWiAiq8~N}VFyGK{bECjIO^xwesXFc((@~%yWP|evHo!=-86YrVs;ns?a-EbAnUub((&LIRG2(P2n&Y8s)ltRX$u!rbxNtF5>NT zqlBBys8Q*7s)AcU;yKT3zrjhGCV0T5a zQee=fSZ)iJ!(+ahzTpfs?b5`}CT&81vS_&8gymvV!aXESw*zd~1?AsawT)pj9riK+V!ASiZ zNGLwI-87u1&f*n@C1r%||%e$Br!QL0;V z+<1$Ow}%obxd7yW{rMQ8I{J{gU&ng9lo>3dQP9p53x6F*EjrE{pr{)DK2{RCL!GqE z;>v1pXpf95A{+Ne-cx}OI@i!PVyMNLG*=~S@QLR+%-EpQQt0vW^!)roWm4E|h@95q z7M6kS>4-q|ScUP#s<3%<>sXyDT*`Yt^VuGCir%3!4>p}DH@pEX7kPSX>vA}3in?~7 ze=`W*h0KLm=WC3|1Vivo+aa0Yy7=Y_IN#v4DX@3ZRtd$C_u?B8h;EXm<4(bIuhyi~ zX;Y$f20@-y;2gjR{v!RorMP4-_=Z2W+~6&Yh9@ltM#vV@F^X)N+|GR#-dw!k6oZ5p z$XZhnj}o$A=X39+J8wg$%+{`$Q3!@*DG&yIrir2_6*2QpqmS&r404ssPCu6j0<335 zH94JtpY;rKnJlr*&;@FCPS&)D0p1}2-)1;FQ;3d1LXLwu9>c|DZ{%km7=6E>XtUM% z`o7ROK2A0P&jlNI^*d?tU@1_z63-vn84&LdeI`Ue;8g4%w^DpoiO#(Ax07Q&^&`FF zth22bY`CQbKo6W0GUt1=y*03D z45Gvd6hL3A7BX3dFp(*Yiz6W_6A8O%ioco*U;Z!i&Df`^u`J#I+f8yaV#N4yp7YK4 z{W?CpF4;K+uRfZG%Y9>gAu{^pI%_WDeLQepSd4*pqrjRY-kIKaHs~^1ird9}KT>A3 z1eAj)-@!LqbTI;$o%o3Eu!}3G8?eg6%x(lzM6i+rMH}^%!KBG`TD`?caU%`WkV2zV zo@G<2v!~#233twIf)`9*AgxyR!7OJHo5T9#QBm?MF40~|qZmLNzGimX8#g!8-9yp# zJy}WTNa409?p0CuCGAhmctm<|>2#jnM^Eh?MBZ}sYFOm5M1rc?tu|092@uCst7scw zs%GQnWpuK*qgyHlFK|h?l;DWUk&1!A>AIjkTvWAgqR(ozz>s1ZVMQ5)Cl_TR!#G>y z1*{U%H@J1pkT~BEtUk)@o%uLB=iNjbdUqoFkr6AlM{mpn#xm=c-&osDJsHXEVsUJW zjP{+D7cJIYa{X)}ZL0~$604|`i=bD~Ik#hu7`>_vU4^^&#mpQr=Nw#U~n6VyZ za_!i3dZ|*)ac#|#a+UWHAp~miAVE{vAo}^vJD3mGoLSka=>Lqli=w^xJl9=y*dPN| zeBe=1IwF^CfO)(t*;wXiEIr+}Eb-y-?scx*j+7hPyKPDt?fx|k7qzMI83R~J4Du|b z@j5az#Y=7AKGzz*XUqAdau*q;g^7e^Suq^Jt$<>p*3#adO^DyBWn+|Ci=AOHQGDF_ zE|3*PzqZv?rn3aNV}28$a{RfoH@=7dHAOE@EI z1Q|q7CdP%$73Wr`^h&pqR$lHbTaf18fu_77j(3C1%B3vJ*ejC6qH>Nb>N@y(h!N#m zX%8vnsGJGI0Pf@txDrb5t!5$Dvv-uTW0<=%(h*F4cRoKNi7drnJZiH3z+g4nIkD8w z8vpXp50>*?5E1Fs5JH+F2uZ;brb3bQWRGRKR8yjM73tO=9uCF8A}g&OwL5B7O1XvW z*tD1Q=nYsB@r7J>c#aamHFw)sW-x0a39tN+Rq<{ox;Ade6*A&ru;NNly* z3|OV87~09L1kwV;wcvu)DahtI>yTE~XWpgN2IuyK8i({UxI*?p4!g<|SE77H(_eXGIS zQ6n%hQ|~fWj90D-JECzhw)l_c`ktpEo`>6#Eao#R2ej(Nx2E5tdJnnSx4O9~uoX^% z;&N;WWHc0r^A(fFiKWHwd}bxN{8=KgOi3_!VUsf3=qb(PL22{hOC+pgJ+ah~Rmu>; z&o>-b=IrlecR(fd(pJ74i4RLeuaMo|sj*Q?s#>}V@aP00yhlN!iW^Bc=Yw7ySq2hkN znT!^8MoY4v`6Rh|m*ZMD-UA)QcW?*Q-!f6_1})VDa_4;u<(n#_B9Jc$YVo6jR=}a= z42sr;bernc&&R_-WzLM~Y!(D?8AYiDJPH+NCV99scYRbyGHP=TU_U5Q0;?gD7N>E6 zoSx$P>o6+5o4eJ#)Sl-tEUO)l_DQ_~N%)r}1CPGv zF(F?UxlAc1{!t<{K?8~0oMEhCRx<*|Nws7}=J}s5`M=|L*;=Mkc|b!Xa%1Ih_l+3JdulQ4au)#} z(*JhhkoF!zE6cx)J9Ff4U%j6nF!()-f(EU%I>;v_#b^x=-j*xg@UL{h>{LCHDVTf3ti!Y5vMG{(Y}DGX>1jZQ!R+cQi( zw-HZL6j3AACs8w()X6HIBh`%6vB+}+|A`$YP3D*ASW+~Hz=ekkf3DWtF>0erg7|S? zz}8koRsmmaetSpe+{^~Pa6=X2WFDx%^t~s4WI}&b;sCh|)(W-a#e`*$4qm}$xw#=$ zk21rQ)JB+)+=sB{a;;a|Z$|chR z!~fg~Vhgk}Y@3Wd_bp;NSkAPL>8?#vvF|)ow&5C_il({c{l$m8nV4if6V#5m-g^60 z$8e*$r@=VVU{>XFS+PSRVN9+p^X(P zdn`i(fZ>2F<2%66yBW{uXUo^`@TEE6k`P+Yw2qohR%8jFmfv36O{W_NPS)x{ ziEGO-27#-ux@4t&ekjeOAibAag*b}_w!(0Z)XNCWFXOQ**QZ9b` z%4xn1+N1z@ubX_XT3!|TY%>JAA9(S-4$huyl}*Z=q+7N{m9;{K!8QzA3SO(o1R5l2 z%mAwLspZ^%XW|MLRx9|yvjL}v#H+%B=wbu<&f9a4I8t?O_SnuX9zsqCQ$@}WX&SNG&DwySDggM_2#79;f#raJj4T2+IndIX(+$+SH^SDZBNoLMd%pecc>sz)vZ~)c z{$3nmR^$U)6eB8H&agyJt0_P$Ry`OmRHcx7iaHPbvAHIP%V*yIF(YIsP^k~fZ@pKe znelwN^{8W|S$AFGYir1@!wN)+w}Wj<7EY7RORl>U_VX0v^}i%ePd<-bT0tuhV^;dn z69tH&4$<>zF%VIa`^Mp!ArpLL{tlAFv242B^d9g7J%_v*O91Q8Y=gT>I46PMVA^d} z8rP*BE(N+ssyHtxeETnNl`y{}?Iq$9Me3wWLs^uwzIO;9d({oeXD9H2@Y=6NLW~UX zn%|KcI+J$!vp#L9JxV|FHpqwN9c3ugv)3~Td+n3AoYu;Yby>BogEg9P6M}i9U~b1G z2%yoUAL0bhxQa;8%RbIPCzvrLAd-*69ZNAhJ!PbRyrb0aI6rg0kI5%*25UYPK5-hp zH3**o&?r)!Rmg`rT|3;ZXcMwr0Oi&4-j=>X%weE|*=OwgIRMfQ3ndjoB~R1&*6%bv z*~5bPC;+SZO);iH!8U_rs0Wy4zVquAK3-iycOJwiMQ85MmHw%zTW}LZB`Me#5DWVw zYOcX#Bwfz{sqqN9G#89EfaQYl1V$*_nA6X$^W+*e2^E*qID{0{>?ei{!>^mlRCiJj z5rF_D__-e4U4W<&l?|=n%%Vp)Ut0RP0#?Ea$VLdv5 zVZ*-I-f9-;?piu;R=iLzUoM#iKS3CHUNuQnJQ?^z5Z#iNYL@HxNvd-Sh9DCM!+MkX zp4dE=O<1&><9+m~n9ay2Q=yeY)K>!2s2*%q<)txT?$;1$0~hpjLT8$M>3jQ|v!qIC zyxs1zgSRjdB<#`RNW#$pa7Qk&_0}F?X;_S_YbPl9^N$y0r zA(R!3*#>64KNx=DlrUIjq0zCuVJm_FJwYOtMmj;$kf@F(#=fQkV+nfG2e66RCZOuk zGB=(4f(cKH?@IVk1+#H%l@a0DDcngpB@u2Lh+z6w0k6lxYlz7L(z-nbdfB?w zqP%eZddIVJ*_67Uu}|o@e}#Ak*y5yH5DR{IrP3u!so4daM4V5LMQzs3kk*t++xM?D z{Q~`9=|i7sGQ(htr9~M^+Lql|F+G@*qQG^NGEMWW6|8yduB!NoMHn9-2-ayuIY=+& ziyz>H)b7_G50*)8a%Yp~&HC_b)-$CvAel6!AG;o$?m&wWjtqOl6 zRF-JX8+OSkVP8;0(RNA2f9T+h2Y!nchX-XoAgNr2oAVQFg2yEn2m`gz6e6`s9N3i< zD@Ef_{EH@rZSy)@$#hC2KJ$ zTrmXX&+Ht5=uHCHVeP5a9nryD=Cj=HuY;J=pjW4`Wp~F#Q2l~A?I9|^)tqe=$6Eg@ z%%M*p>F#lnwy(L8B0$Q$RUh1Ve&&T#+u`_lu=A>Bym{0QyhmZcGhj{*#S>)|*=fRPoloXtE*_s6jRu848`&{C`e*-l2;+;Nm*6pms9@zRwUKM}I>``yPt$MoL0CGe`S!AGF&pljo z`>B0e*iBwafuv=RbU7@n5=7%mGEGF-GmKF&K zMmBuS5T;Z;!9M|buIWd{<*$Iq&?6u`aYAs+C9f)f(=y@$3df(7oNE1i3j&uba99* z`=!MttZE!*WiXX7JuPsE7>2S0U9@y1*h4VmB_Gz<`sJWL*VzVGRVYZgVj_K1$pv6p z*^2A9M^h~=96|XlTGTd2%u4{_x9ZxvnkfQo`(dv8HW8ONsYsDa@!@$de4< zSnev-b)n)bIQV4Hkaa? zOOKoh&F|j~rUI4xYDUlagILKOxz&pU>nWImA7syEHqU;VFuj=Vx4AiFB$eA$osRhV z?L2S}1yMUn>HtQ-A5Y>%GUi?@@Z{(a4YMIY3zLMK+4NNSPd4Mw5!3wFV;t{C z-rr&*5_*=y<=J^Uh02&kpPKHS6^0o+N);JX47g#ND=)Ko z8uqHrx~(Ri#_=&m060@w&kZmeYOO{H)l1Do>E28I?wg@(@(fs&Gj{gx*cnKq4#&dN zqEb|gv_AVuMNZ2<&F@oxuVH(m9A8-QJn#5bhaoY!mgL{Q7CJEJ${AK&QA>Vye3(ef zf#;rWaM7{xXA)zC`GM3Ko4oVh25Uy+J_=(+Q|HEqp{-r%$9Pl2qARq!(Vj1VFgsC< z5Z(*=_oVelCFJ^V#ukbHF}D1xX8b=kw!oa9D6btt?Jzbo?z%2jq(+%-+|mqPh6sc= z329#piB^R3+3P`1FmgD1j@vCrX^SUB8;#10h$pNWlTl`oDXqE}ygc@=7XT9nN37OP zcX5n=?>fU{O8HD-K>z|3RY9jH3a2??$#GhPAoUbGpS7(ktKqR^BaBKQy!#GH-bF)E zeM}s{7l5&b`j*oza7tLMx$QONokSU??!4rW5R(`}b0o$gNkTR7_a{VjMKnb|y>jDD zwNR~50w!1Lz>7OKKs0?fkorc$kUa4n6pdi2k%3{bI}@!ey=7@#)AvamTCWezOFrP# z6NgdK@JppTZ+g3B3y}>g%$_@eV({92iZ67ZKoJKymX5gEPs_w~?cMWJ>#K?NJ53HK z+M*=+=Q!j77XaMXUD2|kCOrsdeVp#+KPcmpFxJ3iI1gzIfW(SDTN-qJrqWV5#%O$S z)Hd>~tUwzg65qgC0kHP~I2{CeY|}kIlNmpMV*H5>16fu%VO>lnL;xng8|3EgFYY`U zG)5Vt5^m_r(Ry2ZHrTrews{Z%gQjb~Bb3YABjM`A zq=lo`C$FrsUkj|6gNd}%{VzEyew-og>$Eb@+9BYOr`ct29n3uTd%Xy!6`uEu4@w*v zmJH^8O>)bEu$B%pHTp-((4D|Az6)lwT=tWXOO0DDLZgCQ7@=DKh#nwE;4lvb#)lxJ zsf#+*&(D0E;bbG`G{ON)4&w25La0fyjpVv}^MO12Z8(P=2Iyf(qA2)3!M{>odK+*b z_u+1#gIZRPOz&qeb|DnbEO_gB02KoJN-#`@=VzK4Jiuo=2cZDCLZ)-A7iu)wl58va zh}rd|?z;UtgnNdYt-JQs*)r2|67S}0OSJo}4>|z>!Qtt_?EEHW;pl4(E%`;H`vk~B zJ*hv-tXvbmmL^JH!y*5K2b=ps!0u@ir2A$Cyd=ApYj@3ihOO>S5$Z1nJC@<7ozY0o z$Uxpg^TwAZFH#uYzk8VF^ORh$iWb5XP#ktaQ>{4z>WB;y0|al}H>V5mgL|Bx9w4DW zMDCyahLSleihjUMKuS#PJ})T=?K>Ffn)Sw66c6=Ul&<|ln;ComL^}hyHt6gZ8sgEi zV|>W~ye|{(1n5wAxyo#CO^D{V+~`Vt77y({kVQK*e2r(jt)MDqxR(-^6TJyX;4y9lFw3m&&z0%TEHs8nOAw(s6JQ$5H`zS!S(})83EU=U^M?$rsA1Y*(K#b?%3@ z8zNWN)qZW-wQEJ&a9o}?q2dRV|5q@gs}T0&_gHR0sU_TM*=O6^owe`4!D8xKV?9d) z^(j|{&nk5Kr6*rQs?`VD@)UM0m)y8tpKg7}#U`J!eDw>%(tIpaCR{9dAE35z3yv=1 zJGO0blI-KJ8&l`|9NlQ=T6nu7GZ)NjsZhz(y+G}t7PmrnRFk#&c3(Xl;R7w2q^n8q zI1FKTuyMM-!U^YZxO!-yc}R5?vHcC!9Ox;v4x$kzg=4weZs#MRLvpaWZNMzDD_xqS zbw=%2XCf1Pa2p-`l7>~jtnKN|Wl;`bAKBxbjEWRs2#dvt-K~$RPpf2Y^}gw)6jbUE_T6j?hNj_wp>PH>NhxF*?wR(|7(F95kRW z@nT{TyuWzy%yi@XoOaFt8IXB}0P`F=_ss>|>f(&q=V!;3JP!Bo-sVGfF^nso3ZU75 z>_!KF0GUG42b_&8Rp15;*H|y(QW59j!7MuiS1Mbw^Hr#{rz7>oJoKp8}Rv+S&ofgN>OPMDjM25s8@ui%0&n*`P8^LK`6)> zKrt!V2|QT&CE<)^fYl+9XVzfxiadw8)>r6)u!c6T{^+f@I)w%#aC*yRS_FZiVX*uv z07Seyl1@Ka&pw6F5;oFw{Z(3bs^_eSgIdTrqk`cpX@${2aNvsjp2Ww10_bNZ}bb%3>Ei_jDTH!8kiVFYbSb%dcnaDKAbMR#!cGX)u` zGo=Cq9v-aq3aeQR6=`S6`?PSnthCi!me} zD#4eo<&Sa0aJCtz5JFR|x>TipnuP{e&yH3&cGiVCN9;?D>ia{5U1}XblF$^P7Cic} z>H)GqF=OegWAc4`3XQaRMbMPX+-ANiLCm10WzbY+Y zYA|310-NolgV@3>uq|?QZW4qc;w2VMw~K4fMPM{6-QJ1t%vf)|>I>|;G|26Pz4ddv za3)*r!HjKR{wZ2B)OUftST{1%-JHZb;pKIye{5-Gv=8BQBc-%3-;I-ZTdr@W`Q%Pa zQyui@f-T6EN3ZO8?-hg;# zISa2JMQZ`u+M_L5kRQBxoBe7@1k}{|BVtEIJJax&*LM~~jAXujW_%XrQ*%)Gy^4M| z56It8flMSISk2mz4lWD@bIM(dz<4sSE*k8A;pXzE8sOO^{Pf+^X=OkjL>d-Z?pC(L zUu_a&kl)~OXk+BCCy+oa&%OPo+1T+nfXCu5W6)#OCvNAWOms-$N4we)2SgL8<2`fe zq_u+`OviF6As7ppupImYeI(ddli}!>s#iM!^UBiuk*y32#?MD?e=f*Vm|E_Q{HEGC z4jTb@WC{ivN8N7RqKindgA=DT+l9GI{VdiQLtxg~@4oFRt8Aj6Q@!4P#Q=+fkV@yz>@wiOVU$XW0JxO2qIAdR9~tVpCzt}s&T|5 zG`7pOZyi-;RORDiTo6m&FfmKWw5G{sInKH!1P#_jpAX7P&#Y&z)=enRKWvH zw#4kGZ@x~g6lC*(ZYZo&v(OxnF)nM2Jv&I4 zSb?TkN*=YDw=WvwXexI9OiP%C@~X@+#&v?^9-1B7sFULa%g;|hPRiE(dV}@}KG>^r z7l_OZTkf3s+y{xaFC->8N<>%^eb)V zP5arob?4u5J$X(|B3Edwi{Ic`z24Ty;-J3WC;`LnoXO?BM*`e8?3Vio;QuTN=AXW0 zC8xM666sO*S#^rOM&-SzgdiG^X`f%2O9qd-gbi#WLp4uTfwePY^VT0qwC*x>=UTEl zIa`%F8F_wE!-hp#=*SC*`w|vexeLx0kbb3HECYg1%A|$7-&JcdOl-BP9lI^oUe8A7 zC9i_5T;80)t-M)$M24oiZVXGtX&TmcRSkxqn2O*<$x>1s`Z5$XJ>2TLC~gWey)8t( zVrBqg^;TlxBU9A`APhE)j!J8|8u3p=s}rkvfs^5e+U2Z*9XZ=*Hy4K>l!n$8T^fBY z4paFP4O;~ewR4L&Ntna*{67GyNezA4i0g^boQy|K|8TTP34`wL4+9qH{h}l=F<6Qi zkA*lSb2+xPewdHr3pC^vuy}PK2z6nZVLvd|bTD5WdyoijyA@k0K2G>mD=`qux3rMn zMZ2?8*Td`=lAcq&9hhg$J`15|4gf;p&RZ106l^}n+-xj%yPiai;p)$=Dr?-n&eNmH z*HD}}1OVbI)(OSozkH z7WwxZxx0&>y{`D;6f0;2hL-e&O1hd&}~@xey?lU^rZslvw9K*I*vW_QP+}Xu~fVd&sHSO!7tjz z%ps{E!t=aG-TX^iejTLO+BK{s-CILK%4`X=$k60a_{;`a7e`82K#}%+wUTC+u!H@= z-`X}%jb81P%CN&zD{n;FG@(+z;W95<#gR{7I)GEwUT9e9k$ISzC7QWtd8hwk4)_?^ z)K>iLk@=ha665;*Tc3>UNoKv(cQ|xUunbbkVpzFQTJwV|$XgFDq$`L8iEM=sx!F|) z4LIjnl;JiGJE}41ert%o&V;f_Sh0l?)1WtF$uOYhKmdCFH4hKbfK)ab?Ync_#sLQi zsY5r|Nj*431~j$JYyG@xsGj2MaSivJp61}AZ1Xdxx z!nXdvCk}VPhxAZh0I;-bLKPDex~8KVZo@2AncC59e_?bqZqsOI#c+nLD&76WYw{TX z>|hp;e1*+b!%_6Pf1X4l`R!J{Yoxs=$E=%v!F4Vxc~otok4Xg;pKkJ4^fZ#qe7WiB zJCJ*?#}^26KG5|yQ}6XSQP7E3^Ow5e-5sLpzF}|*Q9XdU;I%eW_UP|leI`Q&q|ud^36Z0&d)Mp^6zBT2-;ldiij~Re$?edq&Od{!{>Y*y{KVrT0_6hPO@0q)6FjymB}xHg zLYH571g*}toR=(lCE%l|Y5Tr7oT_0*863F-e(Dr_e9p&}@-nqcU8&VJT=;4MAAhEW zy17i2w4e`?dubVPYi-q&l(T4j{PtBtJIv_e^YPD&&Mqzl)Mr=VDX3&2%^ltJgw6t& z`?}v~>*j3B=Fb!bm-;b*o3`oQo-D6Q_jRt0-u2oCgPBa-j4ySG*VE?SA;<4YxxA9Z z0rRR4?*^vi9AGcO1=>4w#C*k|l7gE-9rHouWXtuq8v&jec!fbY*C^6rmmejq^m3w* z)w7Y_*?gr51D^TGr-`ULC~7o3A_&%2EIrk}_|8w!HPx^QP?LkFxKzfaIF`*k9Qa7))MMGf$jax9`8yvt7?}N3YNL~DU)Sy&*N)}1HV?Zb4 zeO3}Q&2hE~-9dNxqG6*`$V+#Xp4db|?uUl2;cVKId|c~b-7oklK23E zh`i<84Wh`~fu%(Ol!*u5Dd;PPmJ>9MP}r73$nWojzxtuEY+Pu<9st-b1sXm=QI^0M zBvtC82zO262K{9cHsUm@4PqJ{2jSMt&fXq@Y~hT&LlH{)5_KoF8h-;HVI%u(3|PS?>S0i6@A#Z7`Lr56oFiHN0hFuhRvdEvBatHwfB07W z_XCxiG--`fHLc`kqTW45==n@<#^GQHmZ1`KuC=rVqVS1s-m?DfF|=|)nYi0V>oPB5 zZ{O6ZNU5bbt^df%@-;@X&M?uc!j-Y1w{xfe&Wqq*0z??xZ!?b4s`#r~+1lD-ko-OM zAa0-bM+^%p(3&Y~f7!osy`Z|zKZm36=Z{+gxDkoz`K_%o-qgunUFm`EqQI(1Ctv@2 z4kJUmNgxxwPh|9wyH%gWjm3o!+aiqg@YeOx*o9ST0`i(QAzZyHfp(qanyw+xs6efgHC7du%Q z!w-uKt+r)m!nSzXBT%kozxVub?VJCpUAxEi*g`>Kj<4xOp%`xdqr$u5L%ZS%DCK&! zLLZerka8QfzO$$R2q)|sJV7{^`4;h!$dq3C%{w5n14yH}#^v~$B7v>{%auKxlarB# z-rnAwZOEH}{Y6i`!io!$kJr|#pb{#W%TNjdEm5Ssnw2&@C#RQYqSUm}EFj+q#UVkU z)ZDawvHI2tR6;+=!00D)t=*e93o?CqJe=lQ2};aI=|s1lr2T$Zq#oG)VqvUmXuias zm329S%#(!%p0^*&(?zd2yl`AwnxC}#`OK{%m`0eZ2*eJg1`F9J0)2gs$F;84h@m+E z$$PGKz0@a;7=SRZmypX5zvPs~pdXknf7uCPa#VYjX^FN8;WikVApMkBXW*x z6H`bPb2vD#&k^Q(J`-3z$?gq#yBR3MUA81+*KSO4qYhOQvL>kjB}W{-7OTZB{RGdg zFYE8qUJUn;^S(d@auQL&*47`k$WOkYy-*lge(s=iEx%DU{^^tL(~L*c7LNw(2}%9u zbQLDbI2t@cY%Qk0wyP~q&V)L-IJi`-PP)-@gVfTdc?eXSzEH%4rmu&c!hD=BOpFAmZEveSqPY{pls^dm9&QB;FtDav6hDlWgBuqM^u6etOB!U8K#Y#SJU*FljtX^_p%kM$hqn%_54y7`2+>G#D zc!4yYJqaa$K7e=B`q9a3HQx-Qj5H{v@7iJqC)&~8YA~=*=|DQdz`;Q#g$M|_31KcH z2C+Q?a`K=&t#qmoXlutR3<OuKuW$0Hbq)+L4YKiOW38@fwW`|6$(cgkB*K~!u&wl9Lf?b`tr0W zXRgrImYepI!k9&&`01;Yqm_p+I=To9m#?59K@Sgc1c}B-mRw9nYZ8BqsjUX9@sHSx zNQTe*Q6C+_M81E0n@rmzOb>k2ZQ<=IOh1@U3!j?BU zk_zFIKd%+Xe3@OVxO97NEza#h$oO#F`j0iCo%A?KiQTAim#pL*1T{F zI3XT;K29qFFQG?_n%Xr>^NgT8bm5avn!ESgBCb!%cEP10_y!yEF+%y|^Gt**MC=Fh zPYD1XAYJYF%6ff5P^I=vJyF<=8Z>Jkz~VWo|oW+yAAwoB@6?<4-MFRwWmEi$QZ=((s!N|I%^L(sJ4qe4A?>Ts@x zoDQl|BY?)*u|+7PHF@xIFQ16~N7)%+c>!l=|d z)%bWla17{XudohxD53Zp54n_JN=$#;l`A`(i{Q@gMAU(jlUEi8ah;$eiHz@;0@MW& z2t=Q{UyCMcf$NU;2;*sQE*@g;8Kk2T1t8hozF{S~@!h&qrs9VW)U0Ir6%*f$X2mA< zUKn=O5yD^%gXat4rRFx}ijYWd0HG5xj3kDF@OU24$aHZ-`wNILWH#MGQ#fnyOwpeW*cMAM9rz0&(t-YNyS{&`l|;zErL;GFn+o z2Kw|H5F)gQE4J>{h&7`%$Yh)M-@f2?wQ zS>NlwKEzbiwP%OgTj!ra>H3%nVNCN0~iu7eDM# zXy0R;Q9#X=NaE3|hk$p~1#B#*C)}PUfs)h1#TfIqc%DJYI(xX@tYfC&*O!wur=}Mg z#psfaZD~Bi2G0=Q5e(MNz}9|w8tG_UKas$v0E3A9B5l9e!EzQ8Rs89l8nk?>VzWW^ z*n6+y*+;!fiIPVDeb6wtqF~1T?cB@rYrR$>fNhz^xJuS_6xe5CDLU5X`l@BJ+3T5Q zFS880_6L|dNXM}3-!+;JXMOl~W?Dhsm}v;gAh*n92}G|GJk|*3C>VqV_ED+Tk`5bp zARAtO8U6$32C%>fz!WS?ZRahT$jIWluzIP}K<*N=Mp1@r0pl>y4jVd!j3Hh8$A zsp?RT+9yrk2$Bd5AU6VFUCa{rvNa+Eus){rw)hJ`Yh%)_bv1tyvp7144x>j^JG5^) ztP0QDDG*qd$Z3Oj4aRb7Ypa{&RDkf&#`O6Tx4MiQA)?%BMtFW$>_6Y}CpVO=Kpu&s zqH)5Ebo1H=!Mu9pQqRO+`xw?ITM@SJ&l@Zi@&X}_`&{FX{5qH24?Ys z+*8e)9QR}9mzM*;lrcM~x1WWLrAdnM&91B3Np1HPukE4jq)I&J=IGwybY72*|K!2W zQg2%dD@}J;E=hEcH|8xiGjAjLu1=*~w)YXaSCE_qL%KBQv5IclIk|BI%&^ufPRB_C z?YlJxxeydj8%ZN6)MRM%y+=6r!hrGLjkz^b*llwQqk>xIj^mZ}*dJFhRwJ)g-lA|# z-|xzliELjt-6ZeSlS*$Y;jf@Mdrhc)flrM$q_UM&RP*RHqb9ZXtmIQn2ke2U0}PoG zy{cMBPxK9QNkrmN@}j~$$o(mjp=O|1^54I20KZk)9DB^h^=bS2LW^w$YO)8W^VBPL z&6E!&&d77{1ba_&kChAHGpgiec?~V-gpo<+ysjtYQRAYDE%zmK0@S7F_*@t3J1!@T z{~a2$Qb)PpyC7C}FBS7G`vY3s+$db?Ohxtf?U_}zjYQi=4zDt096u%G#81mN3QAe! zy>G?IW1>BDxrB1k*FxWTkM4Q*gJIp={4mOYDMbvj0ME6jHO%zD94Hf5yRYK-36QpN zdD{ij3gne%scYYjN8ac=y_p@(ET1%fOyel?NwpC1&w2sTtBbyfu(Fq08Ei>bdN*G^ zM2X}GqiV9Pd}o3Sxr2CYzOTBoKiXsN*lv^TB|C-q#k|?t-7Gw`cYcu^!Vf_vc~QIQ zKRkEI?pkYCS|5MI>&U-BRAYn1BPA&$KD0(#Rbk!rgyqWE{yl5~@_#n=P#AOl;!onZ zu$n47#X0tK-FxKL=EBr#G@&2;oVY@yJ&twXxTF7(w`-xDiq9l|`-}sJY##x~dj7=m zvGB&Gqb9@m%+(H8Jq8K%{jSvd$Lx1bH|0&@JN)$iyI^l{NbdJLwjzhbAMUNbU(CN> z$DPZN<7***w)gh;d!YjCRDJ_C55Mex0#$HjgaG|%kgGYangRLA{r!(GGVaGI-X8Mr zcM|4q2zqr1BsiaHx$*9ec`A8vU%&8$FZBtrJC z0D^|o<>-NzFqGgBf&?xxT$C~m8y48qgu=P~CRVz;Uw4R*n&DA(>z=M?&U$hr#$ zH3G0@h{5iUsK(m*W1-HMvX5|{g&rzPyY;TFyU;&}51XC5GJknmP184Qr-Nh_@%Y3F zCd>NYs8QG8h(O0|VnQVq{^dV*a*;8NJJ;@RY3%?IigL^ys149hrZ)qbjWEhwJEDQm zwZ>JefmLI68-}m%0EbAe7*nZ1;B5MAx&! zm_=BE4Sx-7A_H2YXb1s7733YuORNKu7J9_*9US4-{Y;60%7Smm@YRoa9&~`Gsw#W} zQqpX_7blqWs5&}2?f`1o)AP-AsPLJ{>PTrcC_HvL&CkH*>ytT;4lrb6K{1+p~E@D{sB047y$q4 zCLwEq8RHe$7T$fmCID%-4DafJ(AHM6))Zl3cD=Jpm(Y)vmfyO9Zw?bq+0Aco60ljX zG>^ed@{-%RNQvd-!%}2{xC|Ib7dn!Bku7zGEq3>);TYXFES`~^CW$59EN$;EZ#e#$ zW^=WC67j5q${zAe3qLTCmOPvT{|h96EkHN|in8>wIzU|OK`rByy7dw#+ z?DsO)uX1O!fU}U(d;~l4rb^pfBC;m}YFjRI6tI6jLe^CRMr0P88F#FvE}Wd8L{>{s z=0Lt8N9dbC*d`RvSBeT7P|~>Ydz>{$!2my;W77BY=i6uTt0JgR6L|BcXJ*ny7XXyo z2o-8L3l>PXy7u<&uG%WEMd(>obRqXz?b+D#v5Kswh~BY=x0~x_oX?@^T(jK52cl32 z0Rbw=1tKkovqlPG7`88LWjj{sDWO@Je^9?oRo>kbm7~LQVq0bOzaMBkJF{9QSsbWAt1vLj9(fna_*s(c!TE zt68O+_%h-QU&Jkw_+1 z>i+!horv?%(lc2R*&Q`j?7KE|?zL_gZ06fCy?X$T#PwX!@AK0BV)rFjGQ>NRs|&#s zTJVavHFE#84{vwaNi2GO2!i{2Bm> z8v3##!gKZ{zh3IceFB_MPlW+Sl`rLyY~_U4udaUB3v>< z7mlJ~w+}GiM&E-s#t&t*jK*LBYhm+{97`bXQV++Hbe<+pzk2A^Te#&Gcu@-ongLz8sxRU@3^p|yqs94a3Ohv6m%dh*y}|936H zm+K>?a=}aBjf-*{Qly+XREbCb`$_vL&Ye9_43JB7;T-;LZ8PkZS%L06q^6K^Z3Z=L zbEV+8A8}P4_4pX?D>!Q-JC!Y%Y?Mgc(uphmp#c`{?92<`rOzrVDh$9=`_%k$*_AQK zx9E>m6aq}Kj4*^SGjgkmOz%mZyAW8h@-#OPlHL`>o7eVNSG>Rg2gkao<#Nr^8sC^0 zGBL6Db;EZt1qAuCKmJ5EG@d3y>zbxBF_nO#IY;hgoGleB+aR*IIHC#!=Vk1Tertm8 zmDyhD>l>FYF`8;g_^Vdd%VrGp_R5)CR>{anB>MWIU&h1z3LnZ#uL4OcNpb+NIPN-u zSvb-pmXnS_YO;i@uUy$L?6cE8E(*$<#ye$MHCM3&PVc^>@rg94J@aH*@{-7a1<(^> zfQv`8hGe4$RahQo0U0eGjvtRa??9xc-t(&U3esIKYfm5t)OMG!pJQQ%( zYcloZgE85#i`H$IlSz{L0X%p~pLwt-sL9#3k$U9l#bnhKXqJk#`@(&iv%S`p+OVvD zKS07E8gGHDZ$3OOWr3o#Q2l?}_M!V;&;q_sD$yKU6q_-9<8X-hg4;8@HU??MJ=>}yu z5VTqSMn8pR5|V<+_iih4Sr3|r%Feb6kehTXs`L%z~` z+MKcX-t3r9)t!L}9W7ZnlylKH%XM_Qo}~L@?NoDLwjF^pvg9dEjTJ{zxht`*zn0Fd z!A#b@?NX4$NK+4OlX?*Ox?xt{0EV{hjM4-))Oo!_ZTvNCtAaY%&vO@+c5_btS$-kw z;3*1Q$OB^7p8lZLG~_uJ2hk4)Q85r8c*+%M9v-*Z;Ia3_z_dfwDd-kcgrP(uR!+J;qWOWO6`-6Mi>_&*^5p}W$z=4Huwu0A)Vtp6 zR0UN>APia%DB&(sJ2O8ukVjP$mNli4e`MlecGEF?Qg;?(?+bp#X7E%z2o6VXi(U0# zs7?A@&fUWomtqhe&WEbV+I~ZeJ9h|SMaHU*KN}pL^*teT#UI0(CMCJTe)H|t6rV}g z1*ie2hs`b$FF)Rp{FMJ&vfvlOnxfNKF2ktvv4gy*-57O?zlpLNmiSipY!|e50?9g6 zaAApj4GIo2c95qzM>io>dG&syyoD=FaFi7WA<@$O&5Pfl(In^^KLsI9kFy6n-&^2m z8!7yd1y0AkwfAL}`z9yVB+;65y9y1_js3&af@e~R@$%Ji7-kS>)gV;WjgF$jVy(F| zMG;86Ilbg$_2t!yr_H=j`8Tf|ntGS-yj^MN$PZ7oHX{#~=7%LF-D59MmCi*)n$>eT z;h6e35SNWa&Q)pC9Fh)N{=|iueku~WTxPB&1QqbLE2GSVSPJC{VnHY0wkWho@d7%P zNO7Rtm{!V2OSspwM-f(x)v@X< zMla^agzSEKYi0n1Na5APK>5bL-3+5|ip(n68HB%JGjUrr_W=Mfz|WVc$w7-yUAPZs zV|;vk41dS(GmY#zpPOP?7Di|XWi%}7{-y_qRbYISdz$A~Z9&C+l=ce^VulD0`};|WiP%LDEdEs%DM?p`CrCcYFu(hS)rdPv zvVO2!ST>Sb-DG94f;p zpDFl-N{YV!w3&!+=68l*u_g6^J!?*DW$r>uC7q<|L101uos`1Npo>K*0`KhYopTzq zBt{w1eGcl3S&dv@<#;8wz$dzPh8bNI9>dFOXHYG}mF85i6=AMx0Gu8%n z9=b?a1&`9YbakH4tzuoFNRy~=&IO|D%gY+XMx$^7y0H>&-Mvt@S5HRZxfRBOP^6Z) ztyf-omocpvc5pYp%f4{PGAF5M)*zl6K^zts2fJ6o{b5j^NjSdYBe0a`+dX;t7#&$Oh#NK2-P(IC#b-We6!ZMOgA=2z7w$iY#gNkkOEBzBIr#<6$L}rkBC&}Vrt|;*tZW zFXD9)QoN@m9*qJYa+lpnDA_biL^M7Dcrklx0_G1QF2f3GO`4>nEZNgcf4@?HcOdK{ z$i2NS#0*I3w{B_|2l>4cW90(N_khb7B30v4jW=Cb>`&#dJNRKuCKD4n;T(FdyPKGW zbbj-aTSmoyAKy;OF&HZ9PAy-hQ^NEhem-kJ6&@|`E>mIXHP8QXRGEC!!-Y@AcR&{ zNLfYb;*iVlpZ%Zt`0BC%9oUWA@n4?|;U{{OpsA7WCq*p3U$+PfbcH>;`1^YcbJszB zGC9*m&whV0$jZ07|5f?+3t9Q5gL9q#kFSjZD&Ow@=>U47hWt=W?+pLjR)7?Uu4s4s zmWtrNzd+@inOeiQj^E$d1^6OtaR2=8Arkm=Unm~h{eLRoZ2znBEg$)1^;;F)`tuDE zS0w&d<(nO{@-6>OMA9Eu67b9Bss53#kl)rP7WnS$coKj8+l_%F&6KmYq5 z)j9jc>oJis;a^b3ww(QqmTc(#wWRKR$p}(QPtz4@Nbozh-#wr}6?_2`!-K(MDg3<=RtCE=(Zl;XlQ$w42gB_hT?MIAv_1JcX`1hlqOI{a zb+-L+J)dDRbROR2cD;Jx+2DbssW~GF$sso09&XFF*)g_VW?g9%L-`-K6O@IeUCdw^ zCw(qtigW$?2h`M=L{w%y+PeYsFGahl*qOuFu38A$2jAk;o7o9g8+v_qH(9DJd@_1* z(L~_PoSiyF9W@UPD$BTubG`pq2|`5z@M=Ar=0!0FHnp!t7+9U|0I46|=DJU<=*DN? zgH_p#dR~1e>8atSyk)*CW2lsbs(&E=L&WPC&7K<_+OZ}kMli{Ipma&TaxEvrBao#3 z{)t`t^t0H?SuS0vYQd9)k7^bBN^TMp_pW>Z2&|-&qn&$TV4&zMf}S2urRVrm0#`sL zkPUlNO!)ggrM-AeJEi;Tj^bQaEN#-^j<_1QUb+`PKRw$*mD?BWUnR5NRT~47293uT zIJFH`+I|?Jg&f$%#>Y3%+CB@-=q7{t>Fwxq|4{(`z9RST)85~D+1mY5$Me8KiShN< zuN@j;Tq=Y)PXq&lq+|!nEk@N8L_So$wm$4I+dZFYsV=RW5Jq`D{&{y}dwWpjq#oUY z%WMF<;`8UPEg$fpM8dRRw36VT3lgb!xe&>yRFHByg+NXXlH@&~u&m z`jU@uUXq=6SP`mt`IF>cd!_H7<%H_ylk+<(XltN(>-OAu*K_mxbK zkysYls5Wv)xw#%pO9!@qBE)RkxABY-g!({@2^86Gr78jP;(=5DwsbtDOIEsE;E-WtXak3bU3(zs*)_WtMnRhd#-o zmKtk)_Mksz`8;Lv4%HV)eITiBY%K@WiMRnZ`GR!l*&7%`r9lWoR$y)XIOhneh7Y-n z+a$nZg$8@vMmSW6_P!4eXVX%BkVx(cKTg#uX9w~W2aq*Ufb%0(YC1Uubz_U&4d}=+ z>HciJ8(a`mQ_KKKnMI9VDQ&Q~7YpW|CHBq)6*!awEim2z`-T*NoJpWwMI4Gg`dqhv za@2wOXR}*6Gt$ZxvVzNfS(YS^E&jN~88+}d64`j^{N=Lk>BIm3*#9hcG4ZzWwAQUUOozDcyBBg6MEx31e4Yx*I z$3wZ~3k3_S%jjy=(5ElBYty*ME#)hFx7CNdg=TC0W?b1M-l| zX9IV;MJ zLWW36f^eflEbmX563l^2pR+>%sIbT827f-FKP8EXE!2^Cu!yO#K+O?5UPFS(eW*D) zL-34f;g=Wbjc=B3P7ROVzVa4JZ9f%#_O?FZZlsUi^+#v~4!1Zn#9-Bb~Ga7DgW1B%XZnK^YI-9vx4_FAZbFrdHfVe!Rcz7^{bQHa=Zguc}A1DP$})x2+8D~DtoT8AS0e1XrumVA7+HD}TG z#SzSm2M0UQNjFIk({X$7y|8On_=Sai3k#Ky@i&X-%+g{p@Ie+;z>zVxs$#^Gm!K9t z$r}*f2%JxS_Q(?01ES>^?4nXWQNLfByBC2>JTG6-pk5?x^}_{hZ@adjv8y<>-A;>& z3~dXqOYMVxa-??~j9eSTJLkt_cTZrUY`9@Lak6z+?+XWEeN^Amnf0jK&scw7?;#3{{bIL!?>u(yU(hB+s1nqwF5& z7mEM!BFRlK;A`tH-Ye)A;>8}lMb*h(eLCRTpiWE}B*5}7`3bgzT?8^(pV@k%d6T4g z*<%wUF3e*wNN;Mh1LP9zu$ZYK_|qWFgBd%VOU{`Q zSAj8MY6XIQ1FBGz{c7xscz-kug^1Si$lYM*)TLlwlMK5pZ+GWQCB1*(ZeYs;1;=e} zlmhy%_$01G9P23!fm*e6TOo(9RER4=xc*<82&blEr2$mpT6zOaIo`ym#oX~a*y()) zTbRE_tZ-Y0D0IG_>=yy!8K-HV$;rB#^o%o=9DhxyAu8$tz0=+c)xsj<(bp*6QD@gN zS}Te0IWa)guisg^MI@Q<>__bT5rPym&&-fUyJ{I?{4$ZOb{H< zE!UH~CI=eQDIE9r>Whq7@G0)$K`Dk*ija_ci3w(z#kgs&dgHUnA>7+fM1+kxlXXh< zSl+t^<|TU{IeoD+2d}gw__QZpL^W^IriPr>EOU{9aJ}eKT7Pf{a>8_UMB$8bOfX*2 zRxuZlD%9ba>0S305}xRPC8;+hC0Wf|A=LQcd@KgJC8r8^*TEcvCEaj+qWbg4!7rZ) zmL5e8q2`y4Hvha#lj35Su=D=tnOurt&g4KXRGwf09}CJ1*?z2<3gEpEY_6@YrU%WY zWl^VN+B^SPM@NnDrYFnk?&gvYc+IC;Xa>(md*fP=#|jTOACX)XwZJhX!SRm);;ZQ& zZyB-v7_32$Au9NWkx&|1G7bNo@miWUP?qqusR`}(MDmQhyB|LDcQD{YayE6V>^&g! z^yFaU334;m;EN8=ejAx+);Q5?6kG&?NQY5NR~x7-elYuoT>c*5ubC=jZQ_H(O}LCz-ak=H&plKn$Dd{E+z-ewoq_s(I_(SrONvFzS8aR@-Lq zev+`;#esYsbiK)o0H`Vo7=;WmZ1bsJOuR55Bd7tlmg;Oc?6CyE&{+tPHvTub*V3BR zSzrL>SzKIPZyCdJo|<;P(EKO?{ZX=ax=A;}Ewuh((|JxoHk?W_?l|u7fmNaoz^TOa z({WIWGuM&y-TmisKg(Z3*F9hspr4(2+zSk>bfDet)+Ak6&`i2l+D{e1TkWtd#iw?1 za(N0yCct!zF^$=I-9;;$tF>=;rg5uQ=ww5DXKfrS#d)i6#%ZaC5$bU%U?;7JXLe-! z(QZ|9v8U<#oWsn@C=IwXM8QSg?{Lq_jv0LUdClLo&yC0Csr-YSFWzl27JxuP_5@QO zICY_*CvVvi%J--R9bY_AKtAG--A-WWFziegTy~CedD@xm1+_0?=j%}{Zdthk*B>Tw zI^2y!WWNKcWEEt7d4he9~3!8f!@VQ!-r& zr{5vf&HNT=MYF9NxIBQ|lDSY(=|J!Db`y?7zVYh{3JOTaxB)RCHyZH$c|O@|e8&BL zLLeu%In$&ph?Mhfke&xB9N&|BDPh21)>bH?yZvG+gpRa8v$tS z^#iYlA)pYua?~C%8eGQRQ9+SJRg{oGZ4SAHM_>*WX)5QCX}@aI&?``ZcyM}pY6avO zIE|!Pyv3pDYXIYBICmx`^fmuw-cu`M9Z;{lK&}{rYGR6RPH{T*3RwWg_ zDI|s%u4EV)2NAX)xI0p6-w{P>jw6@>M;r|4!>p9cxW5We4GVOuNkS=j1R|&Kzz_q5 z1#tFjX1i|EXwh3WrN3BaVoQS?i+d5041{j=^$lSVU`Lpd|s8Eb@9bMs{w2`Rih%|74-f{7v}XRFkg9IL$#wJEXB6+BT-z2 zju2izL&I7C$E+aI62wyrzcYLG<|_OGT?6QFr?08Db6gz^6=qLw%ngeAAs%N5G@k%E zE3j>R?5KrFLH4$UM2{ZYYQ1ZGTI=c(21cBn)lnKYE#6!FWH6BTfp+IJ zmyid|vn`>U!_SPN&*%e%TU;+<3(gYmaLyyg(2jczV^uisG4a?TF`ZyvaECe?X8q-# zKLg>$%Q-X^cm^|~-2yTjp|(nvAmG~J$Qdp!FHJ)Rou61 z2nIa^xf*2jpD7aRpy@U5^QIr4T7aFQpvw{K(f+y@z@k{VZb~9}d!paVPadJRlT;2r z?MRdy|K%gyk$87%X(@Bmd7`RP_MlZ<#2IysZ_+tfx4H`ItPoT}&KU6Wze4y)*;~4n ze6ntP?prWy_-4R(Y53LK-&Dzv%OKy9aFfLPHdtm#yP7BhJq3nhDTUd%KeS&`Dwu>+ zx(AGaKl-`65P-oz*(U(|r1sm&C#3WUvl+19-9~6KXtG)2=f>&v)PQV}!(8Hb{Ra1C zugixw&zcFevnHFGNZ?NDmE4r?rz3de-w_zo+oN6Kunk6T{%k%LL{MfB)zu()X1xQOWM<1noGczX13A2Fd|p7+V%rt5eIaa7d?$sXe>mW4Fet{;AG@ zCgd7FDFny^JpAO_uh6sloPzPbuOV;GihU4^AVx^Yl13~O>OgbQPhpbZbf>+<0ag?X zY;xMcl+tBU^#IZ&KC*hA*VlOWq`x0BJSaId+B9euMjG(klL$Y_PMH=ALA1FpDzGL- z?K%wquU@_NIfwb<-iUe`Pe&SUxR5_XM;uYMl_{S;gsUj4r25q5n0%o+?dJ5-^k$x; ziaq!hek2PHW|aSc8ChBISjOC&co>d*rSiD0vbhn9a)?!eTCyCKS0y!2^dOedz2OZS z_)c{EJq|Fm@0PJPhYQK|eFo3j&Cm3tc)%%1^tDAIBWllS#l)B>e@&K|oAqU@5J3xv zO2L~HU}jS*=E4|<7xQ#8fuFDM33aS#f@=vIZ*ticZ7p>ZI~*ljc|<2b*2E!P)SqZ= zW21;r1sgS!{9~PHjEWx)4&t=fd2xF0N1mM|oKd~CgLAS*skpART#51ob*s34RxVcI z?m0Zwxr*XqH6K5<2#?z-e7U5k{$)?PFGr0GSsG?}5o8NbkP))WzFo@TAwYg-1C|bc zoKY%b37zP;RDR`kJROUO7Iv+@V)7W5_M;59Rc_a*n7a_YGiG$0pKj=@A~+7PZbo&% z%g@5duUz?rVS4o$K?#j>m|8U*!CBFhsK0iRR8b;TsQKEhO>SktIe#%xMFQap9{X3% zay^fg)o~o?<$4^>MKJij=XTR|PnH^8OG`_tdoS@<2C8+!(l~DC!nB!Ec(zP~ z-il4K5qX11SnXc-IMZGkXs6u%={s|{jbWS#?Q}`t&NR<4A4ux4VQS|EBbuA;fn$+=em_rjmC}p(Qy3-f`iBH6Z1khil=SuYqe55bzD2Zou@KNX7&8|PH8eDAf@YF6 zXb)enGFFFfZ3y>`ow@$R1K%b*W(8FZ;-}8DJ!JJZy&Yk6UR$0*_8X5KXdRWCUBR&B1O{@sF=AQsaCsnMM+PlP2PS3>4@8Y2w5nF@sCDy z0TR{o3#-fV+LD(`2jgJLnROX0dHy^KeLru#gbp@}L9ifanN%K#HhJYpS~cO_dr~J- zQJML;Ku9uo@jUu=R`Kv=L@sIb>Fto_tI}3%n~`@_p>7-o^Qvr)pOJ%b%F0cFPjjN+ z^}_6g#U?h<47#)Gq1@1FV@fnCT^SLHgsvMhiitIDz}xB{3qLB6^cd*iFvPPcx6pZ< zKlYOg-oyuL{=Gb5rEMp`Tv7p`?(y@5MlTjyy$&M(#kQGDQ7;sQatpRV@Rr+3EO^zR ztC7m`SWYOjd2+kf5z?^@#KBEyurjdPMtDpA>mA~o$}-gsAP#!PXE(#7Kgh_5!B69U7#69jradQGd8DifWm> zr}5~sP#$5qOQ46i!f3-1hu8Qso9%6wd9WIEP11zj1Ggu$#|^TV1dlXH(JJ-tOL@Tq zFGtFhySnY$jvHlrEmbk@Pk-97^Sa zR>(+xbS<`Xz4}Z6zr(;Q%(=ChTKk)3*XLI(P;Jj8RTfSsj?#}1(kf<-J(>!zCPgDq z0|x^W4Xg3mH}P;I+%Vqn;(k?3G21fRvy@ocvs`Z_HGp!F$$I6hCh7;)jmV}vZXr;M z8vqCNYSwUV?5#_C=4nr78m&tVI+bwkg{W^0W2JKWUPl_ltnHMutXF^$rpQaD@z^X- zQq%_f`=xO0{R|0d>73Tnse193HBTlskeW(eH^zoi^|=QDS@;RmqXM_^n8w8XB>up1 zVJKMddnF%cl^Y5*HTB{|bzs|L08-=jyTh_|ld>NUDuTUAElr07eCLhN=4H8~{+tp(1g4EQ)VqpNvw9u_T`lo92f(Zttx475-9I^h-@BDw_ tQ@Rtys=;)Ri!aQa{=a75S{NrZ53Rf#t{imbLoM)y`;reO^2MHb{x4NiQ=R|- literal 40603 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 diff --git a/docs/users/getting-started/img/bd_settings_tabs.png b/docs/users/getting-started/img/bd_settings_tabs.png index a1bb61fc94d83008ef89ae71331bd4d1a5c688ef..f2127e550de1430b6e8c461425d579b2f8d65cd1 100644 GIT binary patch literal 11936 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%0AkD??;X_gLTOVMU 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 literal 6892 zcmbt(Wl$SH+ikGoUc9)rI7NbcfuaS96qjHDg1dX5lv3P^7AO#;I23}r6et9OyIUy| zpztws-#_=x+&}O4WB1JN?9Mzpvvc;Gvrru^6+%2(JOBVdsHUo<`-J{atp^AFsozMu zEq?+uPhAxSK=s6n{igw@y}YJ808p2Ne{Y2a0MMqZDaq^mnIGrj>ysNk4Ay+XEFv%2xwcJt1dgdMFb!jz)9Zi)yS{M)yGbUA4ZzK z%^};K^TOl_B#<9DRVDsC z!UxBFq)75M3yDb*QsiL(q&n{+%lb=8q2Yzip>R_-?5-CXlzB!O0251Wo8G|ZHSp_E z$*zhcbF++*G>RF~EAuKfci3g)qci=vLWh_L4mCwMJ_4tu8rUY>8qKeLOki{70z|lR zx@lp*JI5Lp09Q%V(h#0G4HVxohNEoPcC8rW@7pC#m?M)+OapN zI4s(@rehlxtu*yYHT$Dt3>(p-SX0&h70_gT=@jNAqoVz~hsKl7WW`l#Be(IR--DUM zD`^&qUGqxgX8cPO;Qj-q-+90(fH;3GN?1I$L4qHuNWEpj*^s_XF^2|^;tXZI{PWi` z*`U26e?XgWKK~xp2C0jW(ZhQrJ?)kY&|4p)8wV~@gxC{$2jyn$eNNrZ+(-3?F@a3UYr}MXj+Ak z$L0PSazX48%IKho6r^Xm@2d@ zDyHC;%tiA4kTrKBf$o+jiE3-YWt8{cjf6F=kGZ;unc*uBC4NXrtf8BqfI*JJncK5^yqhIs`Q*%Jm@V|H@lI+pd`Q)D@L4G3-FY}= zGR0QxbwJ0}*WP%a-jOZA>f%2`gIM3(l-#IT)BDh>=fEE&De>boBG#?BL*aj^-|}0F z4I~eo(f{OQkcTGAZx+t$Da|24CrPybsd)Eb^KOD9HX3 zwkKrlSlgtGL#C&My^>+T)4^vg|x%>QDAr&P>eM7T3Mj{MkZBE8W%JtP$deo`W zzg9|m?XH9$1~g-hk~aB#KRo*y)|Z3XuCq)$PiM#IQ82rjh95#lMZ%(;+(0>t1lQDm z0otY>d)KsHE}b)GtFo5BJM8>d3_+)mnsqw}yL)X;6bw6oQB1`eg1_E7kaD@=0FyfJ z@5);goHf`Z5DO@DQhGN@6=FhYV$)E)mq4Bd6I){<3weQW1ZfZz&9S<@nx2H~i)F8k zj@Z@>^wxRUEEvX)*2YWW=->VGzxh%ZVaK7p4@u2?x~YF5Sic3cud;W#3mQv_K7bGY zD==)d`_UT2kRd%FTk!bPef|24EDC8)^_Gzn^rq(d>0MxQIM59zay$(Oh-mPMRfu9u zKWh{IFm{a3@}Wtbvs1m%9#I!)wzV5K6EJS_lTR=HzWmnV^y_jUF~dwY#8-SuwdHJK zHcK#Nh!wEK?NP7WGmHU{&_s;y8iiMe727&iaVZ?#J}x(E5vupAqdphcG?fdHJJ$C)RipL5ud8cS3Ww zX-;sP8&N%!oBv|C-OOTE;pRgZn0#RV4Dc&asf0IPVFE!-@@}9)M4MMDKPOv2k$PjQ zy5m5G|LMdqJ{bslczi~)t5F&Y&61cK z2*~QPv6spzCXlbxs+`THB%zk@Z?XT!nm7|cs38KPg8Yc=?I{~7N=ab}Mv7!0T>!N+ z^%?4r?+{KP?}AvsqQTEh|#Njqm<@dhs5uV zS7c;aQriZ@pZ>k_RK5Rcl)rQO@LtEm*wEO(qiqC>zfA?(a3Dz3#<;tE(cHgX&IWVo zW|p6aC}zMxkQne-a#;hvl~`(e6mvd@y`G^%L>|7?A3RAQgbeR+BBTr~y@2r=W%f-hB z&_7nEpT@`I9WVN(eUeH&#rOPX5IPz|dpX`V-5c0^`tpbvBu7Xw zNOZE&3cApGPe(>8HmHVw!?mst?yolyt2SfFIQI*x3+kV7e_`p|0FF zjo#{BTWrf@g5`3$#F@OyM49mE{ppuv#v0ZN)>Xo8L6tjaaD3WYtE|?h9RpQojUa^s zQ_!EPA%V#zPfjgFj&lLVgPDW41& zb$)XifSK6}{yZC#4Urr>jq9TEEIXH$)}R*~WOZ)xb?B+FQ)g^9KX++mNMemZ2oblo zWfgJs%R0SogLF3&{KMmY! z`NY|_VYYg;QO5V=W;eR$Ej=12qEIo5ouq$$KUXtEEld>9tVUSD16PqZzvNbP1!X$Y5@k|Az6BvDKJ#%Ru>dsaFkU9sGTEceI1cyR8 z1$YQnIRb^hS4a+@g}IKaNXpza=>`@?=1|j5`|fw;JaV;_&o*ejjiV3@kqD`V;>hm3 ze7v)G@a!zCuBaOEyv-dF*qRQ-*CtF5J5vk1ZJw_F0zZ~1g27FVWn4#oX0g~^I?{9U zNe}EgO~GZjzt6n?`o0zRiv)oL*W0ZQXwsd#ES3?LkcRPfyivIcUe^=xZJJ%#rhSRO zjebFqD6KK+rE8D*qB=_Ig;EKQjOXeNRV`OE!XlWRg26pP86bQ>$i-szfSk*itD>f@ z-Sqi*c|&VO_J$w5;9<3R(c=OoUa4 zj~C8I(wp_)D3QqK#F{J86eoD>pRs7U**nry&zf>E6-Ot3sYxmy(2i&uU%3GX~_~QaguYawxSgix7DK4rX17 zkb}L&w_F_(d|%#h6LevuDrcD?tq{hl*Y~XO(r7gW19Ng~ymCcX%X*i%;UKkNo#)HloMo0cO8hT}8xlP_+w z)$txYTW<6nLB;*Afw>nmP*2U`YRq_hQIOV2gZ2T+t<_N6Kf%J3Ub^o6<$0{dgO1OF zu%MUqU^A`sSl?vOy04(Q3%fry(W8#R;yT6AvUyZKHAXH1{6J2J;ABGnJjND@G*^8V z=~&+?Y_&_0I(e#rP0YDu2fXItylU;FIE9Qdy8U49Dhdx0xmr*hq%6Dq(BQCe)TMPP zON`jK03-Jgdk=*v%|4Ggw)=!gH$#`$5WG$?0S#7YJc} zPJ^2`8uT!0IM-iiLgys;`B&5!$V19lR%=9jqXOSvpGqUxv_FQI-#!VYbUx8Q>CrLV zG1VRX0xhqtCW(@QVSM#E1F3vSM^F@IGit7_D?Zn&LaNj?)mI2wFccWL*v41YE(uFYw*uvv9-mF#SUShSc z@Nq$!+(DV-*D;`(qsvW?ZVO+k+-S}-=!Qjz!kn!Awc=pbT;jl8&RDwvB zi~uVFk!(nBQ+jtxe)hJLcr2_<0H7}gK`?JbMHa~rJA+U=?0ihsh)?!iga&ne~|-J(`Kj$^^U_W+pD?(OscBZCh=a_dQyYu>afb zKFvFB^LTX8l&c}ZnFy>TD_m+bg4Nbh&*y!`QDvRL(*COvZoXkE72E100WgvCWThkO zPbB)Och(4%#rvL=V7uk1YuWZwz)@i840ea3Jlh|Qmx2NEgxT7%1Dt#IzRSX_q<{MR zpfbO8-kqJ=C`Q^bG8CVC4`y&!M(|;4J$^#4Sk_{!opnjwr}i2};Fecb(f~mv9zEI& zj^}k`i|Bxqffw!CfKoOSOiNyNOBVZR^Ol(|JKrG?}m(8r{ zNsl&^X?`79jIs<|`RC^qm+mqFJ=Hy4@E((iKAU7j95fo=p-wsiWh9EGvx8Zwsvh(1 z!=+dLWA5%e$Gr4RofVx+(i1kk-2#V9a&Xk-UWxTNPU%!XSmp=`zWi;v*SLD(M3oK?e%K`*ElRNdZvcwamq@2HH0Yq{c^-U z)d`Tl@so=HMh$fnQmXInI1g){3C+!B4_p+d%jShEQ`NryI{q%E;CUmZ)S3lUP-4*I&g9-|nTh*9Ugm;+I0xhqCoYrrb=tl0uh z!DSBp;)-}?KD?~F5Zlj_L!LFG_gVSFl9;k`bS&|)zo)%9Ve-70yC#^V~DY>%TafLqHY$8nl3-uED@ z1c~hm0f>e-be#*=4-fY?(Fe%(V5w8(;HlwThVvrXn#pnF$K4~Y^um%~-q%ixS^p%j zwBp6{y&{ly`c>fytl+R8f(&-m2b|j;V6XuowA6I1GP{@|_ zoLCK9WwoYKl5itsJaF1)qs%0*fJPqk zjI)LHX`A=C@e@t(+W%8u_;bFEtxawt3%K9-5``1+?Op*)CCL`>@MjegY_s{}JKupz zy+3rPW~KIWoPM#n8XBrmb6YeI8{8zGLeM9$Sbm7P`NIhdw5hw!qHjO4A|+U;cpRnt zEgtutfhMZ=Liv}L;%;y>kMvuqzAL1iD9-)A(R zuxBKIuWX=X`JrD1#I-^o&+T1?6W#Y1oVb?mwdyun^Jog(HUn)0H18%!I3Ezw(whOA zhB>r3*|abjg-|!x&n;)(5Qi40-xj<5!Mmn<*fUZxfn96TXkaU5Yfj*@B^nE1Sa%Q6Xer7byq9mBjixwdhp4KEfgCQ+#_ zpT=q|3od}kDif`KHV40Py$7o2w-NJbfy-4cw8r@}EvK#NjOa4c9HCn#ef@?yC6^vK zYjiimn`05NKN5j%FjPcIi(0TIp&>v_Dk#P+$k8#9!X$1@`_K;MqhHQ#BB$#7HootJ zd37`TN!6IJag>yJ?y~vn{66pJ5tbA(iuD!x#LK)Rl3_1gk9{wgf60-|e&|iHPl)#lE;5{xmP**NlT;5Cv$Uw z&7t%We8&$ilGoe2r?N#N7<~r5Yl+P(lcTa{{*5#@=WGJ~stcU%KhY{=?+BgyI;H+j zG|{6ZHsW1-BEie>3V^_eBXi$mmYW|p1Mo8mO4RuQ_xH0na%YRNLiL&{Qlg8F`OrL< z#$L0DHzO#aYZ(uTs5cY}<^8PYY#;T90%cU!D z8;CjdWCwFf*jYSrH#J1**|nu}!vH0VWsyt&l|24ZeC6U$%0#P*PlGasNg92Pv%fk> z3G=*u`K40e|5+F};~~W6%n>=BS8CL_-mk&zKP}D*%FoWqfqllR%?j(j8k`G~YhNBl z1v@u9)tMYdidV|!B%)&(fzn~Hi@W5DbH8hUL T55igu#EU0uk(0) diff --git a/docs/users/guides/img/addon_card.png b/docs/users/guides/img/addon_card.png index be42cb2a8077b34e4fe89f11bbc70e040ede71ce..af39828e0438f4307f5a94883a1e6b2ff47519ee 100644 GIT binary patch literal 13834 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

*)*DDEEM;8dq^{l$Bb%vhTnL|nO6=} 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 ZL@8IPM3NUF!3e;Qf~<-RRLV5?e*k%Z&d2}& literal 13286 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 Date: Fri, 5 Dec 2025 17:10:05 +1100 Subject: [PATCH 4/7] correct grammar --- docs/plugins/concepts/patching.md | 6 ++++-- docs/plugins/concepts/react.md | 2 +- docs/plugins/concepts/webpack.md | 4 ++-- docs/plugins/introduction/environment.md | 2 +- docs/plugins/introduction/structure.md | 12 ++++++------ docs/plugins/tutorials/addons.md | 2 +- docs/plugins/tutorials/discord.md | 2 +- docs/plugins/tutorials/dom.md | 2 +- docs/plugins/tutorials/settings.md | 2 +- docs/plugins/ui/modals.md | 2 +- docs/plugins/ui/settings/overview.md | 4 ++-- docs/themes/concepts/performance.md | 2 +- docs/themes/concepts/preprocessing.md | 6 +++--- docs/themes/introduction/structure.md | 6 +++--- docs/themes/tutorials/creating.md | 4 ++-- docs/users/getting-started/troubleshooting.md | 4 ++-- docs/users/guides/installing-addons.md | 2 +- 17 files changed, 33 insertions(+), 31 deletions(-) diff --git a/docs/plugins/concepts/patching.md b/docs/plugins/concepts/patching.md index bf6f53c..921c17b 100644 --- a/docs/plugins/concepts/patching.md +++ b/docs/plugins/concepts/patching.md @@ -18,13 +18,15 @@ It's a great way to modify or extend Discord's functionality with your own while ### How can I patch a function? -Unfortunately, you can't patch a function *directly*, you have to modify the *reference* to the function that other code uses. That means if your target function is just a locally or globally available function like this +Unfortunately, you can't patch a function *directly*, you have to modify the *reference* to the function that other code uses. That means if your target function is just a locally or globally available function like this: ```js function yourTarget() {} ``` -Then you can't really affect it. However, if your target is part of an object in some way, like being contained in an imported module, you can overwrite that reference with your own function causing everyone to call your function instead. +then you can't really affect it. + +However, if your target is part of an object in some way, like being contained in an imported module, you can overwrite that reference with your own function causing everyone to call your function instead. ```js:line-numbers{13-17} const someObject = { diff --git a/docs/plugins/concepts/react.md b/docs/plugins/concepts/react.md index 5031747..106fba5 100644 --- a/docs/plugins/concepts/react.md +++ b/docs/plugins/concepts/react.md @@ -112,7 +112,7 @@ With this simple patch, we will log out the return value on every render call bu ![return_value_expanded](./img/return_value_expanded.png) ::: -What you see here if a fairly typical result of one of these render calls. Take a second and get familiar with the structure, its likely you'll be seeing a lot more of them going forward. However, since we want to see where to add our component, expand the tree out like we did above in the second image. +What you see here if a fairly typical result of one of these render calls. Take a second and get familiar with the structure, it's likely you'll be seeing a lot more of them going forward. However, since we want to see where to add our component, expand the tree out like we did above in the second image. Take a look at the objects near the cursor in the image. This seems to be exactly where we want to render. Take a note of the object path to this object or copy it using the built-in tool. diff --git a/docs/plugins/concepts/webpack.md b/docs/plugins/concepts/webpack.md index 7c1535f..2758548 100644 --- a/docs/plugins/concepts/webpack.md +++ b/docs/plugins/concepts/webpack.md @@ -143,7 +143,7 @@ Do you remember this pattern from earlier? }) ``` -Did you notice that `Z` wasn't the only option here? `kWm` is also there, and it represents other potential exports by a module. Discord uses [SWC](https://swc.rs/) to transpile their code, and it mangles the name of exports into unreadable things like this. This is fine if the export these keys point to is an object. But when the key points directly to a function, we will need the name of the key as well in order to perform [function patching](./patching.md). +Did you notice that `Z` wasn't the only option here? `kWm` is also there, and it represents other potential exports by a module. Discord uses [SWC](https://swc.rs/) to transpile their code, which mangles the name of exports into unreadable things like this. This is fine if the export these keys point to is an object. But when the key points directly to a function, we will need the name of the key as well in order to perform [function patching](./patching.md). Thankfully, BetterDiscord has an API exactly for this case because it can be so frustrating to do manually. It's called `BdApi.Webpack.getWithKey` and as the name suggests, it gets a module/value along with the corresponding key. Here is a quick example usage: @@ -156,4 +156,4 @@ Here we are looking for the function that opens the context menus in Discord and ### searchExports -You probably noticed in the example directly above that we used `{searchExports: true}`. This is an option available to all the Webpack APIs. It causes BetterDiscord to loop over all the exports of every module to see if they match your filter, rather than testing the whole module at once. This is used a lot in plugins when searching for objects, classes, and instantiations, since patching with the key is not crucial. \ No newline at end of file +You probably noticed in the example directly above that we used `{searchExports: true}`. This is an option available to all the Webpack APIs. It causes BetterDiscord to loop over all the exports of every module to see if they match your filter rather than testing the whole module at once. This is used a lot in plugins when searching for objects, classes, and instantiations since patching with the key is not crucial. \ No newline at end of file diff --git a/docs/plugins/introduction/environment.md b/docs/plugins/introduction/environment.md index 1ec84af..60d0a57 100644 --- a/docs/plugins/introduction/environment.md +++ b/docs/plugins/introduction/environment.md @@ -61,7 +61,7 @@ const fs = require("fs"); const myData = fs.readFileSync("myfile.txt", "utf8"); ``` -Though this guide won't be giving a tutorial on the Node.js standard library–their official docs do that–you will see example usages throughout. +Though this guide won't be giving a tutorial on the Node.js standard library—their official docs do that—you will see example usages throughout. ## Plugin API diff --git a/docs/plugins/introduction/structure.md b/docs/plugins/introduction/structure.md index 5c16eb8..9774c4f 100644 --- a/docs/plugins/introduction/structure.md +++ b/docs/plugins/introduction/structure.md @@ -8,7 +8,7 @@ description: The requirements and format of a plugin. - There are currently only two types of addons: plugins and themes. - Distributed addons are limited to a single file. - The distributed file must be named in the form `..` where name is the addon name, type is the addon type, and ext is the standard file extension. - - Addon files are split into two major sections, the meta, and the body. + - Addon files are split into two major sections: the meta and the body. - Meta sections (described more below) contain important information about the addon for BetterDiscord, the body section is the main portion of developer content. - Addons are dynamically added, removed, and updated to match the files on the users' system. @@ -47,7 +47,7 @@ And a fully filled out meta using all the fields would look something like this: |Field|Required|Description| |-----|:------:|-----------| -|name|✅|The name of the addon. Typically, does not contain spaces, but is allowed.| +|name|✅|The name of the addon. It typically does not contain spaces, but it is allowed.| |author|✅|The name of you the developer.| |description|✅|A basic description of what the addon does.| |version|✅|Version representing the current update level. [Semantic versioning](https://semver.org/) recommended.| @@ -74,7 +74,7 @@ BetterDiscord plugins must be in vanilla JavaScript and be contained in a single Plugin files must be named in the format `*.plugin.js` where `*` is representative of any string. Usually this matches the name of the plugin without any spaces or special characters, however that is not a requirement. -Plugin files are split into two main pieces, the meta, and the plugin code. If either of these are missing the plugin will not load. +Plugin files are split into two main pieces: the meta and the plugin code. If either of these are missing the plugin will not load. ### Details @@ -92,7 +92,7 @@ module.exports = () => ({ }); ``` -But that of course is not the only way to do it. Many people like the syntactic sugar and extensibility of classes. +But that, of course, is not the only way to do it. Many people like the syntactic sugar and extensibility of classes. For example: ```js module.exports = class { @@ -105,7 +105,7 @@ module.exports = class { }; ``` -While others prefer a more modular functional style. +Others prefer a more modular functional style: ```js const start = () => {}; @@ -116,7 +116,7 @@ module.exports.start = start; module.exports.stop = stop; ``` -Of course there's those that prefer to wrap themselves up for safekeeping. +Of course, there's those that prefer to wrap themselves up for safekeeping: ```js module.exports = () => { diff --git a/docs/plugins/tutorials/addons.md b/docs/plugins/tutorials/addons.md index 5a4a4ca..520e133 100644 --- a/docs/plugins/tutorials/addons.md +++ b/docs/plugins/tutorials/addons.md @@ -5,7 +5,7 @@ description: Work with other addons. # Addon Interaction -Within BetterDiscord you can interact with different addons in two main ways. Either through direct interaction–like where one plugin puts something in the global scope, and another plugin uses it–or through the `BdApi`. That second one is what we'll be taking a look at today. +Within BetterDiscord you can interact with different addons in two main ways. Either through direct interaction—like where one plugin puts something in the global scope, and another plugin uses it—or through the `BdApi`. That second one is what we'll be taking a look at today. ## AddonAPI diff --git a/docs/plugins/tutorials/discord.md b/docs/plugins/tutorials/discord.md index 7fb2f79..1b2d9fa 100644 --- a/docs/plugins/tutorials/discord.md +++ b/docs/plugins/tutorials/discord.md @@ -5,7 +5,7 @@ description: Modifying existing parts of Discord. # Changing Discord -Using DOM manipulation we learned earlier and some new techniques, you can not only add features to Discord–like the button we added in an earlier section–but you can alter existing functionality of the app. +Using DOM manipulation we learned earlier and some new techniques, you can not only add features to Discord—like the button we added in an earlier section—but you can alter existing functionality of the app. ## Intercepting Events diff --git a/docs/plugins/tutorials/dom.md b/docs/plugins/tutorials/dom.md index e21a1fd..cc0115d 100644 --- a/docs/plugins/tutorials/dom.md +++ b/docs/plugins/tutorials/dom.md @@ -144,7 +144,7 @@ BdApi.DOM.addStyle("myPluginName", `.my-button { }`); ``` -Which can later be removed using the same ID from before +Which can later be removed using the same ID from before, like this: ```js BdApi.DOM.removeStyle("myPluginName"); diff --git a/docs/plugins/tutorials/settings.md b/docs/plugins/tutorials/settings.md index 3164e9f..ccf86d0 100644 --- a/docs/plugins/tutorials/settings.md +++ b/docs/plugins/tutorials/settings.md @@ -133,7 +133,7 @@ for (const key of keys) { ::: -The first options–saving the entire object under a single key–may seem redundant at first, but it allows the saving to be done in a single operation. Having it under a `settings` key means you can save other plugin relevant data under different keys without worrying about key collision. It also means that when you load the settings, you can load it in a single operation without having to know the keys beforehand. +The first options—saving the entire object under a single key—may seem redundant at first, but it allows the saving to be done in a single operation. Having it under a `settings` key means you can save other plugin relevant data under different keys without worrying about key collision. It also means that when you load the settings, you can load it in a single operation without having to know the keys beforehand. ### Loading Settings diff --git a/docs/plugins/ui/modals.md b/docs/plugins/ui/modals.md index 51f69d0..9057366 100644 --- a/docs/plugins/ui/modals.md +++ b/docs/plugins/ui/modals.md @@ -59,7 +59,7 @@ BdApi.UI.alert( ![React Console](./img/alert_console.png) ::: -Important to note for later that `alert` returns a unique modal ID used internally by Discord. We won't be going over its usage here–it's safe to ignore–but may be covered by advanced guides. +Important to note for later that `alert` returns a unique modal ID used internally by Discord. We won't be going over its usage here—it's safe to ignore—but may be covered by advanced guides. ## Confirmation Modals diff --git a/docs/plugins/ui/settings/overview.md b/docs/plugins/ui/settings/overview.md index f76a037..3778c52 100644 --- a/docs/plugins/ui/settings/overview.md +++ b/docs/plugins/ui/settings/overview.md @@ -8,7 +8,7 @@ order: 0 It's recommended that you read the [related tutorial](../../tutorials/settings.md#panel-builder) before proceeding! ::: -BetterDiscord provides a convenient suite of setting types either via a JSON-like API or via direct React Component usage. That said, do keep in mind that you are not limited to these built-in settings types or even the format. Even the JSON-like API provides a way to use it hybrid with custom components for advanced users. These APIs simply act as a convenient way for plugin developers to quickly scaffold Discord-like settings panels consistently. These APIs and components are stable since they are created by BetterDiscord entirely and are not a wrapper around Discord's internal components. +BetterDiscord provides a convenient suite of setting types either via a JSON-like API or via direct React Component usage. That said, do keep in mind that you are not limited to these built-in settings types or even the format. Even the JSON-like API provides a way to use it hybrid with custom components for advanced users. These APIs simply act as a convenient way for plugin developers to quickly scaffold settings panels that look and feel native to Discord. These APIs and components are stable since they are created by BetterDiscord entirely and are not a wrapper around Discord's internal components. ## Demo @@ -40,7 +40,7 @@ Setting Groups are just a list of setting items with some additional UI. If you ### Settings Panel -This is the highest level component, and it acts as the wrapper to all of your settings UI. It is a pretty generic component that allows for plenty of customization including custom components. +This is the highest level component and acts as the wrapper to all of your settings UI. It is a pretty generic component that allows for plenty of customization including custom components. ## Usage diff --git a/docs/themes/concepts/performance.md b/docs/themes/concepts/performance.md index 7abff60..0594582 100644 --- a/docs/themes/concepts/performance.md +++ b/docs/themes/concepts/performance.md @@ -59,6 +59,6 @@ There are a few different techniques that improve your animations and transition You can indicate to the browser before animations and transitions what properties will change which can help the browser optimize performance. Just add `will-change: property;` to the element in question. -As we talked about above, not all animations will be rendering on the GPU when available. There are a couple of ways to try and trigger this, and it usually involves creating new paint layers. If you're unfamiliar with this concept, that's understandable, it's a concept internal to web browsers. But if you do want to go down this route, you can try adding a 3d `transform` to the element that does nothing (`transform: translateZ(0)`). This works in all browsers. If you're targeting just modern browsers (like Chrome/Discord) then it's enough to just do `will-change: transform`. +As we talked about above, not all animations will be rendering on the GPU when available. There are a couple ways to try and trigger this, and it usually involves creating new paint layers. If you're unfamiliar with this concept, that's understandable, it's a concept internal to web browsers. But if you do want to go down this route, you can try adding a 3d `transform` to the element that does nothing (`transform: translateZ(0)`). This works in all browsers. If you're targeting just modern browsers (like Chrome/Discord) then it's enough to just do `will-change: transform`. If you want to learn more about performant CSS animations and even learn how to debug your own, check out the [animation guide](https://web.dev/animations-guide/) from web.dev. \ No newline at end of file diff --git a/docs/themes/concepts/preprocessing.md b/docs/themes/concepts/preprocessing.md index 001f2b5..28eb661 100644 --- a/docs/themes/concepts/preprocessing.md +++ b/docs/themes/concepts/preprocessing.md @@ -22,7 +22,7 @@ These systems can enable you to make more complex themes that are easily maintai There are many options these days when it comes to CSS preprocessors. The most popular options are Sass/SCSS, Less, Stylus, and PostCSS*. You can read a brief introduction to each of them [here](https://www.bitdegree.org/tutorials/css-preprocessor/). Or for even more options take a look at [this article](https://www.sitepoint.com/6-current-options-css-preprocessors/). -*PostCSS is a bit of an exception because it is more of a post-processor, it can do all sorts of things with your CSS including handling the preprocessing through the other 3 mentioned preprocessors. Also unlike the others, PostCSS does not have all the features out of the gate, it is a modular system so you only include what features you need. +*PostCSS is a bit of an exception because it is more of a post-processor, it can do all sorts of things with your CSS including handling the preprocessing through the other 3 mentioned preprocessors. Also unlike the others, PostCSS does not have many features out of the gate, it is a modular system so you only include what features you need. ### Which is right for me? @@ -90,7 +90,7 @@ As a quick explanation of what's going on here: `map: false` means we are not ma ### Code -With the set-up out of the way, we're actually almost done. Let's just make our CSS files. +With the setup out of the way, we're actually almost done. Let's just make our CSS files. ::: code-group @@ -119,7 +119,7 @@ With the set-up out of the way, we're actually almost done. Let's just make our Seems almost too easy, right? Well let's run `npm run build` anyway and see what happens. -It seems to build just fine, and there's a new `dist` folder with a `import.css` inside. +It seems to build just fine, and there's a new `dist` folder with an `import.css` inside. ```css [dist/import.css] .wrapper-2PSQCG, diff --git a/docs/themes/introduction/structure.md b/docs/themes/introduction/structure.md index e5e58fc..a9568e2 100644 --- a/docs/themes/introduction/structure.md +++ b/docs/themes/introduction/structure.md @@ -7,7 +7,7 @@ order: 2 - There are currently only two types of addons: plugins and themes. - Distributed addons are limited to a single file. - The distributed file must be named in the form `..` where name is the addon name, type is the addon type, and ext is the standard file extension. - - Addon files are split into two major sections, the meta and the body. + - Addon files are split into two major sections: the meta and the body. - Meta sections (described more below) contain important information about the addon for BetterDiscord, the body section is the main portion of developer content. - Addons are dynamically added, removed, and updated to match the files on the users' system. @@ -46,7 +46,7 @@ And a fully filled out meta using all the fields would look something like this: |Field|Required|Description| |-----|:------:|-----------| -|name|✅|The name of the addon. Typically, does not contain spaces, but is allowed.| +|name|✅|The name of the addon. It typically, does not contain spaces, but it is allowed.| |author|✅|The name of you the developer.| |description|✅|A basic description of what the addon does.| |version|✅|Version representing the current update level. [Semantic versioning](https://semver.org/) recommended.| @@ -64,7 +64,7 @@ BetterDiscord themes must be in vanilla CSS and be contained in a single file in Theme files must be named in the format `*.theme.css` where `*` is representative of any string. Usually this matches the name of the theme without any spaces or special characters, however that is not a requirement. -Theme files are split into two main pieces, the meta, and the CSS. If either of these are missing the theme will not load. +Theme files are split into two main pieces: the meta and the CSS. If either of these are missing the theme will not load. ### CSS diff --git a/docs/themes/tutorials/creating.md b/docs/themes/tutorials/creating.md index b82f893..e81e326 100644 --- a/docs/themes/tutorials/creating.md +++ b/docs/themes/tutorials/creating.md @@ -14,7 +14,7 @@ Let's start with the premise that we want to make Discord look more like [Visual ## Analysis -Since we're using VSCode as our point of reference, it's a good idea to work out how to map one UI to the other. With VSCode, it's not too difficult. There are the controls on the left panel which is narrow, just like the guild list. We can map those together. The `Explorer` pane of VSCode roughly lines up with where the channel list, DM list, and account container are in Discord. The main editor panel can map to the general chat area, while the terminal at the bottom can map to the text area. But what do we do about the member list on the right? There is no default right-hand panel in VSCode. But the color scheme and layout of the member list is roughly the same as the channel list, so we can map that to the `Explorer` pane as well and make the interface somewhat symmetrical. +Since we're using VSCode as our point of reference, it's a good idea to work out how to map one UI to the other. With VSCode, it's not too difficult. There are the controls on the left panel which is narrow, just like the guild list. We can map those together. The `Explorer` pane of VSCode roughly lines up with where the channel list, DM list, and account container are in Discord. The main editor panel can map to the general chat area, while the terminal at the bottom can map to the `textarea`. But what do we do about the member list on the right? There is no default right-hand panel in VSCode. But the color scheme and layout of the member list is roughly the same as the channel list, so we can map that to the `Explorer` pane as well and make the interface somewhat symmetrical. ## Implementing @@ -39,7 +39,7 @@ Let's get back to the guild list. The first step to theming it is to understand ::: -But you might be asking why that element specifically? We select this element, because it's the highest element in the DOM tree without going into a shared container. That is to say, if you select the next ancestor in the DOM tree you'll see that it suddenly includes the chat, channel, and member list. Since we're targeting the guild list, this is our starting point. We can always traverse down the tree as needed. +But you might be asking: "Why that element specifically?" We select this element, because it's the highest element in the DOM tree without going into a shared container. That is to say, if you select the next ancestor in the DOM tree you'll see that it suddenly includes the chat, channel, and member list. Since we're targeting the guild list, this is our starting point. We can always traverse down the tree as needed. Looking at this element however, we can see that the background for the guild list is being set on this element. Check the `Styles` panel in the screenshot above. We can see it's being set to a variable called `--background-tertiary`. So we have two options, override the background for this element, or set this Discord variable to our value. Let's try for the latter and add this to our theme: diff --git a/docs/users/getting-started/troubleshooting.md b/docs/users/getting-started/troubleshooting.md index d3600b9..0e903b1 100644 --- a/docs/users/getting-started/troubleshooting.md +++ b/docs/users/getting-started/troubleshooting.md @@ -56,7 +56,7 @@ If you are on Linux try running with the `--no-sandbox` If the installer does not seem to open, follow these steps: 1. Download and install [7-Zip](https://www.7-zip.org/) 1. Right-click and extract the BetterDiscord installer into a folder. -1. Run the .exe found in the folder. +1. Run the `.exe` found in the folder. OR @@ -96,7 +96,7 @@ Your installer is out of date, please go to the [BetterDiscord website](https:// ::: details ❌ EACCES: permission denied, mkdir", or any error where at "shims" there is a "mkdir" error -The Discord installation has been corrupted. Try to reinstall Discord. If Discord fails to reinstall, or you still run into this error then your best bet is [cleanly uninstalling Discord](https://discordtips.com/how-to-fully-uninstall-discord/) then installing it again. +The Discord installation has been corrupted. Try to reinstall Discord. If Discord fails to reinstall, or if you still run into this error, then your best bet is [cleanly uninstalling Discord,](https://discordtips.com/how-to-fully-uninstall-discord/) then installing it again. ::: diff --git a/docs/users/guides/installing-addons.md b/docs/users/guides/installing-addons.md index 94d63bf..8151e82 100644 --- a/docs/users/guides/installing-addons.md +++ b/docs/users/guides/installing-addons.md @@ -17,7 +17,7 @@ The second half of this video shows exactly how to install addons. 1. Download that plugin or theme to your computer. 1. In Discord, go to your BetterDiscord settings and select either the `Plugins` or `Themes` tab depending on what you chose in the first step. 1. At the top click the `Open XXXXXX Folder` button. -1. Drag and drop, or move, the plugin, or theme you downloaded into this folder. +1. Drag and drop the plugin or theme you downloaded into this folder, or move it manually. 1. Go back to your `Plugins` or `Themes` pages and enable your plugin or theme. ![Addon Card](./img/addon_card.png) From 91a8ff735c05bfe0d332975feb97ba01a1856611 Mon Sep 17 00:00:00 2001 From: Huderon Date: Fri, 5 Dec 2025 17:27:43 +1100 Subject: [PATCH 5/7] fix grammar --- docs/plugins/concepts/webpack.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plugins/concepts/webpack.md b/docs/plugins/concepts/webpack.md index 2758548..03c8ac9 100644 --- a/docs/plugins/concepts/webpack.md +++ b/docs/plugins/concepts/webpack.md @@ -143,7 +143,7 @@ Do you remember this pattern from earlier? }) ``` -Did you notice that `Z` wasn't the only option here? `kWm` is also there, and it represents other potential exports by a module. Discord uses [SWC](https://swc.rs/) to transpile their code, which mangles the name of exports into unreadable things like this. This is fine if the export these keys point to is an object. But when the key points directly to a function, we will need the name of the key as well in order to perform [function patching](./patching.md). +Did you notice that `Z` wasn't the only option here? `kWm` is also there, and it represents other potential exports by a module. Discord uses [SWC](https://swc.rs/) to transpile their code, which mangles the names of exports into unreadable things like this. This is fine if the export these keys point to is an object. But when the key points directly to a function, we will need the name of the key as well in order to perform [function patching](./patching.md). Thankfully, BetterDiscord has an API exactly for this case because it can be so frustrating to do manually. It's called `BdApi.Webpack.getWithKey` and as the name suggests, it gets a module/value along with the corresponding key. Here is a quick example usage: From 2c1074c5cced148c5e4f72c3893792c62ede5c4b Mon Sep 17 00:00:00 2001 From: Huderon Date: Fri, 5 Dec 2025 17:29:05 +1100 Subject: [PATCH 6/7] fix grammar --- docs/plugins/concepts/webpack.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/plugins/concepts/webpack.md b/docs/plugins/concepts/webpack.md index 03c8ac9..f72aed2 100644 --- a/docs/plugins/concepts/webpack.md +++ b/docs/plugins/concepts/webpack.md @@ -143,7 +143,7 @@ Do you remember this pattern from earlier? }) ``` -Did you notice that `Z` wasn't the only option here? `kWm` is also there, and it represents other potential exports by a module. Discord uses [SWC](https://swc.rs/) to transpile their code, which mangles the names of exports into unreadable things like this. This is fine if the export these keys point to is an object. But when the key points directly to a function, we will need the name of the key as well in order to perform [function patching](./patching.md). +Did you notice that `Z` wasn't the only option here? `kWm` is also there, and it represents other potential exports by a module. Discord uses [SWC](https://swc.rs/) to transpile their code. SWC mangles the names of exports into unreadable things like this. This is fine if the export these keys point to is an object. But when the key points directly to a function, we will need the name of the key as well in order to perform [function patching](./patching.md). Thankfully, BetterDiscord has an API exactly for this case because it can be so frustrating to do manually. It's called `BdApi.Webpack.getWithKey` and as the name suggests, it gets a module/value along with the corresponding key. Here is a quick example usage: From 832c5f04792a50d9867a8fd669a6b7864fbb4c5b Mon Sep 17 00:00:00 2001 From: Huderon Date: Sat, 6 Dec 2025 06:21:04 +1100 Subject: [PATCH 7/7] pedantry --- docs/users/getting-started/configuration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/users/getting-started/configuration.md b/docs/users/getting-started/configuration.md index 910cecd..c0aa3fa 100644 --- a/docs/users/getting-started/configuration.md +++ b/docs/users/getting-started/configuration.md @@ -62,9 +62,9 @@ Settings that affect all editors used inside BetterDiscord. This option simply determines whether line numbers should be shown. -### Mini-map +### minimap -This option determines if the mini-map that represents the code on the right-hand side should be hidden or shown. +This option determines if the minimap that represents the code on the right-hand side should be hidden or shown. ### Reference Tooltips