diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..7e21597
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,34 @@
+{
+ "parser": "@typescript-eslint/parser",
+ "parserOptions": {
+ "jsx": true,
+ "useJSXTextNode": true,
+ "ecmaVersion": 2018,
+ "sourceType": "module",
+ "project": "./tsconfig.json"
+ },
+ "plugins": [
+ "@typescript-eslint",
+ "roblox-ts",
+ "prettier"
+ ],
+ "extends": [
+ "plugin:@typescript-eslint/recommended",
+ "plugin:roblox-ts/recommended",
+ "prettier/@typescript-eslint",
+ "plugin:prettier/recommended"
+ ],
+ "rules": {
+ "prettier/prettier": [
+ "warn",
+ {
+ "semi": true,
+ "trailingComma": "all",
+ "singleQuote": false,
+ "printWidth": 120,
+ "tabWidth": 4,
+ "useTabs": true
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml
new file mode 100644
index 0000000..fd2fbc2
--- /dev/null
+++ b/.github/workflows/CI.yml
@@ -0,0 +1,41 @@
+name: CI
+
+on: [push, workflow_dispatch]
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: install local npm packages
+ run: npm i --production=false
+ - name: run eslint
+ run: npm run eslint
+ unit-tests:
+ runs-on: windows-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: download roblox install script
+ run: Invoke-WebRequest -Uri "https://raw.githubusercontent.com/OrbitalOwen/roblox-win-installer/master/install.py" -OutFile install.py
+ - name: download settings file
+ run: Invoke-WebRequest -Uri "https://raw.githubusercontent.com/OrbitalOwen/roblox-win-installer/master/GlobalSettings_13.xml" -OutFile GlobalSettings_13.xml
+ - name: install pip deps
+ run: pip install wget psutil
+ - name: install roblox
+ run: python install.py "${{ secrets.ROBLOSECURITY }}"
+ - name: install roblox-ts
+ run: npm i -g roblox-ts
+ - name: install local npm packages
+ run: npm i --production=false
+ - name: compile typescript code
+ run: rbxtsc --type=game
+ - name: install foreman
+ uses: rojo-rbx/setup-foreman@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ - name: install foreman packages (rojo, run-in-roblox)
+ run: foreman install
+ - name: run rojo build
+ run: rojo build -o .\\unit_tests.rbxlx
+ - name: run tests
+ run: run-in-roblox --place .\\unit_tests.rbxlx --script .\\spec.server.lua
diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml
new file mode 100644
index 0000000..8561a96
--- /dev/null
+++ b/.github/workflows/Release.yml
@@ -0,0 +1,76 @@
+name: Release
+
+on: [workflow_dispatch]
+
+jobs:
+ release:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install NodeJS
+ uses: actions/setup-node@master
+ with:
+ node-version: 12.16.2
+ registry-url: 'https://registry.npmjs.org'
+ - name: get-npm-version
+ id: package-version
+ uses: martinbeentjes/npm-get-version-action@master
+ - name: install roblox-ts
+ run: npm i -g roblox-ts
+ - name: install local npm packages
+ run: npm i --production=false
+ - name: publish to npm
+ run: npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
+ - name: clean-up package output
+ run: rm -rf ./out
+ - name: compile typescript code for model
+ run: rbxtsc --type=model
+ - name: install foreman
+ uses: rojo-rbx/setup-foreman@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
+ - name: install foreman packages (rojo, run-in-roblox)
+ run: foreman install
+ - name: run rojo build
+ run: rojo build -o ./value-holders-${{ steps.package-version.outputs.current-version }}.rbxmx ./standalone-model.project.json
+ - name: create-release
+ uses: actions/create-release@latest
+ id: create_release
+ with:
+ draft: false
+ prerelease: false
+ release_name: ${{ steps.package-version.outputs.current-version }}
+ tag_name: ${{ steps.package-version.outputs.current-version }}
+ body_path: CHANGELOG.md
+ env:
+ GITHUB_TOKEN: ${{ github.token }}
+ - name: upload rbxmx file to release
+ uses: actions/upload-release-asset@v1
+ env:
+ GITHUB_TOKEN: ${{ github.token }}
+ with:
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
+ asset_path: ./value-holders-${{ steps.package-version.outputs.current-version }}.rbxmx
+ asset_name: value-holders-${{ steps.package-version.outputs.current-version }}.rbxmx
+ asset_content_type: form
+ - name: upload rbxmx file to Roblox
+ run: |
+ cd ./scripts
+ python upload_model.py -a ${{ secrets.ASSET_ID }} -f ../value-holders-${{ steps.package-version.outputs.current-version }}.rbxmx -r "${{ secrets.UPLOADER_BOT_ROBLOSECURITY }}"
+ cd ..
+ - name: prepare wally package contents
+ run: |
+ mkdir -p ~/temp/value-holders
+ cp -r ./{include,out} ~/temp/value-holders/
+ cp ./{CHANGELOG.md,LICENSE,README.md,wally.lock,wally.toml} ~/temp/value-holders/
+ cp ./standalone-model.project.json ~/temp/value-holders/default.project.json
+ mkdir ~/temp/value-holders/node_modules
+ cp -r ./node_modules/@rbxts ~/temp/value-holders/node_modules/
+ - name: prepare wally auth
+ run: |
+ mkdir ~/.wally
+ echo -e '${{ secrets.WALLY_AUTH }}' > ~/.wally/auth.toml
+ - name: publish wally package
+ run: wally publish --project-path ~/temp/value-holders/
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..47826cd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,113 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+*.lcov
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# TypeScript cache
+*.tsbuildinfo
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Microbundle cache
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+.env.test
+
+# parcel-bundler cache (https://parceljs.org/)
+.cache
+
+# Next.js build output
+.next
+
+# Nuxt.js build / generate output
+.nuxt
+dist
+
+# Gatsby files
+.cache/
+# Comment in the public line in if your project uses Gatsby and *not* Next.js
+# https://nextjs.org/blog/next-9-1#public-directory-support
+# public
+
+# vuepress build output
+.vuepress/dist
+
+# Serverless directories
+.serverless/
+
+# FuseBox cache
+.fusebox/
+
+# DynamoDB Local files
+.dynamodb/
+
+# TernJS port file
+.tern-port
+
+# macOS
+.DS_STORE
+
+# roblox-ts
+*.rbxlx
+*.rbxlx.lock
+include/
+out/
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..274d1c4
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1 @@
+Releases!
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..a2a465a
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Bytebit
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..209acec
--- /dev/null
+++ b/README.md
@@ -0,0 +1,318 @@
+# Value Holders
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Value Holders is a module for passing any values around by sharing a pointer, as well as allowing consumers to subscribe to changes and allowing authors to hold locks on changing the value.
+
+## Installation
+### roblox-ts
+Simply install to your [roblox-ts](https://roblox-ts.com/) project as follows:
+```
+npm i @rbxts/value-holders
+```
+
+### Wally
+[Wally](https://github.com/UpliftGames/wally/) users can install this package by adding the following line to their `Wally.toml` under `[dependencies]`:
+```
+ValueHolders = "bytebit/value-holders@0.0.1"
+```
+
+Then just run `wally install`.
+
+### From model file
+Model files are uploaded to every release as `.rbxmx` files. You can download the file from the [Releases page](https://github.com/Bytebit-Org/roblox-ValueHolders/releases) and load it into your project however you see fit.
+
+### From model asset
+New versions of the asset are uploaded with every release. The asset can be added to your Roblox Inventory and then inserted into your Place via Toolbox by getting it [here.](https://www.roblox.com/library/9170323611/Value-Holders-Package)
+
+## Documentation
+Documentation can be found [here](https://github.com/Bytebit-Org/roblox-ValueHolders/tree/master/docs), is included in the TypeScript files directly, and was generated using [TypeDoc](https://typedoc.org/).
+
+## Examples
+### Standard IValueHolder and a Readonly consumer
+Here's an example of using a standard `IValueHolder` with one class, `Writer`, that contains the value and exposes it publicly as an `IReadonlyValueHolder` and one class, `Reader`, that only reads from the `IValueHolder` by using the `IReadonlyValueHolder` reference (in the TypeScript example). The actual value isn't very important for the purposes of this example, so we'll just have `Writer` update the value once every second.
+
+
+ roblox-ts example
+
+ ```ts
+ import { IValueHolder, IReadonlyValueHolder, ValueHolder } from "@rbxts/value-holders";
+
+ export class Writer {
+ public readonly valueHolder: IReadonlyValueHolder;
+
+ private readonly internalValueHolder: IValueHolder;
+
+ public constructor() {
+ this.internalValueHolder = new ValueHolder(0);
+ this.valueHolder = this.internalValueHolder;
+
+ this.incrementValueEverySecond();
+ }
+
+ private incrementValueEverySecond() {
+ while (true) {
+ task.wait(1);
+ valueHolder.updateValue(currentValue => currentValue + 1);
+ }
+ }
+ }
+
+ export class Reader {
+ public constructor(writer: Writer) {
+ this.printEveryValueUpdate(writer.valueHolder);
+ }
+
+ private printEveryValueUpdate(valueHolder: IReadonlyValueHolder) {
+ valueHolder.valueChanged.Connect(newValue => print("New value is: " + newValue));
+ }
+ }
+ ```
+
+
+
+ Luau example
+
+ ```lua
+ local ValueHolder = require(path.to.modules["value-holders"]).ValueHolder
+
+ local Writer = {}
+ Writer.__index = Writer
+
+ local WriterConstructor = {}
+ function WriterConstructor.new()
+ local self = {}
+ setmetatable(self, Writer)
+
+ self.valueHolder = ValueHolder.create(0)
+ _incrementValueEverySecond(self)
+
+ return self
+ end
+
+ function _incrementValueEverySecond(self)
+ while true do
+ task.wait(1)
+ self.valueHolder:updateValue(function (currentValue)
+ return currentValue + 1
+ end)
+ end
+ end
+
+ local Reader = {}
+ Reader.__index = Reader
+
+ local ReaderConstructor = {}
+ function ReaderConstructor.new(writer)
+ local self = {}
+ setmetatable(self, Reader)
+
+ _printEveryValueUpdate(self, writer.valueHolder)
+
+ return self
+ end
+
+ function _printEveryValueUpdate(self, valueHolder)
+ valueHolder.valueChanged:Connect(function (newValue)
+ print("New value is: ", newValue)
+ end)
+ end
+
+ return {
+ Writer = WriterConstructor,
+ Reader = ReaderConstructor
+ }
+ ```
+
+
+### Two writers fighting over one ILockableValueHolder instance
+The `ILockableValueHolder` interface is meant to enable some writers to shut off access to further writes from other potential writers. In this example, there will be a class that locks the value holder via a public method and another class that tries to set the value to 0 every second. Whenever the value is locked, the first class will increment the value every second. As in the previous example, we'll also have a Reader that just prints the value every time that it changes.
+
+
+ roblox-ts example
+
+ ```ts
+ import { ILockableValueHolder, IReadonlyValueHolder, LockableValueHolder } from "@rbxts/value-holders";
+
+ // not going to use this but just for example purposes
+ const exampleLockableValueHolder = LockableValueHolder.create(0);
+
+ export class LockedIncrementingWriter {
+ private lockKey: object | undefined = undefined;
+
+ public constructor(private readonly lockableValueHolder: ILockableValueHolder) {
+ this.incrementValueEverySecond();
+ }
+
+ public takeLock() {
+ if (this.lockKey !== undefined) {
+ return;
+ }
+
+ this.lockKey = this.lockableValueHolder.tryTakeLock();
+ }
+
+ public releaseLock() {
+ if (this.lockKey !== undefined) {
+ return;
+ }
+
+ this.lockableValueHolder.releaseLock(this.lockKey);
+ this.lockKey = undefined;
+ }
+
+ private incrementValueEverySecond() {
+ while (true) {
+ task.wait(1);
+ if (lockableValueHolder.isLocked()) {
+ lockableValueHolder.updateValue(
+ currentValue => currentValue + 1,
+ this.lockKey);
+ }
+ }
+ }
+ }
+
+ export class ZeroWriter {
+ public constructor(private readonly lockableValueHolder: ILockableValueHolder) {
+ this.setValueToZeroEverySecond();
+ }
+
+ private setValueToZeroEverySecond() {
+ while (true) {
+ task.wait(1);
+ if (!lockableValueHolder.isLocked()) {
+ // If the code did not first check whether the value holder was locked,
+ // then this line would error
+ lockableValueHolder.setValue(0);
+ }
+ }
+ }
+ }
+
+ export class Reader {
+ public constructor(valueHolder: IReadonlyValueHolder) {
+ this.printEveryValueUpdate(valueHolder);
+ }
+
+ private printEveryValueUpdate(valueHolder: IReadonlyValueHolder) {
+ valueHolder.valueChanged.Connect(newValue => print("New value is: " + newValue));
+ }
+ }
+ ```
+
+
+
+ Luau example
+
+ ```lua
+ local LockableValueHolder = require(path.to.modules["value-holders"]).LockableValueHolder
+
+ -- not going to use this but just for example purposes
+ local exampleLockableValueHolder = LockableValueHolder.create(0);
+
+ local LockedIncrementingWriter = {}
+ LockedIncrementingWriter.__index = LockedIncrementingWriter
+
+ local LockedIncrementingWriterConstructor = {}
+ function LockedIncrementingWriterConstructor.new(lockableValueHolder)
+ local self = {}
+ setmetatable(self, LockedIncrementingWriter)
+
+ self._lockableValueHolder = lockableValueHolder
+ _incrementValueEverySecond(self)
+
+ return self
+ end
+
+ function LockedIncrementingWriter:takeLock()
+ if self._lockKey then
+ return
+ end
+
+ self._lockKey = self._lockableValueHolder:tryTakeLock();
+ end
+
+ function LockedIncrementingWriter:releaseLock()
+ if self._lockKey then
+ return
+ end
+
+ self._lockableValueHolder:releaseLock(self._lockKey);
+ self._lockKey = nil;
+ end
+
+ function _incrementValueEverySecond(self)
+ while true do
+ task.wait(1)
+ if self._lockableValueHolder:isLocked() then
+ self._lockableValueHolder:updateValue(function (currentValue)
+ return currentValue + 1
+ end, self._lockKey)
+ end
+ end
+ end
+
+ local ZeroWriter = {}
+ ZeroWriter.__index = ZeroWriter
+
+ local ZeroWriterConstructor = {}
+ function ZeroWriterConstructor.new(lockableValueHolder)
+ local self = {}
+ setmetatable(self, ZeroWriter)
+
+ self._lockableValueHolder = lockableValueHolder
+ _setValueToZeroEverySecond(self)
+
+ return self
+ end
+
+ function _setValueToZeroEverySecond(self)
+ while true do
+ task.wait(1)
+ if not self._lockableValueHolder:isLocked() then
+ -- If the code did not first check whether the value holder was locked,
+ -- then this line would error
+ self._lockableValueHolder:setValue(0)
+ end
+ end
+ end
+
+ local Reader = {}
+ Reader.__index = Reader
+
+ local ReaderConstructor = {}
+ function ReaderConstructor.new(valueHolder)
+ local self = {}
+ setmetatable(self, Reader)
+
+ _printEveryValueUpdate(self, valueHolder)
+
+ return self
+ end
+
+ function _printEveryValueUpdate(self, valueHolder)
+ valueHolder.valueChanged:Connect(function (newValue)
+ print("New value is: ", newValue)
+ end)
+ end
+
+ return {
+ LockedIncrementingWriter = LockedIncrementingWriterConstructor,
+ ZeroWriter = ZeroWriterConstructor,
+ Reader = ReaderConstructor
+ }
+ ```
+
\ No newline at end of file
diff --git a/default.project.json b/default.project.json
new file mode 100644
index 0000000..29ef063
--- /dev/null
+++ b/default.project.json
@@ -0,0 +1,24 @@
+{
+ "name": "test-rojo-proj",
+ "tree": {
+ "$className": "DataModel",
+ "ReplicatedStorage": {
+ "$className": "ReplicatedStorage",
+ "rbxts_include": {
+ "$path": "include",
+ "node_modules": {
+ "$path": "./node_modules/@rbxts"
+ }
+ },
+ "out": {
+ "$path": "./out"
+ }
+ },
+ "ServerScriptService": {
+ "$className": "ServerScriptService",
+ "TestRunner": {
+ "$path": "./spec.server.lua"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/foreman.toml b/foreman.toml
new file mode 100644
index 0000000..30d4c14
--- /dev/null
+++ b/foreman.toml
@@ -0,0 +1,4 @@
+[tools]
+rojo = { source = "rojo-rbx/rojo", version = "6" }
+run-in-roblox = { source = "rojo-rbx/run-in-roblox", version = "0.3.0" }
+wally = { source = "UpliftGames/wally", version = "0.2.1" }
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..e8f78ff
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3494 @@
+{
+ "name": "@rbxts/value-holders",
+ "version": "0.0.1",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@rbxts/value-holders",
+ "version": "0.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "@rbxts/bin": "^1.2.6",
+ "@rbxts/destroyed-instance-logging": "^0.0.1",
+ "@rbxts/signals-tooling": "^1.0.8"
+ },
+ "devDependencies": {
+ "@rbxts/compiler-types": "^1.2.7-types.0",
+ "@rbxts/types": "^1.0.546",
+ "@typescript-eslint/eslint-plugin": "^4.15.1",
+ "@typescript-eslint/parser": "^4.15.1",
+ "eslint": "^7.20.0",
+ "eslint-config-prettier": "^7.2.0",
+ "eslint-plugin-prettier": "^3.3.1",
+ "eslint-plugin-roblox-ts": "0.0.24",
+ "prettier": "^2.2.1",
+ "typedoc": "^0.22.0",
+ "typedoc-plugin-markdown": "^3.6.0",
+ "typescript": "^4.1.5"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
+ "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "node_modules/@babel/highlight/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/highlight/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rbxts/bin": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@rbxts/bin/-/bin-1.2.6.tgz",
+ "integrity": "sha512-DW8PIxD60r9tRtWG/lVFr6qssnBSwuk+JtU4MufzwwHKftgUfAPRqJHqY09Z7BPrZ1GsN3Ev8Q2Sg+BhIiu1nA=="
+ },
+ "node_modules/@rbxts/compiler-types": {
+ "version": "1.2.7-types.1",
+ "resolved": "https://registry.npmjs.org/@rbxts/compiler-types/-/compiler-types-1.2.7-types.1.tgz",
+ "integrity": "sha512-zr3QIJDgLN2dyPYSy4QwDRiZDm8BwQeUE8tsglPDgbVLJonaK7+PAqb1hoqZJ3ReQdZUElSKru9yAfI1Z0MOug==",
+ "dev": true
+ },
+ "node_modules/@rbxts/destroyed-instance-logging": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@rbxts/destroyed-instance-logging/-/destroyed-instance-logging-0.0.1.tgz",
+ "integrity": "sha512-LqiSK45L8Ro5Hmqw+82gtiJ03q8WxKCeY2JwlZ+3idw0HOxCFdvqNz0z8YrXWQfZRkdbditkcW+mofLPwk9hWg=="
+ },
+ "node_modules/@rbxts/dumpster": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@rbxts/dumpster/-/dumpster-1.0.8.tgz",
+ "integrity": "sha512-mkitEvfA166+EkRPF51vji9ZkAJEbqtwvrMAtPhP6EJy8IKAgh5QseHu5Zh1d5n459ufy1qY+5XHjGi2fQCqJg=="
+ },
+ "node_modules/@rbxts/services": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@rbxts/services/-/services-1.2.0.tgz",
+ "integrity": "sha512-GEnAGgRz/oFEfBCjr+UChO7D49c/l+Wgr2OHMkURBKbVAqGg7hVQbEs9PUr+9BuVx/8OlsqZ/cvrUYbwAyd60A=="
+ },
+ "node_modules/@rbxts/signals-tooling": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@rbxts/signals-tooling/-/signals-tooling-1.0.8.tgz",
+ "integrity": "sha512-BJ5uiFqoKMw7F5QfK5k21CXg/RoFiikh1PfEgoobbEbgWRxPbNT4QCWDASixxcNjBA0Hfph1hb7CUc61p+u6KQ==",
+ "dependencies": {
+ "@rbxts/dumpster": "^1.0.8",
+ "@rbxts/services": "^1.0.28"
+ }
+ },
+ "node_modules/@rbxts/types": {
+ "version": "1.0.571",
+ "resolved": "https://registry.npmjs.org/@rbxts/types/-/types-1.0.571.tgz",
+ "integrity": "sha512-VKBktp/GefC8uHzzRhZJE8EhQw6Zq2oMzc8dlWoaj2xe6rT2bWllYg4pl7tuw29LjaUuIqWm0GUhbSqMiKmmaQ==",
+ "dev": true
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.10",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz",
+ "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "14.18.12",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz",
+ "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==",
+ "dev": true
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
+ "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": "4.33.0",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "debug": "^4.3.1",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.1.8",
+ "regexpp": "^3.1.0",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^4.0.0",
+ "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/experimental-utils": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
+ "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.7",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "*"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
+ "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "debug": "^4.3.1"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
+ "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0"
+ },
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
+ "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
+ "dev": true,
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
+ "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
+ "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "4.33.0",
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "dependencies": {
+ "ansi-colors": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "7.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+ "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.1.2",
+ "globals": "^13.6.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
+ "table": "^6.0.9",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz",
+ "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz",
+ "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==",
+ "dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=5.0.0",
+ "prettier": ">=1.13.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-roblox-ts": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-roblox-ts/-/eslint-plugin-roblox-ts-0.0.24.tgz",
+ "integrity": "sha512-KwYUT8fdlS8gG6IfFnmyTwoWldR+4L5wCEk5NifKQ1L8OX1frrG61o6LkuyQvX0MtOeEj2CKo3qZyvfOuDb3Aw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "^14.11.8",
+ "@typescript-eslint/experimental-utils": "^4.4.1",
+ "typescript": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint/node_modules/ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/espree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esquery/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "node_modules/fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "node_modules/functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "node_modules/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
+ "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
+ "dev": true
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "dev": true
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/lunr": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+ "dev": true
+ },
+ "node_modules/marked": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz",
+ "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==",
+ "dev": true,
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz",
+ "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shiki": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz",
+ "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==",
+ "dev": true,
+ "dependencies": {
+ "jsonc-parser": "^3.0.0",
+ "vscode-oniguruma": "^1.6.1",
+ "vscode-textmate": "5.2.0"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/table": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
+ "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
+ "dev": true,
+ "dependencies": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/table/node_modules/ajv": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
+ "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/table/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "node_modules/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.8.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typedoc": {
+ "version": "0.22.13",
+ "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.13.tgz",
+ "integrity": "sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.2.0",
+ "lunr": "^2.3.9",
+ "marked": "^4.0.12",
+ "minimatch": "^5.0.1",
+ "shiki": "^0.10.1"
+ },
+ "bin": {
+ "typedoc": "bin/typedoc"
+ },
+ "engines": {
+ "node": ">= 12.10.0"
+ },
+ "peerDependencies": {
+ "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x"
+ }
+ },
+ "node_modules/typedoc-plugin-markdown": {
+ "version": "3.11.14",
+ "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.14.tgz",
+ "integrity": "sha512-lh47OQvl0079nB18YL9wuTRRhMpjo300SZKfx/xpQY8qG+GINeSxTod95QBELeI0NP81sNtUbemRDrn5nyef4Q==",
+ "dev": true,
+ "dependencies": {
+ "handlebars": "^4.7.7"
+ },
+ "peerDependencies": {
+ "typedoc": ">=0.22.0"
+ }
+ },
+ "node_modules/typedoc/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/typedoc/node_modules/minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
+ "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.15.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz",
+ "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "node_modules/vscode-oniguruma": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz",
+ "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==",
+ "dev": true
+ },
+ "node_modules/vscode-textmate": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz",
+ "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==",
+ "dev": true
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "dev": true
+ },
+ "@babel/highlight": {
+ "version": "7.16.10",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz",
+ "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ }
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "dev": true,
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@rbxts/bin": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@rbxts/bin/-/bin-1.2.6.tgz",
+ "integrity": "sha512-DW8PIxD60r9tRtWG/lVFr6qssnBSwuk+JtU4MufzwwHKftgUfAPRqJHqY09Z7BPrZ1GsN3Ev8Q2Sg+BhIiu1nA=="
+ },
+ "@rbxts/compiler-types": {
+ "version": "1.2.7-types.1",
+ "resolved": "https://registry.npmjs.org/@rbxts/compiler-types/-/compiler-types-1.2.7-types.1.tgz",
+ "integrity": "sha512-zr3QIJDgLN2dyPYSy4QwDRiZDm8BwQeUE8tsglPDgbVLJonaK7+PAqb1hoqZJ3ReQdZUElSKru9yAfI1Z0MOug==",
+ "dev": true
+ },
+ "@rbxts/destroyed-instance-logging": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/@rbxts/destroyed-instance-logging/-/destroyed-instance-logging-0.0.1.tgz",
+ "integrity": "sha512-LqiSK45L8Ro5Hmqw+82gtiJ03q8WxKCeY2JwlZ+3idw0HOxCFdvqNz0z8YrXWQfZRkdbditkcW+mofLPwk9hWg=="
+ },
+ "@rbxts/dumpster": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@rbxts/dumpster/-/dumpster-1.0.8.tgz",
+ "integrity": "sha512-mkitEvfA166+EkRPF51vji9ZkAJEbqtwvrMAtPhP6EJy8IKAgh5QseHu5Zh1d5n459ufy1qY+5XHjGi2fQCqJg=="
+ },
+ "@rbxts/services": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@rbxts/services/-/services-1.2.0.tgz",
+ "integrity": "sha512-GEnAGgRz/oFEfBCjr+UChO7D49c/l+Wgr2OHMkURBKbVAqGg7hVQbEs9PUr+9BuVx/8OlsqZ/cvrUYbwAyd60A=="
+ },
+ "@rbxts/signals-tooling": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@rbxts/signals-tooling/-/signals-tooling-1.0.8.tgz",
+ "integrity": "sha512-BJ5uiFqoKMw7F5QfK5k21CXg/RoFiikh1PfEgoobbEbgWRxPbNT4QCWDASixxcNjBA0Hfph1hb7CUc61p+u6KQ==",
+ "requires": {
+ "@rbxts/dumpster": "^1.0.8",
+ "@rbxts/services": "^1.0.28"
+ }
+ },
+ "@rbxts/types": {
+ "version": "1.0.571",
+ "resolved": "https://registry.npmjs.org/@rbxts/types/-/types-1.0.571.tgz",
+ "integrity": "sha512-VKBktp/GefC8uHzzRhZJE8EhQw6Zq2oMzc8dlWoaj2xe6rT2bWllYg4pl7tuw29LjaUuIqWm0GUhbSqMiKmmaQ==",
+ "dev": true
+ },
+ "@types/json-schema": {
+ "version": "7.0.10",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz",
+ "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "14.18.12",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.12.tgz",
+ "integrity": "sha512-q4jlIR71hUpWTnGhXWcakgkZeHa3CCjcQcnuzU8M891BAWA2jHiziiWEPEkdS5pFsz7H9HJiy8BrK7tBRNrY7A==",
+ "dev": true
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz",
+ "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "4.33.0",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "debug": "^4.3.1",
+ "functional-red-black-tree": "^1.0.1",
+ "ignore": "^5.1.8",
+ "regexpp": "^3.1.0",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/experimental-utils": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz",
+ "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.7",
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
+ "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "4.33.0",
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/typescript-estree": "4.33.0",
+ "debug": "^4.3.1"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz",
+ "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz",
+ "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz",
+ "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.33.0",
+ "@typescript-eslint/visitor-keys": "4.33.0",
+ "debug": "^4.3.1",
+ "globby": "^11.0.3",
+ "is-glob": "^4.0.1",
+ "semver": "^7.3.5",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "4.33.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz",
+ "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "4.33.0",
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ },
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "^4.1.1"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint": {
+ "version": "7.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+ "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
+ "ajv": "^6.10.0",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "enquirer": "^2.3.5",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.1.2",
+ "globals": "^13.6.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "js-yaml": "^3.13.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.0.4",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.1",
+ "progress": "^2.0.0",
+ "regexpp": "^3.1.0",
+ "semver": "^7.2.1",
+ "strip-ansi": "^6.0.0",
+ "strip-json-comments": "^3.1.0",
+ "table": "^6.0.9",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz",
+ "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-prettier": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz",
+ "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==",
+ "dev": true,
+ "requires": {
+ "prettier-linter-helpers": "^1.0.0"
+ }
+ },
+ "eslint-plugin-roblox-ts": {
+ "version": "0.0.24",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-roblox-ts/-/eslint-plugin-roblox-ts-0.0.24.tgz",
+ "integrity": "sha512-KwYUT8fdlS8gG6IfFnmyTwoWldR+4L5wCEk5NifKQ1L8OX1frrG61o6LkuyQvX0MtOeEj2CKo3qZyvfOuDb3Aw==",
+ "dev": true,
+ "requires": {
+ "@types/node": "^14.11.8",
+ "@typescript-eslint/experimental-utils": "^4.4.1",
+ "typescript": "^4.0.3"
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ },
+ "espree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "dev": true,
+ "requires": {
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ }
+ }
+ },
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
+ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "dev": true
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "13.13.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz",
+ "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "requires": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ }
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "jsonc-parser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz",
+ "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "lunr": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+ "dev": true
+ },
+ "marked": {
+ "version": "4.0.12",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz",
+ "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==",
+ "dev": true
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
+ "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.2.3"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "requires": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.3"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz",
+ "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==",
+ "dev": true
+ },
+ "prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "requires": {
+ "fast-diff": "^1.1.2"
+ }
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "shiki": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz",
+ "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==",
+ "dev": true,
+ "requires": {
+ "jsonc-parser": "^3.0.0",
+ "vscode-oniguruma": "^1.6.1",
+ "vscode-textmate": "5.2.0"
+ }
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "table": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz",
+ "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz",
+ "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "typedoc": {
+ "version": "0.22.13",
+ "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.13.tgz",
+ "integrity": "sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.2.0",
+ "lunr": "^2.3.9",
+ "marked": "^4.0.12",
+ "minimatch": "^5.0.1",
+ "shiki": "^0.10.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
+ }
+ },
+ "typedoc-plugin-markdown": {
+ "version": "3.11.14",
+ "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.14.tgz",
+ "integrity": "sha512-lh47OQvl0079nB18YL9wuTRRhMpjo300SZKfx/xpQY8qG+GINeSxTod95QBELeI0NP81sNtUbemRDrn5nyef4Q==",
+ "dev": true,
+ "requires": {
+ "handlebars": "^4.7.7"
+ }
+ },
+ "typescript": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
+ "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.15.3",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.3.tgz",
+ "integrity": "sha512-6iCVm2omGJbsu3JWac+p6kUiOpg3wFO2f8lIXjfEb8RrmLjzog1wTPMmwKB7swfzzqxj9YM+sGUM++u1qN4qJg==",
+ "dev": true,
+ "optional": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "vscode-oniguruma": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz",
+ "integrity": "sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==",
+ "dev": true
+ },
+ "vscode-textmate": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz",
+ "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..b18ccf8
--- /dev/null
+++ b/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "@rbxts/value-holders",
+ "version": "0.0.1",
+ "description": "A module for passing any values around by sharing a pointer, as well as allowing consumers to subscribe to changes and allowing authors to hold locks on changing the value.",
+ "main": "out/init.lua",
+ "scripts": {
+ "eslint": "npx eslint \"src/**/*.ts\" --max-warnings 0",
+ "prepublishOnly": "rm -rf ./out; rbxtsc --type=package",
+ "test": "rbxtsc --type=game && rojo build -o ./unit_tests.rbxlx && run-in-roblox ./unit_tests.rbxlx -s ./spec.server.lua",
+ "wsl-start-unit-tests": "set -e; rm -rf ./out; rbxtsc --type=game && rojo build -o unit_tests.rbxlx; ./scripts/open-in-windows ./unit_tests.rbxlx"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Bytebit-Org/roblox-ValueHolders.git"
+ },
+ "keywords": [],
+ "author": "Bytebit",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Bytebit-Org/roblox-ValueHolders/issues"
+ },
+ "homepage": "https://github.com/Bytebit-Org/roblox-ValueHolders#readme",
+ "publishConfig": {
+ "access": "public"
+ },
+ "files": [
+ "out/**/*.d.ts",
+ "out/**/!(*.spec).lua"
+ ],
+ "types": "out/index.d.ts",
+ "devDependencies": {
+ "@rbxts/compiler-types": "^1.2.7-types.0",
+ "@rbxts/types": "^1.0.546",
+ "@typescript-eslint/eslint-plugin": "^4.15.1",
+ "@typescript-eslint/parser": "^4.15.1",
+ "eslint": "^7.20.0",
+ "eslint-config-prettier": "^7.2.0",
+ "eslint-plugin-prettier": "^3.3.1",
+ "eslint-plugin-roblox-ts": "0.0.24",
+ "prettier": "^2.2.1",
+ "typedoc": "^0.22.0",
+ "typedoc-plugin-markdown": "^3.6.0",
+ "typescript": "^4.1.5"
+ },
+ "dependencies": {
+ "@rbxts/bin": "^1.2.6",
+ "@rbxts/destroyed-instance-logging": "^0.0.1",
+ "@rbxts/signals-tooling": "^1.0.8"
+ }
+}
diff --git a/roblox.toml b/roblox.toml
new file mode 100644
index 0000000..b4b3be2
--- /dev/null
+++ b/roblox.toml
@@ -0,0 +1,8105 @@
+# This file was @generated by generate-roblox-std
+[selene]
+base = "lua51"
+name = "roblox"
+[selene.structs.BasePart."*"]
+struct = "Instance"
+
+[selene.structs.BasePart.AncestryChanged]
+struct = "Event"
+
+[selene.structs.BasePart.Anchored]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Archivable]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.AttributeChanged]
+struct = "Event"
+
+[selene.structs.BasePart.BackParamA]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.BackParamB]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.BackSurface]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.BackSurfaceInput]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.BottomParamA]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.BottomParamB]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.BottomSurface]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.BottomSurfaceInput]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.BreakJoints]
+method = true
+args = []
+
+[selene.structs.BasePart.BrickColor]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.CFrame]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.CanCollide]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.CanCollideWith]
+method = true
+
+[[selene.structs.BasePart.CanCollideWith.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.CanSetNetworkOwnership]
+method = true
+args = []
+
+[selene.structs.BasePart.CastShadow]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.CenterOfMass]
+property = true
+
+[selene.structs.BasePart.Changed]
+struct = "Event"
+
+[selene.structs.BasePart.ChildAdded]
+struct = "Event"
+
+[selene.structs.BasePart.ChildRemoved]
+struct = "Event"
+
+[selene.structs.BasePart.ClassName]
+property = true
+
+[selene.structs.BasePart.ClearAllChildren]
+method = true
+args = []
+
+[selene.structs.BasePart.Clone]
+method = true
+args = []
+
+[selene.structs.BasePart.CollisionGroupId]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Color]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.CustomPhysicalProperties]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.DescendantAdded]
+struct = "Event"
+
+[selene.structs.BasePart.DescendantRemoving]
+struct = "Event"
+
+[selene.structs.BasePart.Destroy]
+method = true
+args = []
+
+[selene.structs.BasePart.FindFirstAncestor]
+method = true
+
+[[selene.structs.BasePart.FindFirstAncestor.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.FindFirstAncestorOfClass]
+method = true
+
+[[selene.structs.BasePart.FindFirstAncestorOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.FindFirstAncestorWhichIsA]
+method = true
+
+[[selene.structs.BasePart.FindFirstAncestorWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.FindFirstChild]
+method = true
+
+[[selene.structs.BasePart.FindFirstChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.FindFirstChild.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.FindFirstChildOfClass]
+method = true
+
+[[selene.structs.BasePart.FindFirstChildOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.FindFirstChildWhichIsA]
+method = true
+
+[[selene.structs.BasePart.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.FrontParamA]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.FrontParamB]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.FrontSurface]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.FrontSurfaceInput]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.GetAttribute]
+method = true
+
+[[selene.structs.BasePart.GetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.GetAttributeChangedSignal]
+method = true
+
+[[selene.structs.BasePart.GetAttributeChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.GetAttributes]
+method = true
+args = []
+
+[selene.structs.BasePart.GetChildren]
+method = true
+args = []
+
+[selene.structs.BasePart.GetConnectedParts]
+method = true
+
+[[selene.structs.BasePart.GetConnectedParts.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.GetDebugId]
+method = true
+
+[[selene.structs.BasePart.GetDebugId.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.GetDescendants]
+method = true
+args = []
+
+[selene.structs.BasePart.GetFullName]
+method = true
+args = []
+
+[selene.structs.BasePart.GetJoints]
+method = true
+args = []
+
+[selene.structs.BasePart.GetMass]
+method = true
+args = []
+
+[selene.structs.BasePart.GetNetworkOwner]
+method = true
+args = []
+
+[selene.structs.BasePart.GetNetworkOwnershipAuto]
+method = true
+args = []
+
+[selene.structs.BasePart.GetPropertyChangedSignal]
+method = true
+
+[[selene.structs.BasePart.GetPropertyChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.GetRootPart]
+method = true
+args = []
+
+[selene.structs.BasePart.GetTouchingParts]
+method = true
+args = []
+
+[selene.structs.BasePart.IsA]
+method = true
+
+[[selene.structs.BasePart.IsA.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.IsAncestorOf]
+method = true
+
+[[selene.structs.BasePart.IsAncestorOf.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.IsDescendantOf]
+method = true
+
+[[selene.structs.BasePart.IsDescendantOf.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.IsGrounded]
+method = true
+args = []
+
+[selene.structs.BasePart.LeftParamA]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.LeftParamB]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.LeftSurface]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.LeftSurfaceInput]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.LocalTransparencyModifier]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Locked]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.MakeJoints]
+method = true
+args = []
+
+[selene.structs.BasePart.Mass]
+property = true
+
+[selene.structs.BasePart.Massless]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Material]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Name]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Orientation]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Parent]
+struct = "Instance"
+
+[selene.structs.BasePart.Position]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.ReceiveAge]
+property = true
+
+[selene.structs.BasePart.Reflectance]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Resize]
+method = true
+
+[[selene.structs.BasePart.Resize.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.Resize.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.ResizeIncrement]
+property = true
+
+[selene.structs.BasePart.ResizeableFaces]
+property = true
+
+[selene.structs.BasePart.RightParamA]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.RightParamB]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.RightSurface]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.RightSurfaceInput]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.RootPriority]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.RotVelocity]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.Rotation]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.SetAttribute]
+method = true
+
+[[selene.structs.BasePart.SetAttribute.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.SetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.SetNetworkOwner]
+method = true
+
+[[selene.structs.BasePart.SetNetworkOwner.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.SetNetworkOwnershipAuto]
+method = true
+args = []
+
+[selene.structs.BasePart.Size]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.SubtractAsync]
+method = true
+
+[[selene.structs.BasePart.SubtractAsync.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.SubtractAsync.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.SubtractAsync.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.TopParamA]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.TopParamB]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.TopSurface]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.TopSurfaceInput]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.TouchEnded]
+struct = "Event"
+
+[selene.structs.BasePart.Touched]
+struct = "Event"
+
+[selene.structs.BasePart.Transparency]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.UnionAsync]
+method = true
+
+[[selene.structs.BasePart.UnionAsync.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.UnionAsync.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.UnionAsync.args]]
+required = false
+type = "any"
+
+[selene.structs.BasePart.Velocity]
+property = true
+writable = "overridden"
+
+[selene.structs.BasePart.WaitForChild]
+method = true
+
+[[selene.structs.BasePart.WaitForChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.BasePart.WaitForChild.args]]
+required = false
+type = "any"
+[selene.structs.Camera."*"]
+struct = "Instance"
+
+[selene.structs.Camera.AncestryChanged]
+struct = "Event"
+
+[selene.structs.Camera.Archivable]
+property = true
+writable = "overridden"
+
+[selene.structs.Camera.AttributeChanged]
+struct = "Event"
+
+[selene.structs.Camera.CFrame]
+property = true
+writable = "overridden"
+
+[selene.structs.Camera.CameraSubject]
+struct = "Instance"
+
+[selene.structs.Camera.CameraType]
+property = true
+writable = "overridden"
+
+[selene.structs.Camera.Changed]
+struct = "Event"
+
+[selene.structs.Camera.ChildAdded]
+struct = "Event"
+
+[selene.structs.Camera.ChildRemoved]
+struct = "Event"
+
+[selene.structs.Camera.ClassName]
+property = true
+
+[selene.structs.Camera.ClearAllChildren]
+method = true
+args = []
+
+[selene.structs.Camera.Clone]
+method = true
+args = []
+
+[selene.structs.Camera.DescendantAdded]
+struct = "Event"
+
+[selene.structs.Camera.DescendantRemoving]
+struct = "Event"
+
+[selene.structs.Camera.Destroy]
+method = true
+args = []
+
+[selene.structs.Camera.FieldOfView]
+property = true
+writable = "overridden"
+
+[selene.structs.Camera.FindFirstAncestor]
+method = true
+
+[[selene.structs.Camera.FindFirstAncestor.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.FindFirstAncestorOfClass]
+method = true
+
+[[selene.structs.Camera.FindFirstAncestorOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.FindFirstAncestorWhichIsA]
+method = true
+
+[[selene.structs.Camera.FindFirstAncestorWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.FindFirstChild]
+method = true
+
+[[selene.structs.Camera.FindFirstChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.FindFirstChild.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.FindFirstChildOfClass]
+method = true
+
+[[selene.structs.Camera.FindFirstChildOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.FindFirstChildWhichIsA]
+method = true
+
+[[selene.structs.Camera.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.FirstPersonTransition]
+struct = "Event"
+
+[selene.structs.Camera.Focus]
+property = true
+writable = "overridden"
+
+[selene.structs.Camera.GetAttribute]
+method = true
+
+[[selene.structs.Camera.GetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.GetAttributeChangedSignal]
+method = true
+
+[[selene.structs.Camera.GetAttributeChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.GetAttributes]
+method = true
+args = []
+
+[selene.structs.Camera.GetChildren]
+method = true
+args = []
+
+[selene.structs.Camera.GetDebugId]
+method = true
+
+[[selene.structs.Camera.GetDebugId.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.GetDescendants]
+method = true
+args = []
+
+[selene.structs.Camera.GetFullName]
+method = true
+args = []
+
+[selene.structs.Camera.GetPanSpeed]
+method = true
+args = []
+
+[selene.structs.Camera.GetPartsObscuringTarget]
+method = true
+
+[[selene.structs.Camera.GetPartsObscuringTarget.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.GetPartsObscuringTarget.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.GetPropertyChangedSignal]
+method = true
+
+[[selene.structs.Camera.GetPropertyChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.GetRenderCFrame]
+method = true
+args = []
+
+[selene.structs.Camera.GetRoll]
+method = true
+args = []
+
+[selene.structs.Camera.GetTiltSpeed]
+method = true
+args = []
+
+[selene.structs.Camera.HeadLocked]
+property = true
+writable = "overridden"
+
+[selene.structs.Camera.HeadScale]
+property = true
+writable = "overridden"
+
+[selene.structs.Camera.InterpolationFinished]
+struct = "Event"
+
+[selene.structs.Camera.IsA]
+method = true
+
+[[selene.structs.Camera.IsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.IsAncestorOf]
+method = true
+
+[[selene.structs.Camera.IsAncestorOf.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.IsDescendantOf]
+method = true
+
+[[selene.structs.Camera.IsDescendantOf.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.Name]
+property = true
+writable = "overridden"
+
+[selene.structs.Camera.NearPlaneZ]
+property = true
+
+[selene.structs.Camera.Parent]
+struct = "Instance"
+
+[selene.structs.Camera.ScreenPointToRay]
+method = true
+
+[[selene.structs.Camera.ScreenPointToRay.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.ScreenPointToRay.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.ScreenPointToRay.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.SetAttribute]
+method = true
+
+[[selene.structs.Camera.SetAttribute.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.SetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.SetCameraPanMode]
+method = true
+
+[[selene.structs.Camera.SetCameraPanMode.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.SetImageServerView]
+method = true
+
+[[selene.structs.Camera.SetImageServerView.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.SetRoll]
+method = true
+
+[[selene.structs.Camera.SetRoll.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.ViewportPointToRay]
+method = true
+
+[[selene.structs.Camera.ViewportPointToRay.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.ViewportPointToRay.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.ViewportPointToRay.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.ViewportSize]
+property = true
+
+[selene.structs.Camera.WaitForChild]
+method = true
+
+[[selene.structs.Camera.WaitForChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.Camera.WaitForChild.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.WorldToScreenPoint]
+method = true
+
+[[selene.structs.Camera.WorldToScreenPoint.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.WorldToViewportPoint]
+method = true
+
+[[selene.structs.Camera.WorldToViewportPoint.args]]
+required = false
+type = "any"
+
+[selene.structs.Camera.Zoom]
+method = true
+
+[[selene.structs.Camera.Zoom.args]]
+required = false
+type = "any"
+[selene.structs.DataModel."*"]
+struct = "Instance"
+
+[selene.structs.DataModel.AncestryChanged]
+struct = "Event"
+
+[selene.structs.DataModel.Archivable]
+property = true
+writable = "overridden"
+
+[selene.structs.DataModel.AttributeChanged]
+struct = "Event"
+
+[selene.structs.DataModel.BindToClose]
+method = true
+
+[[selene.structs.DataModel.BindToClose.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.Changed]
+struct = "Event"
+
+[selene.structs.DataModel.ChildAdded]
+struct = "Event"
+
+[selene.structs.DataModel.ChildRemoved]
+struct = "Event"
+
+[selene.structs.DataModel.ClassName]
+property = true
+
+[selene.structs.DataModel.ClearAllChildren]
+method = true
+args = []
+
+[selene.structs.DataModel.Clone]
+method = true
+args = []
+
+[selene.structs.DataModel.Close]
+struct = "Event"
+
+[selene.structs.DataModel.CloseLate]
+struct = "Event"
+
+[selene.structs.DataModel.CreatorId]
+property = true
+
+[selene.structs.DataModel.CreatorType]
+property = true
+
+[selene.structs.DataModel.DefineFastFlag]
+method = true
+
+[[selene.structs.DataModel.DefineFastFlag.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.DefineFastFlag.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.DefineFastInt]
+method = true
+
+[[selene.structs.DataModel.DefineFastInt.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.DefineFastInt.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.DefineFastString]
+method = true
+
+[[selene.structs.DataModel.DefineFastString.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.DefineFastString.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.DescendantAdded]
+struct = "Event"
+
+[selene.structs.DataModel.DescendantRemoving]
+struct = "Event"
+
+[selene.structs.DataModel.Destroy]
+method = true
+args = []
+
+[selene.structs.DataModel.FindFirstAncestor]
+method = true
+
+[[selene.structs.DataModel.FindFirstAncestor.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.FindFirstAncestorOfClass]
+method = true
+
+[[selene.structs.DataModel.FindFirstAncestorOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.FindFirstAncestorWhichIsA]
+method = true
+
+[[selene.structs.DataModel.FindFirstAncestorWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.FindFirstChild]
+method = true
+
+[[selene.structs.DataModel.FindFirstChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.FindFirstChild.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.FindFirstChildOfClass]
+method = true
+
+[[selene.structs.DataModel.FindFirstChildOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.FindFirstChildWhichIsA]
+method = true
+
+[[selene.structs.DataModel.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.FindService]
+method = true
+
+[[selene.structs.DataModel.FindService.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GameId]
+property = true
+
+[selene.structs.DataModel.Genre]
+property = true
+
+[selene.structs.DataModel.GetAttribute]
+method = true
+
+[[selene.structs.DataModel.GetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetAttributeChangedSignal]
+method = true
+
+[[selene.structs.DataModel.GetAttributeChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetAttributes]
+method = true
+args = []
+
+[selene.structs.DataModel.GetChildren]
+method = true
+args = []
+
+[selene.structs.DataModel.GetDebugId]
+method = true
+
+[[selene.structs.DataModel.GetDebugId.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetDescendants]
+method = true
+args = []
+
+[selene.structs.DataModel.GetFastFlag]
+method = true
+
+[[selene.structs.DataModel.GetFastFlag.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetFastInt]
+method = true
+
+[[selene.structs.DataModel.GetFastInt.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetFastString]
+method = true
+
+[[selene.structs.DataModel.GetFastString.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetFullName]
+method = true
+args = []
+
+[selene.structs.DataModel.GetJobIntervalPeakFraction]
+method = true
+
+[[selene.structs.DataModel.GetJobIntervalPeakFraction.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.GetJobIntervalPeakFraction.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetJobTimePeakFraction]
+method = true
+
+[[selene.structs.DataModel.GetJobTimePeakFraction.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.GetJobTimePeakFraction.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetJobsExtendedStats]
+method = true
+args = []
+
+[selene.structs.DataModel.GetJobsInfo]
+method = true
+args = []
+
+[selene.structs.DataModel.GetObjects]
+method = true
+
+[[selene.structs.DataModel.GetObjects.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetObjectsAsync]
+method = true
+
+[[selene.structs.DataModel.GetObjectsAsync.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetObjectsList]
+method = true
+
+[[selene.structs.DataModel.GetObjectsList.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetPropertyChangedSignal]
+method = true
+
+[[selene.structs.DataModel.GetPropertyChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.GetService]
+method = true
+
+[[selene.structs.DataModel.GetService.args]]
+type = ["ABTestService", "AdService", "AnalyticsService", "AssetManagerService", "AssetService", "BadgeService", "CoreGui", "StarterGui", "BrowserService", "BulkImportService", "CacheableContentProvider", "MeshContentProvider", "SolidModelContentProvider", "ChangeHistoryService", "Chat", "ClusterPacketCache", "CollectionService", "ContentProvider", "ContextActionService", "ControllerService", "CookiesService", "CorePackages", "CoreScriptSyncService", "DataStoreService", "Debris", "DraftsService", "EventIngestService", "FlagStandService", "FlyweightService", "CSGDictionaryService", "NonReplicatedCSGDictionaryService", "FriendService", "GamePassService", "GamepadService", "Geometry", "GoogleAnalyticsConfiguration", "GroupService", "GuiService", "GuidRegistryService", "HapticService", "Hopper", "HttpRbxApiService", "HttpService", "InsertService", "JointsService", "KeyboardService", "KeyframeSequenceProvider", "LanguageService", "Lighting", "LocalStorageService", "AppStorageService", "UserStorageService", "LocalizationService", "LogService", "LoginService", "LuaWebService", "MarketplaceService", "MemStorageService", "MessagingService", "MouseService", "NetworkClient", "NetworkServer", "NetworkSettings", "NotificationService", "Workspace", "PackageService", "PathfindingService", "PermissionsService", "PhysicsService", "PlayerEmulatorService", "Players", "PluginDebugService", "PluginGuiService", "PointsService", "PolicyService", "RbxAnalyticsService", "RenderSettings", "ReplicatedFirst", "ReplicatedStorage", "RobloxPluginGuiService", "RobloxReplicatedStorage", "RunService", "RuntimeScriptService", "ScriptContext", "ScriptService", "Selection", "ServerScriptService", "ServerStorage", "SessionService", "SocialService", "SoundService", "SpawnerService", "StarterPack", "StarterPlayer", "Stats", "StopWatchReporter", "Studio", "StudioData", "StudioService", "TaskScheduler", "Teams", "TeleportService", "TestService", "TextService", "ThirdPartyUserService", "TimerService", "TouchInputService", "TweenService", "UGCValidationService", "UserInputService", "UserService", "VRService", "VersionControlService", "VirtualInputManager", "VirtualUser", "Visit"]
+
+[selene.structs.DataModel.GraphicsQualityChangeRequest]
+struct = "Event"
+
+[selene.structs.DataModel.HttpGetAsync]
+method = true
+
+[[selene.structs.DataModel.HttpGetAsync.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.HttpGetAsync.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.HttpPostAsync]
+method = true
+
+[[selene.structs.DataModel.HttpPostAsync.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.HttpPostAsync.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.HttpPostAsync.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.HttpPostAsync.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.InsertObjectsAndJoinIfLegacyAsync]
+method = true
+
+[[selene.structs.DataModel.InsertObjectsAndJoinIfLegacyAsync.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.IsA]
+method = true
+
+[[selene.structs.DataModel.IsA.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.IsAncestorOf]
+method = true
+
+[[selene.structs.DataModel.IsAncestorOf.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.IsDescendantOf]
+method = true
+
+[[selene.structs.DataModel.IsDescendantOf.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.IsLoaded]
+method = true
+args = []
+
+[selene.structs.DataModel.JobId]
+property = true
+
+[selene.structs.DataModel.Load]
+method = true
+
+[[selene.structs.DataModel.Load.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.Loaded]
+struct = "Event"
+
+[selene.structs.DataModel.Name]
+property = true
+writable = "overridden"
+
+[selene.structs.DataModel.OpenScreenshotsFolder]
+method = true
+args = []
+
+[selene.structs.DataModel.OpenVideosFolder]
+method = true
+args = []
+
+[selene.structs.DataModel.Parent]
+struct = "Instance"
+
+[selene.structs.DataModel.PlaceId]
+property = true
+
+[selene.structs.DataModel.PlaceVersion]
+property = true
+
+[selene.structs.DataModel.PrivateServerId]
+property = true
+
+[selene.structs.DataModel.PrivateServerOwnerId]
+property = true
+
+[selene.structs.DataModel.ReportInGoogleAnalytics]
+method = true
+
+[[selene.structs.DataModel.ReportInGoogleAnalytics.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.ReportInGoogleAnalytics.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.ReportInGoogleAnalytics.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.ReportInGoogleAnalytics.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.ScreenshotReady]
+struct = "Event"
+
+[selene.structs.DataModel.ServiceAdded]
+struct = "Event"
+
+[selene.structs.DataModel.ServiceRemoving]
+struct = "Event"
+
+[selene.structs.DataModel.SetAttribute]
+method = true
+
+[[selene.structs.DataModel.SetAttribute.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.SetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.SetFastFlagForTesting]
+method = true
+
+[[selene.structs.DataModel.SetFastFlagForTesting.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.SetFastFlagForTesting.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.SetFastIntForTesting]
+method = true
+
+[[selene.structs.DataModel.SetFastIntForTesting.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.SetFastIntForTesting.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.SetFastStringForTesting]
+method = true
+
+[[selene.structs.DataModel.SetFastStringForTesting.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.SetFastStringForTesting.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.SetPlaceId]
+method = true
+
+[[selene.structs.DataModel.SetPlaceId.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.SetUniverseId]
+method = true
+
+[[selene.structs.DataModel.SetUniverseId.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.Shutdown]
+method = true
+args = []
+
+[selene.structs.DataModel.WaitForChild]
+method = true
+
+[[selene.structs.DataModel.WaitForChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.DataModel.WaitForChild.args]]
+required = false
+type = "any"
+
+[selene.structs.DataModel.Workspace]
+struct = "Workspace"
+[selene.structs.EnumItem.Name]
+property = true
+
+[selene.structs.EnumItem.Value]
+property = true
+[selene.structs.Event.Connect]
+method = true
+
+[[selene.structs.Event.Connect.args]]
+type = "function"
+
+[selene.structs.Event.Wait]
+method = true
+args = []
+[selene.structs.Instance."*"]
+any = true
+[selene.structs.Plugin."*"]
+struct = "Instance"
+
+[selene.structs.Plugin.Activate]
+method = true
+
+[[selene.structs.Plugin.Activate.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.AncestryChanged]
+struct = "Event"
+
+[selene.structs.Plugin.Archivable]
+property = true
+writable = "overridden"
+
+[selene.structs.Plugin.AttributeChanged]
+struct = "Event"
+
+[selene.structs.Plugin.Changed]
+struct = "Event"
+
+[selene.structs.Plugin.ChildAdded]
+struct = "Event"
+
+[selene.structs.Plugin.ChildRemoved]
+struct = "Event"
+
+[selene.structs.Plugin.ClassName]
+property = true
+
+[selene.structs.Plugin.ClearAllChildren]
+method = true
+args = []
+
+[selene.structs.Plugin.Clone]
+method = true
+args = []
+
+[selene.structs.Plugin.CollisionEnabled]
+property = true
+
+[selene.structs.Plugin.CreateDockWidgetPluginGui]
+method = true
+
+[[selene.structs.Plugin.CreateDockWidgetPluginGui.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.CreateDockWidgetPluginGui.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.CreatePluginAction]
+method = true
+
+[[selene.structs.Plugin.CreatePluginAction.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.CreatePluginAction.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.CreatePluginAction.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.CreatePluginAction.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.CreatePluginAction.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.CreatePluginMenu]
+method = true
+
+[[selene.structs.Plugin.CreatePluginMenu.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.CreatePluginMenu.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.CreatePluginMenu.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.CreateQWidgetPluginGui]
+method = true
+
+[[selene.structs.Plugin.CreateQWidgetPluginGui.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.CreateQWidgetPluginGui.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.CreateToolbar]
+method = true
+
+[[selene.structs.Plugin.CreateToolbar.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.Deactivate]
+method = true
+args = []
+
+[selene.structs.Plugin.Deactivation]
+struct = "Event"
+
+[selene.structs.Plugin.DescendantAdded]
+struct = "Event"
+
+[selene.structs.Plugin.DescendantRemoving]
+struct = "Event"
+
+[selene.structs.Plugin.Destroy]
+method = true
+args = []
+
+[selene.structs.Plugin.FindFirstAncestor]
+method = true
+
+[[selene.structs.Plugin.FindFirstAncestor.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.FindFirstAncestorOfClass]
+method = true
+
+[[selene.structs.Plugin.FindFirstAncestorOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.FindFirstAncestorWhichIsA]
+method = true
+
+[[selene.structs.Plugin.FindFirstAncestorWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.FindFirstChild]
+method = true
+
+[[selene.structs.Plugin.FindFirstChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.FindFirstChild.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.FindFirstChildOfClass]
+method = true
+
+[[selene.structs.Plugin.FindFirstChildOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.FindFirstChildWhichIsA]
+method = true
+
+[[selene.structs.Plugin.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.GetAttribute]
+method = true
+
+[[selene.structs.Plugin.GetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.GetAttributeChangedSignal]
+method = true
+
+[[selene.structs.Plugin.GetAttributeChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.GetAttributes]
+method = true
+args = []
+
+[selene.structs.Plugin.GetChildren]
+method = true
+args = []
+
+[selene.structs.Plugin.GetDebugId]
+method = true
+
+[[selene.structs.Plugin.GetDebugId.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.GetDescendants]
+method = true
+args = []
+
+[selene.structs.Plugin.GetFullName]
+method = true
+args = []
+
+[selene.structs.Plugin.GetItem]
+method = true
+
+[[selene.structs.Plugin.GetItem.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.GetItem.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.GetJoinMode]
+method = true
+args = []
+
+[selene.structs.Plugin.GetMouse]
+method = true
+args = []
+
+[selene.structs.Plugin.GetPropertyChangedSignal]
+method = true
+
+[[selene.structs.Plugin.GetPropertyChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.GetSelectedRibbonTool]
+method = true
+args = []
+
+[selene.structs.Plugin.GetSetting]
+method = true
+
+[[selene.structs.Plugin.GetSetting.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.GridSize]
+property = true
+
+[selene.structs.Plugin.ImportFbxAnimation]
+method = true
+
+[[selene.structs.Plugin.ImportFbxAnimation.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.ImportFbxAnimation.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.ImportFbxRig]
+method = true
+
+[[selene.structs.Plugin.ImportFbxRig.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.Invoke]
+method = true
+
+[[selene.structs.Plugin.Invoke.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.Invoke.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.IsA]
+method = true
+
+[[selene.structs.Plugin.IsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.IsActivated]
+method = true
+args = []
+
+[selene.structs.Plugin.IsActivatedWithExclusiveMouse]
+method = true
+args = []
+
+[selene.structs.Plugin.IsAncestorOf]
+method = true
+
+[[selene.structs.Plugin.IsAncestorOf.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.IsDescendantOf]
+method = true
+
+[[selene.structs.Plugin.IsDescendantOf.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.Name]
+property = true
+writable = "overridden"
+
+[selene.structs.Plugin.Negate]
+method = true
+
+[[selene.structs.Plugin.Negate.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.OnInvoke]
+method = true
+
+[[selene.structs.Plugin.OnInvoke.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.OnInvoke.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.OnSetItem]
+method = true
+
+[[selene.structs.Plugin.OnSetItem.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.OnSetItem.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.OpenScript]
+method = true
+
+[[selene.structs.Plugin.OpenScript.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.OpenScript.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.OpenWikiPage]
+method = true
+
+[[selene.structs.Plugin.OpenWikiPage.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.Parent]
+struct = "Instance"
+
+[selene.structs.Plugin.PauseSound]
+method = true
+
+[[selene.structs.Plugin.PauseSound.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.PlaySound]
+method = true
+
+[[selene.structs.Plugin.PlaySound.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.PromptForExistingAssetId]
+method = true
+
+[[selene.structs.Plugin.PromptForExistingAssetId.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.PromptSaveSelection]
+method = true
+
+[[selene.structs.Plugin.PromptSaveSelection.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.ResumeSound]
+method = true
+
+[[selene.structs.Plugin.ResumeSound.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.SaveSelectedToRoblox]
+method = true
+args = []
+
+[selene.structs.Plugin.SelectRibbonTool]
+method = true
+
+[[selene.structs.Plugin.SelectRibbonTool.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.SelectRibbonTool.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.Separate]
+method = true
+
+[[selene.structs.Plugin.Separate.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.SetAttribute]
+method = true
+
+[[selene.structs.Plugin.SetAttribute.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.SetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.SetItem]
+method = true
+
+[[selene.structs.Plugin.SetItem.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.SetItem.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.SetSetting]
+method = true
+
+[[selene.structs.Plugin.SetSetting.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.SetSetting.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.StartDecalDrag]
+method = true
+
+[[selene.structs.Plugin.StartDecalDrag.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.StartDrag]
+method = true
+
+[[selene.structs.Plugin.StartDrag.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.StopAllSounds]
+method = true
+args = []
+
+[selene.structs.Plugin.Union]
+method = true
+
+[[selene.structs.Plugin.Union.args]]
+required = false
+type = "any"
+
+[selene.structs.Plugin.Unloading]
+struct = "Event"
+
+[selene.structs.Plugin.WaitForChild]
+method = true
+
+[[selene.structs.Plugin.WaitForChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.Plugin.WaitForChild.args]]
+required = false
+type = "any"
+[selene.structs.Script."*"]
+struct = "Instance"
+
+[selene.structs.Script.AncestryChanged]
+struct = "Event"
+
+[selene.structs.Script.Archivable]
+property = true
+writable = "overridden"
+
+[selene.structs.Script.AttributeChanged]
+struct = "Event"
+
+[selene.structs.Script.Changed]
+struct = "Event"
+
+[selene.structs.Script.ChildAdded]
+struct = "Event"
+
+[selene.structs.Script.ChildRemoved]
+struct = "Event"
+
+[selene.structs.Script.ClassName]
+property = true
+
+[selene.structs.Script.ClearAllChildren]
+method = true
+args = []
+
+[selene.structs.Script.Clone]
+method = true
+args = []
+
+[selene.structs.Script.CurrentEditor]
+struct = "Instance"
+
+[selene.structs.Script.DescendantAdded]
+struct = "Event"
+
+[selene.structs.Script.DescendantRemoving]
+struct = "Event"
+
+[selene.structs.Script.Destroy]
+method = true
+args = []
+
+[selene.structs.Script.Disabled]
+property = true
+writable = "overridden"
+
+[selene.structs.Script.FindFirstAncestor]
+method = true
+
+[[selene.structs.Script.FindFirstAncestor.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.FindFirstAncestorOfClass]
+method = true
+
+[[selene.structs.Script.FindFirstAncestorOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.FindFirstAncestorWhichIsA]
+method = true
+
+[[selene.structs.Script.FindFirstAncestorWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.FindFirstChild]
+method = true
+
+[[selene.structs.Script.FindFirstChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.Script.FindFirstChild.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.FindFirstChildOfClass]
+method = true
+
+[[selene.structs.Script.FindFirstChildOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.FindFirstChildWhichIsA]
+method = true
+
+[[selene.structs.Script.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[[selene.structs.Script.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.GetAttribute]
+method = true
+
+[[selene.structs.Script.GetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.GetAttributeChangedSignal]
+method = true
+
+[[selene.structs.Script.GetAttributeChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.GetAttributes]
+method = true
+args = []
+
+[selene.structs.Script.GetChildren]
+method = true
+args = []
+
+[selene.structs.Script.GetDebugId]
+method = true
+
+[[selene.structs.Script.GetDebugId.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.GetDescendants]
+method = true
+args = []
+
+[selene.structs.Script.GetFullName]
+method = true
+args = []
+
+[selene.structs.Script.GetHash]
+method = true
+args = []
+
+[selene.structs.Script.GetPropertyChangedSignal]
+method = true
+
+[[selene.structs.Script.GetPropertyChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.IsA]
+method = true
+
+[[selene.structs.Script.IsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.IsAncestorOf]
+method = true
+
+[[selene.structs.Script.IsAncestorOf.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.IsDescendantOf]
+method = true
+
+[[selene.structs.Script.IsDescendantOf.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.LinkedSource]
+property = true
+writable = "overridden"
+
+[selene.structs.Script.Name]
+property = true
+writable = "overridden"
+
+[selene.structs.Script.Parent]
+struct = "Instance"
+
+[selene.structs.Script.SetAttribute]
+method = true
+
+[[selene.structs.Script.SetAttribute.args]]
+required = false
+type = "any"
+
+[[selene.structs.Script.SetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.Script.WaitForChild]
+method = true
+
+[[selene.structs.Script.WaitForChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.Script.WaitForChild.args]]
+required = false
+type = "any"
+[selene.structs.Workspace."*"]
+struct = "Instance"
+
+[selene.structs.Workspace.AllowThirdPartySales]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.AncestryChanged]
+struct = "Event"
+
+[selene.structs.Workspace.Archivable]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.AttributeChanged]
+struct = "Event"
+
+[selene.structs.Workspace.BreakJoints]
+method = true
+args = []
+
+[selene.structs.Workspace.CalculateJumpPower]
+method = true
+
+[[selene.structs.Workspace.CalculateJumpPower.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.CalculateJumpPower.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.Changed]
+struct = "Event"
+
+[selene.structs.Workspace.ChildAdded]
+struct = "Event"
+
+[selene.structs.Workspace.ChildRemoved]
+struct = "Event"
+
+[selene.structs.Workspace.ClassName]
+property = true
+
+[selene.structs.Workspace.ClearAllChildren]
+method = true
+args = []
+
+[selene.structs.Workspace.Clone]
+method = true
+args = []
+
+[selene.structs.Workspace.CurrentCamera]
+struct = "Camera"
+
+[selene.structs.Workspace.DescendantAdded]
+struct = "Event"
+
+[selene.structs.Workspace.DescendantRemoving]
+struct = "Event"
+
+[selene.structs.Workspace.Destroy]
+method = true
+args = []
+
+[selene.structs.Workspace.DistributedGameTime]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.ExperimentalSolverIsEnabled]
+method = true
+args = []
+
+[selene.structs.Workspace.FindFirstAncestor]
+method = true
+
+[[selene.structs.Workspace.FindFirstAncestor.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindFirstAncestorOfClass]
+method = true
+
+[[selene.structs.Workspace.FindFirstAncestorOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindFirstAncestorWhichIsA]
+method = true
+
+[[selene.structs.Workspace.FindFirstAncestorWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindFirstChild]
+method = true
+
+[[selene.structs.Workspace.FindFirstChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindFirstChild.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindFirstChildOfClass]
+method = true
+
+[[selene.structs.Workspace.FindFirstChildOfClass.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindFirstChildWhichIsA]
+method = true
+
+[[selene.structs.Workspace.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindFirstChildWhichIsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindPartOnRay]
+method = true
+
+[[selene.structs.Workspace.FindPartOnRay.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartOnRay.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartOnRay.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartOnRay.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindPartOnRayWithIgnoreList]
+method = true
+
+[[selene.structs.Workspace.FindPartOnRayWithIgnoreList.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartOnRayWithIgnoreList.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartOnRayWithIgnoreList.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartOnRayWithIgnoreList.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindPartOnRayWithWhitelist]
+method = true
+
+[[selene.structs.Workspace.FindPartOnRayWithWhitelist.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartOnRayWithWhitelist.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartOnRayWithWhitelist.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindPartsInRegion3]
+method = true
+
+[[selene.structs.Workspace.FindPartsInRegion3.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartsInRegion3.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartsInRegion3.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindPartsInRegion3WithIgnoreList]
+method = true
+
+[[selene.structs.Workspace.FindPartsInRegion3WithIgnoreList.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartsInRegion3WithIgnoreList.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartsInRegion3WithIgnoreList.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.FindPartsInRegion3WithWhiteList]
+method = true
+
+[[selene.structs.Workspace.FindPartsInRegion3WithWhiteList.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartsInRegion3WithWhiteList.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.FindPartsInRegion3WithWhiteList.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.GetAttribute]
+method = true
+
+[[selene.structs.Workspace.GetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.GetAttributeChangedSignal]
+method = true
+
+[[selene.structs.Workspace.GetAttributeChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.GetAttributes]
+method = true
+args = []
+
+[selene.structs.Workspace.GetBoundingBox]
+method = true
+args = []
+
+[selene.structs.Workspace.GetChildren]
+method = true
+args = []
+
+[selene.structs.Workspace.GetDebugId]
+method = true
+
+[[selene.structs.Workspace.GetDebugId.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.GetDescendants]
+method = true
+args = []
+
+[selene.structs.Workspace.GetExtentsSize]
+method = true
+args = []
+
+[selene.structs.Workspace.GetFullName]
+method = true
+args = []
+
+[selene.structs.Workspace.GetNumAwakeParts]
+method = true
+args = []
+
+[selene.structs.Workspace.GetPhysicsThrottling]
+method = true
+args = []
+
+[selene.structs.Workspace.GetPrimaryPartCFrame]
+method = true
+args = []
+
+[selene.structs.Workspace.GetPropertyChangedSignal]
+method = true
+
+[[selene.structs.Workspace.GetPropertyChangedSignal.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.GetRealPhysicsFPS]
+method = true
+args = []
+
+[selene.structs.Workspace.Gravity]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.IkMoveTo]
+method = true
+
+[[selene.structs.Workspace.IkMoveTo.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.IkMoveTo.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.IkMoveTo.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.IkMoveTo.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.IkMoveTo.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.IsA]
+method = true
+
+[[selene.structs.Workspace.IsA.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.IsAncestorOf]
+method = true
+
+[[selene.structs.Workspace.IsAncestorOf.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.IsDescendantOf]
+method = true
+
+[[selene.structs.Workspace.IsDescendantOf.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.IsRegion3Empty]
+method = true
+
+[[selene.structs.Workspace.IsRegion3Empty.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.IsRegion3Empty.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.IsRegion3EmptyWithIgnoreList]
+method = true
+
+[[selene.structs.Workspace.IsRegion3EmptyWithIgnoreList.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.IsRegion3EmptyWithIgnoreList.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.JoinToOutsiders]
+method = true
+
+[[selene.structs.Workspace.JoinToOutsiders.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.JoinToOutsiders.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.MakeJoints]
+method = true
+args = []
+
+[selene.structs.Workspace.MoveTo]
+method = true
+
+[[selene.structs.Workspace.MoveTo.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.Name]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.PGSIsEnabled]
+method = true
+args = []
+
+[selene.structs.Workspace.Parent]
+struct = "Instance"
+
+[selene.structs.Workspace.PrimaryPart]
+struct = "BasePart"
+
+[selene.structs.Workspace.Raycast]
+method = true
+
+[[selene.structs.Workspace.Raycast.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.Raycast.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.Raycast.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.SetAttribute]
+method = true
+
+[[selene.structs.Workspace.SetAttribute.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.SetAttribute.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.SetPhysicsThrottleEnabled]
+method = true
+
+[[selene.structs.Workspace.SetPhysicsThrottleEnabled.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.SetPrimaryPartCFrame]
+method = true
+
+[[selene.structs.Workspace.SetPrimaryPartCFrame.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.StreamingMinRadius]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.StreamingPauseMode]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.StreamingTargetRadius]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.TemporaryLegacyPhysicsSolverOverride]
+property = true
+writable = "overridden"
+
+[selene.structs.Workspace.Terrain]
+struct = "Instance"
+
+[selene.structs.Workspace.TranslateBy]
+method = true
+
+[[selene.structs.Workspace.TranslateBy.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.UnjoinFromOutsiders]
+method = true
+
+[[selene.structs.Workspace.UnjoinFromOutsiders.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.WaitForChild]
+method = true
+
+[[selene.structs.Workspace.WaitForChild.args]]
+required = false
+type = "any"
+
+[[selene.structs.Workspace.WaitForChild.args]]
+required = false
+type = "any"
+
+[selene.structs.Workspace.ZoomToExtents]
+method = true
+args = []
+[BrickColor.Black]
+args = []
+
+[BrickColor.Blue]
+args = []
+
+[BrickColor.DarkGray]
+args = []
+
+[BrickColor.Gray]
+args = []
+
+[BrickColor.Green]
+args = []
+
+[BrickColor.Red]
+args = []
+
+[BrickColor.White]
+args = []
+
+[BrickColor.Yellow]
+args = []
+[[BrickColor.new.args]]
+type = "any"
+
+[[BrickColor.new.args]]
+required = false
+type = "number"
+
+[[BrickColor.new.args]]
+required = false
+type = "number"
+[[BrickColor.palette.args]]
+type = "number"
+
+[BrickColor.random]
+args = []
+[[CFrame.Angles.args]]
+required = false
+type = "number"
+
+[[CFrame.Angles.args]]
+required = false
+type = "number"
+
+[[CFrame.Angles.args]]
+required = false
+type = "number"
+[[CFrame.fromAxisAngle.args]]
+[CFrame.fromAxisAngle.args.type]
+display = "Vector3"
+
+[[CFrame.fromAxisAngle.args]]
+type = "number"
+[[CFrame.fromEulerAnglesXYZ.args]]
+type = "number"
+
+[[CFrame.fromEulerAnglesXYZ.args]]
+type = "number"
+
+[[CFrame.fromEulerAnglesXYZ.args]]
+type = "number"
+[[CFrame.fromEulerAnglesYXZ.args]]
+type = "number"
+
+[[CFrame.fromEulerAnglesYXZ.args]]
+type = "number"
+
+[[CFrame.fromEulerAnglesYXZ.args]]
+type = "number"
+[[CFrame.fromMatrix.args]]
+[CFrame.fromMatrix.args.type]
+display = "Vector3"
+
+[[CFrame.fromMatrix.args]]
+[CFrame.fromMatrix.args.type]
+display = "Vector3"
+
+[[CFrame.fromMatrix.args]]
+[CFrame.fromMatrix.args.type]
+display = "Vector3"
+
+[[CFrame.fromMatrix.args]]
+[CFrame.fromMatrix.args.type]
+display = "Vector3"
+[[CFrame.fromOrientation.args]]
+type = "number"
+
+[[CFrame.fromOrientation.args]]
+type = "number"
+
+[[CFrame.fromOrientation.args]]
+type = "number"
+[[CFrame.new.args]]
+required = false
+type = "any"
+
+[[CFrame.new.args]]
+required = false
+type = "any"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+
+[[CFrame.new.args]]
+required = false
+type = "number"
+[[Color3.fromHSV.args]]
+type = "number"
+
+[[Color3.fromHSV.args]]
+type = "number"
+
+[[Color3.fromHSV.args]]
+type = "number"
+[[Color3.fromRGB.args]]
+type = "number"
+
+[[Color3.fromRGB.args]]
+type = "number"
+
+[[Color3.fromRGB.args]]
+type = "number"
+[[Color3.new.args]]
+required = false
+type = "number"
+
+[[Color3.new.args]]
+required = false
+type = "number"
+
+[[Color3.new.args]]
+required = false
+type = "number"
+[[Color3.toHSV.args]]
+required = false
+
+[Color3.toHSV.args.type]
+display = "Color3"
+[[ColorSequence.new.args]]
+type = "any"
+
+[[ColorSequence.new.args]]
+required = false
+
+[ColorSequence.new.args.type]
+display = "Color3"
+[[ColorSequenceKeypoint.new.args]]
+type = "number"
+
+[[ColorSequenceKeypoint.new.args]]
+[ColorSequenceKeypoint.new.args.type]
+display = "Color3"
+[[DockWidgetPluginGuiInfo.new.args]]
+required = false
+
+[DockWidgetPluginGuiInfo.new.args.type]
+display = "InitialDockState"
+
+[[DockWidgetPluginGuiInfo.new.args]]
+required = false
+type = "bool"
+
+[[DockWidgetPluginGuiInfo.new.args]]
+required = false
+type = "bool"
+
+[[DockWidgetPluginGuiInfo.new.args]]
+required = false
+type = "number"
+
+[[DockWidgetPluginGuiInfo.new.args]]
+required = false
+type = "number"
+
+[[DockWidgetPluginGuiInfo.new.args]]
+required = false
+type = "number"
+
+[[DockWidgetPluginGuiInfo.new.args]]
+required = false
+type = "number"
+[Enum.ActionType.Draw]
+struct = "EnumItem"
+
+[Enum.ActionType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ActionType.Lose]
+struct = "EnumItem"
+
+[Enum.ActionType.Nothing]
+struct = "EnumItem"
+
+[Enum.ActionType.Pause]
+struct = "EnumItem"
+
+[Enum.ActionType.Win]
+struct = "EnumItem"
+[Enum.ActuatorRelativeTo.Attachment0]
+struct = "EnumItem"
+
+[Enum.ActuatorRelativeTo.Attachment1]
+struct = "EnumItem"
+
+[Enum.ActuatorRelativeTo.GetEnumItems]
+args = []
+method = true
+
+[Enum.ActuatorRelativeTo.World]
+struct = "EnumItem"
+[Enum.ActuatorType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ActuatorType.Motor]
+struct = "EnumItem"
+
+[Enum.ActuatorType.None]
+struct = "EnumItem"
+
+[Enum.ActuatorType.Servo]
+struct = "EnumItem"
+[Enum.AlignType.GetEnumItems]
+args = []
+method = true
+
+[Enum.AlignType.Parallel]
+struct = "EnumItem"
+
+[Enum.AlignType.Perpendicular]
+struct = "EnumItem"
+[Enum.AlphaMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.AlphaMode.Overlay]
+struct = "EnumItem"
+
+[Enum.AlphaMode.Transparency]
+struct = "EnumItem"
+[Enum.AnimationPriority.Action]
+struct = "EnumItem"
+
+[Enum.AnimationPriority.Core]
+struct = "EnumItem"
+
+[Enum.AnimationPriority.GetEnumItems]
+args = []
+method = true
+
+[Enum.AnimationPriority.Idle]
+struct = "EnumItem"
+
+[Enum.AnimationPriority.Movement]
+struct = "EnumItem"
+[Enum.AppShellActionType.AvatarEditorPageLoaded]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.GamePageLoaded]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.GetEnumItems]
+args = []
+method = true
+
+[Enum.AppShellActionType.HomePageLoaded]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.None]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.OpenApp]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.ReadConversation]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.TapAvatarTab]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.TapChatTab]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.TapConversationEntry]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.TapGamePageTab]
+struct = "EnumItem"
+
+[Enum.AppShellActionType.TapHomePageTab]
+struct = "EnumItem"
+[Enum.AspectType.FitWithinMaxSize]
+struct = "EnumItem"
+
+[Enum.AspectType.GetEnumItems]
+args = []
+method = true
+
+[Enum.AspectType.ScaleWithParentSize]
+struct = "EnumItem"
+[Enum.AssetFetchStatus.Failure]
+struct = "EnumItem"
+
+[Enum.AssetFetchStatus.GetEnumItems]
+args = []
+method = true
+
+[Enum.AssetFetchStatus.Success]
+struct = "EnumItem"
+[Enum.AssetType.Animation]
+struct = "EnumItem"
+
+[Enum.AssetType.Audio]
+struct = "EnumItem"
+
+[Enum.AssetType.BackAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.Badge]
+struct = "EnumItem"
+
+[Enum.AssetType.ClimbAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.DeathAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.Decal]
+struct = "EnumItem"
+
+[Enum.AssetType.EarAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.EmoteAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.EyeAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.Face]
+struct = "EnumItem"
+
+[Enum.AssetType.FaceAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.FallAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.FrontAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.GamePass]
+struct = "EnumItem"
+
+[Enum.AssetType.Gear]
+struct = "EnumItem"
+
+[Enum.AssetType.GetEnumItems]
+args = []
+method = true
+
+[Enum.AssetType.HairAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.Hat]
+struct = "EnumItem"
+
+[Enum.AssetType.Head]
+struct = "EnumItem"
+
+[Enum.AssetType.IdleAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.Image]
+struct = "EnumItem"
+
+[Enum.AssetType.JumpAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.LeftArm]
+struct = "EnumItem"
+
+[Enum.AssetType.LeftLeg]
+struct = "EnumItem"
+
+[Enum.AssetType.Lua]
+struct = "EnumItem"
+
+[Enum.AssetType.Mesh]
+struct = "EnumItem"
+
+[Enum.AssetType.MeshPart]
+struct = "EnumItem"
+
+[Enum.AssetType.Model]
+struct = "EnumItem"
+
+[Enum.AssetType.NeckAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.Package]
+struct = "EnumItem"
+
+[Enum.AssetType.Pants]
+struct = "EnumItem"
+
+[Enum.AssetType.Place]
+struct = "EnumItem"
+
+[Enum.AssetType.Plugin]
+struct = "EnumItem"
+
+[Enum.AssetType.PoseAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.RightArm]
+struct = "EnumItem"
+
+[Enum.AssetType.RightLeg]
+struct = "EnumItem"
+
+[Enum.AssetType.RunAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.Shirt]
+struct = "EnumItem"
+
+[Enum.AssetType.ShoulderAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.SwimAnimation]
+struct = "EnumItem"
+
+[Enum.AssetType.TeeShirt]
+struct = "EnumItem"
+
+[Enum.AssetType.Torso]
+struct = "EnumItem"
+
+[Enum.AssetType.WaistAccessory]
+struct = "EnumItem"
+
+[Enum.AssetType.WalkAnimation]
+struct = "EnumItem"
+[Enum.AvatarContextMenuOption.Chat]
+struct = "EnumItem"
+
+[Enum.AvatarContextMenuOption.Emote]
+struct = "EnumItem"
+
+[Enum.AvatarContextMenuOption.Friend]
+struct = "EnumItem"
+
+[Enum.AvatarContextMenuOption.GetEnumItems]
+args = []
+method = true
+
+[Enum.AvatarContextMenuOption.InspectMenu]
+struct = "EnumItem"
+[Enum.AvatarJointPositionType.ArtistIntent]
+struct = "EnumItem"
+
+[Enum.AvatarJointPositionType.Fixed]
+struct = "EnumItem"
+
+[Enum.AvatarJointPositionType.GetEnumItems]
+args = []
+method = true
+[Enum.Axis.GetEnumItems]
+args = []
+method = true
+
+[Enum.Axis.X]
+struct = "EnumItem"
+
+[Enum.Axis.Y]
+struct = "EnumItem"
+
+[Enum.Axis.Z]
+struct = "EnumItem"
+[Enum.BinType.Clone]
+struct = "EnumItem"
+
+[Enum.BinType.GameTool]
+struct = "EnumItem"
+
+[Enum.BinType.GetEnumItems]
+args = []
+method = true
+
+[Enum.BinType.Grab]
+struct = "EnumItem"
+
+[Enum.BinType.Hammer]
+struct = "EnumItem"
+
+[Enum.BinType.Script]
+struct = "EnumItem"
+[Enum.BodyPart.GetEnumItems]
+args = []
+method = true
+
+[Enum.BodyPart.Head]
+struct = "EnumItem"
+
+[Enum.BodyPart.LeftArm]
+struct = "EnumItem"
+
+[Enum.BodyPart.LeftLeg]
+struct = "EnumItem"
+
+[Enum.BodyPart.RightArm]
+struct = "EnumItem"
+
+[Enum.BodyPart.RightLeg]
+struct = "EnumItem"
+
+[Enum.BodyPart.Torso]
+struct = "EnumItem"
+[Enum.BodyPartR15.GetEnumItems]
+args = []
+method = true
+
+[Enum.BodyPartR15.Head]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.LeftFoot]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.LeftHand]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.LeftLowerArm]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.LeftLowerLeg]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.LeftUpperArm]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.LeftUpperLeg]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.LowerTorso]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.RightFoot]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.RightHand]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.RightLowerArm]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.RightLowerLeg]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.RightUpperArm]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.RightUpperLeg]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.RootPart]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.Unknown]
+struct = "EnumItem"
+
+[Enum.BodyPartR15.UpperTorso]
+struct = "EnumItem"
+[Enum.BorderMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.BorderMode.Inset]
+struct = "EnumItem"
+
+[Enum.BorderMode.Middle]
+struct = "EnumItem"
+
+[Enum.BorderMode.Outline]
+struct = "EnumItem"
+[Enum.BreakReason.Error]
+struct = "EnumItem"
+
+[Enum.BreakReason.GetEnumItems]
+args = []
+method = true
+
+[Enum.BreakReason.Other]
+struct = "EnumItem"
+
+[Enum.BreakReason.SpecialBreakpoint]
+struct = "EnumItem"
+
+[Enum.BreakReason.UserBreakpoint]
+struct = "EnumItem"
+[Enum.Button.Dismount]
+struct = "EnumItem"
+
+[Enum.Button.GetEnumItems]
+args = []
+method = true
+
+[Enum.Button.Jump]
+struct = "EnumItem"
+[Enum.ButtonStyle.Custom]
+struct = "EnumItem"
+
+[Enum.ButtonStyle.GetEnumItems]
+args = []
+method = true
+
+[Enum.ButtonStyle.RobloxButton]
+struct = "EnumItem"
+
+[Enum.ButtonStyle.RobloxButtonDefault]
+struct = "EnumItem"
+
+[Enum.ButtonStyle.RobloxRoundButton]
+struct = "EnumItem"
+
+[Enum.ButtonStyle.RobloxRoundDefaultButton]
+struct = "EnumItem"
+
+[Enum.ButtonStyle.RobloxRoundDropdownButton]
+struct = "EnumItem"
+[Enum.CameraMode.Classic]
+struct = "EnumItem"
+
+[Enum.CameraMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.CameraMode.LockFirstPerson]
+struct = "EnumItem"
+[Enum.CameraPanMode.Classic]
+struct = "EnumItem"
+
+[Enum.CameraPanMode.EdgeBump]
+struct = "EnumItem"
+
+[Enum.CameraPanMode.GetEnumItems]
+args = []
+method = true
+[Enum.CameraType.Attach]
+struct = "EnumItem"
+
+[Enum.CameraType.Custom]
+struct = "EnumItem"
+
+[Enum.CameraType.Fixed]
+struct = "EnumItem"
+
+[Enum.CameraType.Follow]
+struct = "EnumItem"
+
+[Enum.CameraType.GetEnumItems]
+args = []
+method = true
+
+[Enum.CameraType.Orbital]
+struct = "EnumItem"
+
+[Enum.CameraType.Scriptable]
+struct = "EnumItem"
+
+[Enum.CameraType.Track]
+struct = "EnumItem"
+
+[Enum.CameraType.Watch]
+struct = "EnumItem"
+[Enum.CellBlock.CornerWedge]
+struct = "EnumItem"
+
+[Enum.CellBlock.GetEnumItems]
+args = []
+method = true
+
+[Enum.CellBlock.HorizontalWedge]
+struct = "EnumItem"
+
+[Enum.CellBlock.InverseCornerWedge]
+struct = "EnumItem"
+
+[Enum.CellBlock.Solid]
+struct = "EnumItem"
+
+[Enum.CellBlock.VerticalWedge]
+struct = "EnumItem"
+[Enum.CellMaterial.Aluminum]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Asphalt]
+struct = "EnumItem"
+
+[Enum.CellMaterial.BluePlastic]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Brick]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Cement]
+struct = "EnumItem"
+
+[Enum.CellMaterial.CinderBlock]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Empty]
+struct = "EnumItem"
+
+[Enum.CellMaterial.GetEnumItems]
+args = []
+method = true
+
+[Enum.CellMaterial.Gold]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Granite]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Grass]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Gravel]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Iron]
+struct = "EnumItem"
+
+[Enum.CellMaterial.MossyStone]
+struct = "EnumItem"
+
+[Enum.CellMaterial.RedPlastic]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Sand]
+struct = "EnumItem"
+
+[Enum.CellMaterial.Water]
+struct = "EnumItem"
+
+[Enum.CellMaterial.WoodLog]
+struct = "EnumItem"
+
+[Enum.CellMaterial.WoodPlank]
+struct = "EnumItem"
+[Enum.CellOrientation.GetEnumItems]
+args = []
+method = true
+
+[Enum.CellOrientation.NegX]
+struct = "EnumItem"
+
+[Enum.CellOrientation.NegZ]
+struct = "EnumItem"
+
+[Enum.CellOrientation.X]
+struct = "EnumItem"
+
+[Enum.CellOrientation.Z]
+struct = "EnumItem"
+[Enum.CenterDialogType.GetEnumItems]
+args = []
+method = true
+
+[Enum.CenterDialogType.ModalDialog]
+struct = "EnumItem"
+
+[Enum.CenterDialogType.PlayerInitiatedDialog]
+struct = "EnumItem"
+
+[Enum.CenterDialogType.QuitDialog]
+struct = "EnumItem"
+
+[Enum.CenterDialogType.UnsolicitedDialog]
+struct = "EnumItem"
+[Enum.ChatCallbackType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ChatCallbackType.OnClientFormattingMessage]
+struct = "EnumItem"
+
+[Enum.ChatCallbackType.OnClientSendingMessage]
+struct = "EnumItem"
+
+[Enum.ChatCallbackType.OnCreatingChatWindow]
+struct = "EnumItem"
+
+[Enum.ChatCallbackType.OnServerReceivingMessage]
+struct = "EnumItem"
+[Enum.ChatColor.Blue]
+struct = "EnumItem"
+
+[Enum.ChatColor.GetEnumItems]
+args = []
+method = true
+
+[Enum.ChatColor.Green]
+struct = "EnumItem"
+
+[Enum.ChatColor.Red]
+struct = "EnumItem"
+
+[Enum.ChatColor.White]
+struct = "EnumItem"
+[Enum.ChatMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.ChatMode.Menu]
+struct = "EnumItem"
+
+[Enum.ChatMode.TextAndMenu]
+struct = "EnumItem"
+[Enum.ChatPrivacyMode.AllUsers]
+struct = "EnumItem"
+
+[Enum.ChatPrivacyMode.Friends]
+struct = "EnumItem"
+
+[Enum.ChatPrivacyMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.ChatPrivacyMode.NoOne]
+struct = "EnumItem"
+[Enum.ChatStyle.Bubble]
+struct = "EnumItem"
+
+[Enum.ChatStyle.Classic]
+struct = "EnumItem"
+
+[Enum.ChatStyle.ClassicAndBubble]
+struct = "EnumItem"
+
+[Enum.ChatStyle.GetEnumItems]
+args = []
+method = true
+[Enum.CollisionFidelity.Box]
+struct = "EnumItem"
+
+[Enum.CollisionFidelity.Default]
+struct = "EnumItem"
+
+[Enum.CollisionFidelity.GetEnumItems]
+args = []
+method = true
+
+[Enum.CollisionFidelity.Hull]
+struct = "EnumItem"
+
+[Enum.CollisionFidelity.PreciseConvexDecomposition]
+struct = "EnumItem"
+[Enum.CollisionsMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.CollisionsMode.IncludeContactedMechanisms]
+struct = "EnumItem"
+
+[Enum.CollisionsMode.NoCollisions]
+struct = "EnumItem"
+
+[Enum.CollisionsMode.OtherMechanismsAnchored]
+struct = "EnumItem"
+[Enum.ComputerCameraMovementMode.CameraToggle]
+struct = "EnumItem"
+
+[Enum.ComputerCameraMovementMode.Classic]
+struct = "EnumItem"
+
+[Enum.ComputerCameraMovementMode.Default]
+struct = "EnumItem"
+
+[Enum.ComputerCameraMovementMode.Follow]
+struct = "EnumItem"
+
+[Enum.ComputerCameraMovementMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.ComputerCameraMovementMode.Orbital]
+struct = "EnumItem"
+[Enum.ComputerMovementMode.ClickToMove]
+struct = "EnumItem"
+
+[Enum.ComputerMovementMode.Default]
+struct = "EnumItem"
+
+[Enum.ComputerMovementMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.ComputerMovementMode.KeyboardMouse]
+struct = "EnumItem"
+[Enum.ConnectionError.DisconnectBadhash]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectBlockedIP]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectBySecurityPolicy]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectCloudEditKick]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectConnectionLost]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectDevMaintenance]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectDuplicatePlayer]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectDuplicateTicket]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectErrors]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectEvicted]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectHashTimeout]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectIdle]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectIllegalTeleport]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectLuaKick]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectNewSecurityKeyMismatch]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectOnRemoteSysStats]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectPlayerless]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectProtocolMismatch]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectRaknetErrors]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectReceivePacketError]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectReceivePacketStreamError]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectRejoin]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectRobloxMaintenance]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectSecurityKeyMismatch]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectSendPacketError]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectTimeout]
+struct = "EnumItem"
+
+[Enum.ConnectionError.DisconnectWrongVersion]
+struct = "EnumItem"
+
+[Enum.ConnectionError.GetEnumItems]
+args = []
+method = true
+
+[Enum.ConnectionError.OK]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchCustomMessage]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchDisabled]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchError]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchErrors]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchFlooded]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchGameEnded]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchGameFull]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchHashException]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchHashExpired]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchHttpError]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchOtherError]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchPartyCannotFit]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchRestricted]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchUnauthorized]
+struct = "EnumItem"
+
+[Enum.ConnectionError.PlacelaunchUserLeft]
+struct = "EnumItem"
+
+[Enum.ConnectionError.TeleportErrors]
+struct = "EnumItem"
+
+[Enum.ConnectionError.TeleportFailure]
+struct = "EnumItem"
+
+[Enum.ConnectionError.TeleportFlooded]
+struct = "EnumItem"
+
+[Enum.ConnectionError.TeleportGameEnded]
+struct = "EnumItem"
+
+[Enum.ConnectionError.TeleportGameFull]
+struct = "EnumItem"
+
+[Enum.ConnectionError.TeleportGameNotFound]
+struct = "EnumItem"
+
+[Enum.ConnectionError.TeleportIsTeleporting]
+struct = "EnumItem"
+
+[Enum.ConnectionError.TeleportUnauthorized]
+struct = "EnumItem"
+[Enum.ConnectionState.Connected]
+struct = "EnumItem"
+
+[Enum.ConnectionState.Disconnected]
+struct = "EnumItem"
+
+[Enum.ConnectionState.GetEnumItems]
+args = []
+method = true
+[Enum.ContextActionPriority.Default]
+struct = "EnumItem"
+
+[Enum.ContextActionPriority.GetEnumItems]
+args = []
+method = true
+
+[Enum.ContextActionPriority.High]
+struct = "EnumItem"
+
+[Enum.ContextActionPriority.Low]
+struct = "EnumItem"
+
+[Enum.ContextActionPriority.Medium]
+struct = "EnumItem"
+[Enum.ContextActionResult.GetEnumItems]
+args = []
+method = true
+
+[Enum.ContextActionResult.Pass]
+struct = "EnumItem"
+
+[Enum.ContextActionResult.Sink]
+struct = "EnumItem"
+[Enum.ControlMode.Classic]
+struct = "EnumItem"
+
+[Enum.ControlMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.ControlMode.MouseLockSwitch]
+struct = "EnumItem"
+[Enum.CoreGuiType.All]
+struct = "EnumItem"
+
+[Enum.CoreGuiType.Backpack]
+struct = "EnumItem"
+
+[Enum.CoreGuiType.Chat]
+struct = "EnumItem"
+
+[Enum.CoreGuiType.EmotesMenu]
+struct = "EnumItem"
+
+[Enum.CoreGuiType.GetEnumItems]
+args = []
+method = true
+
+[Enum.CoreGuiType.Health]
+struct = "EnumItem"
+
+[Enum.CoreGuiType.PlayerList]
+struct = "EnumItem"
+[Enum.CreatorType.GetEnumItems]
+args = []
+method = true
+
+[Enum.CreatorType.Group]
+struct = "EnumItem"
+
+[Enum.CreatorType.User]
+struct = "EnumItem"
+[Enum.CurrencyType.Default]
+struct = "EnumItem"
+
+[Enum.CurrencyType.GetEnumItems]
+args = []
+method = true
+
+[Enum.CurrencyType.Robux]
+struct = "EnumItem"
+
+[Enum.CurrencyType.Tix]
+struct = "EnumItem"
+[Enum.CustomCameraMode.Classic]
+struct = "EnumItem"
+
+[Enum.CustomCameraMode.Default]
+struct = "EnumItem"
+
+[Enum.CustomCameraMode.Follow]
+struct = "EnumItem"
+
+[Enum.CustomCameraMode.GetEnumItems]
+args = []
+method = true
+[Enum.DataStoreRequestType.GetAsync]
+struct = "EnumItem"
+
+[Enum.DataStoreRequestType.GetEnumItems]
+args = []
+method = true
+
+[Enum.DataStoreRequestType.GetSortedAsync]
+struct = "EnumItem"
+
+[Enum.DataStoreRequestType.OnUpdate]
+struct = "EnumItem"
+
+[Enum.DataStoreRequestType.SetIncrementAsync]
+struct = "EnumItem"
+
+[Enum.DataStoreRequestType.SetIncrementSortedAsync]
+struct = "EnumItem"
+
+[Enum.DataStoreRequestType.UpdateAsync]
+struct = "EnumItem"
+[Enum.DevCameraOcclusionMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.DevCameraOcclusionMode.Invisicam]
+struct = "EnumItem"
+
+[Enum.DevCameraOcclusionMode.Zoom]
+struct = "EnumItem"
+[Enum.DevComputerCameraMovementMode.CameraToggle]
+struct = "EnumItem"
+
+[Enum.DevComputerCameraMovementMode.Classic]
+struct = "EnumItem"
+
+[Enum.DevComputerCameraMovementMode.Follow]
+struct = "EnumItem"
+
+[Enum.DevComputerCameraMovementMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.DevComputerCameraMovementMode.Orbital]
+struct = "EnumItem"
+
+[Enum.DevComputerCameraMovementMode.UserChoice]
+struct = "EnumItem"
+[Enum.DevComputerMovementMode.ClickToMove]
+struct = "EnumItem"
+
+[Enum.DevComputerMovementMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.DevComputerMovementMode.KeyboardMouse]
+struct = "EnumItem"
+
+[Enum.DevComputerMovementMode.Scriptable]
+struct = "EnumItem"
+
+[Enum.DevComputerMovementMode.UserChoice]
+struct = "EnumItem"
+[Enum.DevTouchCameraMovementMode.Classic]
+struct = "EnumItem"
+
+[Enum.DevTouchCameraMovementMode.Follow]
+struct = "EnumItem"
+
+[Enum.DevTouchCameraMovementMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.DevTouchCameraMovementMode.Orbital]
+struct = "EnumItem"
+
+[Enum.DevTouchCameraMovementMode.UserChoice]
+struct = "EnumItem"
+[Enum.DevTouchMovementMode.ClickToMove]
+struct = "EnumItem"
+
+[Enum.DevTouchMovementMode.DPad]
+struct = "EnumItem"
+
+[Enum.DevTouchMovementMode.DynamicThumbstick]
+struct = "EnumItem"
+
+[Enum.DevTouchMovementMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.DevTouchMovementMode.Scriptable]
+struct = "EnumItem"
+
+[Enum.DevTouchMovementMode.Thumbpad]
+struct = "EnumItem"
+
+[Enum.DevTouchMovementMode.Thumbstick]
+struct = "EnumItem"
+
+[Enum.DevTouchMovementMode.UserChoice]
+struct = "EnumItem"
+[Enum.DeveloperMemoryTag.Animation]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.GetEnumItems]
+args = []
+method = true
+
+[Enum.DeveloperMemoryTag.GraphicsMeshParts]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.GraphicsParticles]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.GraphicsParts]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.GraphicsSolidModels]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.GraphicsSpatialHash]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.GraphicsTerrain]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.GraphicsTexture]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.GraphicsTextureCharacter]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.Gui]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.HttpCache]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.Instances]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.Internal]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.LuaHeap]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.Navigation]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.PhysicsCollision]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.PhysicsParts]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.Script]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.Signals]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.Sounds]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.StreamingSounds]
+struct = "EnumItem"
+
+[Enum.DeveloperMemoryTag.TerrainVoxels]
+struct = "EnumItem"
+[Enum.DeviceType.Desktop]
+struct = "EnumItem"
+
+[Enum.DeviceType.GetEnumItems]
+args = []
+method = true
+
+[Enum.DeviceType.Phone]
+struct = "EnumItem"
+
+[Enum.DeviceType.Tablet]
+struct = "EnumItem"
+
+[Enum.DeviceType.Unknown]
+struct = "EnumItem"
+[Enum.DialogBehaviorType.GetEnumItems]
+args = []
+method = true
+
+[Enum.DialogBehaviorType.MultiplePlayers]
+struct = "EnumItem"
+
+[Enum.DialogBehaviorType.SinglePlayer]
+struct = "EnumItem"
+[Enum.DialogPurpose.GetEnumItems]
+args = []
+method = true
+
+[Enum.DialogPurpose.Help]
+struct = "EnumItem"
+
+[Enum.DialogPurpose.Quest]
+struct = "EnumItem"
+
+[Enum.DialogPurpose.Shop]
+struct = "EnumItem"
+[Enum.DialogTone.Enemy]
+struct = "EnumItem"
+
+[Enum.DialogTone.Friendly]
+struct = "EnumItem"
+
+[Enum.DialogTone.GetEnumItems]
+args = []
+method = true
+
+[Enum.DialogTone.Neutral]
+struct = "EnumItem"
+[Enum.DominantAxis.GetEnumItems]
+args = []
+method = true
+
+[Enum.DominantAxis.Height]
+struct = "EnumItem"
+
+[Enum.DominantAxis.Width]
+struct = "EnumItem"
+[Enum.DraftStatusCode.DraftCommitted]
+struct = "EnumItem"
+
+[Enum.DraftStatusCode.DraftOutdated]
+struct = "EnumItem"
+
+[Enum.DraftStatusCode.GetEnumItems]
+args = []
+method = true
+
+[Enum.DraftStatusCode.OK]
+struct = "EnumItem"
+
+[Enum.DraftStatusCode.ScriptRemoved]
+struct = "EnumItem"
+[Enum.EasingDirection.GetEnumItems]
+args = []
+method = true
+
+[Enum.EasingDirection.In]
+struct = "EnumItem"
+
+[Enum.EasingDirection.InOut]
+struct = "EnumItem"
+
+[Enum.EasingDirection.Out]
+struct = "EnumItem"
+[Enum.EasingStyle.Back]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Bounce]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Circular]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Cubic]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Elastic]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Exponential]
+struct = "EnumItem"
+
+[Enum.EasingStyle.GetEnumItems]
+args = []
+method = true
+
+[Enum.EasingStyle.Linear]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Quad]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Quart]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Quint]
+struct = "EnumItem"
+
+[Enum.EasingStyle.Sine]
+struct = "EnumItem"
+[Enum.ElasticBehavior.Always]
+struct = "EnumItem"
+
+[Enum.ElasticBehavior.GetEnumItems]
+args = []
+method = true
+
+[Enum.ElasticBehavior.Never]
+struct = "EnumItem"
+
+[Enum.ElasticBehavior.WhenScrollable]
+struct = "EnumItem"
+[Enum.EnviromentalPhysicsThrottle.Always]
+struct = "EnumItem"
+
+[Enum.EnviromentalPhysicsThrottle.DefaultAuto]
+struct = "EnumItem"
+
+[Enum.EnviromentalPhysicsThrottle.Disabled]
+struct = "EnumItem"
+
+[Enum.EnviromentalPhysicsThrottle.GetEnumItems]
+args = []
+method = true
+
+[Enum.EnviromentalPhysicsThrottle.Skip16]
+struct = "EnumItem"
+
+[Enum.EnviromentalPhysicsThrottle.Skip2]
+struct = "EnumItem"
+
+[Enum.EnviromentalPhysicsThrottle.Skip4]
+struct = "EnumItem"
+
+[Enum.EnviromentalPhysicsThrottle.Skip8]
+struct = "EnumItem"
+[Enum.ExplosionType.Craters]
+struct = "EnumItem"
+
+[Enum.ExplosionType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ExplosionType.NoCraters]
+struct = "EnumItem"
+[Enum.FillDirection.GetEnumItems]
+args = []
+method = true
+
+[Enum.FillDirection.Horizontal]
+struct = "EnumItem"
+
+[Enum.FillDirection.Vertical]
+struct = "EnumItem"
+[Enum.FilterResult.Accepted]
+struct = "EnumItem"
+
+[Enum.FilterResult.GetEnumItems]
+args = []
+method = true
+
+[Enum.FilterResult.Rejected]
+struct = "EnumItem"
+[Enum.Font.Antique]
+struct = "EnumItem"
+
+[Enum.Font.Arcade]
+struct = "EnumItem"
+
+[Enum.Font.Arial]
+struct = "EnumItem"
+
+[Enum.Font.ArialBold]
+struct = "EnumItem"
+
+[Enum.Font.Bodoni]
+struct = "EnumItem"
+
+[Enum.Font.Cartoon]
+struct = "EnumItem"
+
+[Enum.Font.Code]
+struct = "EnumItem"
+
+[Enum.Font.Fantasy]
+struct = "EnumItem"
+
+[Enum.Font.Garamond]
+struct = "EnumItem"
+
+[Enum.Font.GetEnumItems]
+args = []
+method = true
+
+[Enum.Font.Gotham]
+struct = "EnumItem"
+
+[Enum.Font.GothamBlack]
+struct = "EnumItem"
+
+[Enum.Font.GothamBold]
+struct = "EnumItem"
+
+[Enum.Font.GothamSemibold]
+struct = "EnumItem"
+
+[Enum.Font.Highway]
+struct = "EnumItem"
+
+[Enum.Font.Legacy]
+struct = "EnumItem"
+
+[Enum.Font.SciFi]
+struct = "EnumItem"
+
+[Enum.Font.SourceSans]
+struct = "EnumItem"
+
+[Enum.Font.SourceSansBold]
+struct = "EnumItem"
+
+[Enum.Font.SourceSansItalic]
+struct = "EnumItem"
+
+[Enum.Font.SourceSansLight]
+struct = "EnumItem"
+
+[Enum.Font.SourceSansSemibold]
+struct = "EnumItem"
+[Enum.FontSize.GetEnumItems]
+args = []
+method = true
+
+[Enum.FontSize.Size10]
+struct = "EnumItem"
+
+[Enum.FontSize.Size11]
+struct = "EnumItem"
+
+[Enum.FontSize.Size12]
+struct = "EnumItem"
+
+[Enum.FontSize.Size14]
+struct = "EnumItem"
+
+[Enum.FontSize.Size18]
+struct = "EnumItem"
+
+[Enum.FontSize.Size24]
+struct = "EnumItem"
+
+[Enum.FontSize.Size28]
+struct = "EnumItem"
+
+[Enum.FontSize.Size32]
+struct = "EnumItem"
+
+[Enum.FontSize.Size36]
+struct = "EnumItem"
+
+[Enum.FontSize.Size42]
+struct = "EnumItem"
+
+[Enum.FontSize.Size48]
+struct = "EnumItem"
+
+[Enum.FontSize.Size60]
+struct = "EnumItem"
+
+[Enum.FontSize.Size8]
+struct = "EnumItem"
+
+[Enum.FontSize.Size9]
+struct = "EnumItem"
+
+[Enum.FontSize.Size96]
+struct = "EnumItem"
+[Enum.FormFactor.Brick]
+struct = "EnumItem"
+
+[Enum.FormFactor.Custom]
+struct = "EnumItem"
+
+[Enum.FormFactor.GetEnumItems]
+args = []
+method = true
+
+[Enum.FormFactor.Plate]
+struct = "EnumItem"
+
+[Enum.FormFactor.Symmetric]
+struct = "EnumItem"
+[Enum.FrameStyle.ChatBlue]
+struct = "EnumItem"
+
+[Enum.FrameStyle.ChatGreen]
+struct = "EnumItem"
+
+[Enum.FrameStyle.ChatRed]
+struct = "EnumItem"
+
+[Enum.FrameStyle.Custom]
+struct = "EnumItem"
+
+[Enum.FrameStyle.DropShadow]
+struct = "EnumItem"
+
+[Enum.FrameStyle.GetEnumItems]
+args = []
+method = true
+
+[Enum.FrameStyle.RobloxRound]
+struct = "EnumItem"
+
+[Enum.FrameStyle.RobloxSquare]
+struct = "EnumItem"
+[Enum.FramerateManagerMode.Automatic]
+struct = "EnumItem"
+
+[Enum.FramerateManagerMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.FramerateManagerMode.Off]
+struct = "EnumItem"
+
+[Enum.FramerateManagerMode.On]
+struct = "EnumItem"
+[Enum.FriendRequestEvent.Accept]
+struct = "EnumItem"
+
+[Enum.FriendRequestEvent.Deny]
+struct = "EnumItem"
+
+[Enum.FriendRequestEvent.GetEnumItems]
+args = []
+method = true
+
+[Enum.FriendRequestEvent.Issue]
+struct = "EnumItem"
+
+[Enum.FriendRequestEvent.Revoke]
+struct = "EnumItem"
+[Enum.FriendStatus.Friend]
+struct = "EnumItem"
+
+[Enum.FriendStatus.FriendRequestReceived]
+struct = "EnumItem"
+
+[Enum.FriendStatus.FriendRequestSent]
+struct = "EnumItem"
+
+[Enum.FriendStatus.GetEnumItems]
+args = []
+method = true
+
+[Enum.FriendStatus.NotFriend]
+struct = "EnumItem"
+
+[Enum.FriendStatus.Unknown]
+struct = "EnumItem"
+[Enum.FunctionalTestResult.Error]
+struct = "EnumItem"
+
+[Enum.FunctionalTestResult.GetEnumItems]
+args = []
+method = true
+
+[Enum.FunctionalTestResult.Passed]
+struct = "EnumItem"
+
+[Enum.FunctionalTestResult.Warning]
+struct = "EnumItem"
+[Enum.GameAvatarType.GetEnumItems]
+args = []
+method = true
+
+[Enum.GameAvatarType.PlayerChoice]
+struct = "EnumItem"
+
+[Enum.GameAvatarType.R15]
+struct = "EnumItem"
+
+[Enum.GameAvatarType.R6]
+struct = "EnumItem"
+[Enum.GearGenreSetting.AllGenres]
+struct = "EnumItem"
+
+[Enum.GearGenreSetting.GetEnumItems]
+args = []
+method = true
+
+[Enum.GearGenreSetting.MatchingGenreOnly]
+struct = "EnumItem"
+[Enum.GearType.BuildingTools]
+struct = "EnumItem"
+
+[Enum.GearType.Explosives]
+struct = "EnumItem"
+
+[Enum.GearType.GetEnumItems]
+args = []
+method = true
+
+[Enum.GearType.MeleeWeapons]
+struct = "EnumItem"
+
+[Enum.GearType.MusicalInstruments]
+struct = "EnumItem"
+
+[Enum.GearType.NavigationEnhancers]
+struct = "EnumItem"
+
+[Enum.GearType.PowerUps]
+struct = "EnumItem"
+
+[Enum.GearType.RangedWeapons]
+struct = "EnumItem"
+
+[Enum.GearType.SocialItems]
+struct = "EnumItem"
+
+[Enum.GearType.Transport]
+struct = "EnumItem"
+[Enum.Genre.Adventure]
+struct = "EnumItem"
+
+[Enum.Genre.All]
+struct = "EnumItem"
+
+[Enum.Genre.Fantasy]
+struct = "EnumItem"
+
+[Enum.Genre.Funny]
+struct = "EnumItem"
+
+[Enum.Genre.GetEnumItems]
+args = []
+method = true
+
+[Enum.Genre.Ninja]
+struct = "EnumItem"
+
+[Enum.Genre.Pirate]
+struct = "EnumItem"
+
+[Enum.Genre.Scary]
+struct = "EnumItem"
+
+[Enum.Genre.SciFi]
+struct = "EnumItem"
+
+[Enum.Genre.SkatePark]
+struct = "EnumItem"
+
+[Enum.Genre.Sports]
+struct = "EnumItem"
+
+[Enum.Genre.TownAndCity]
+struct = "EnumItem"
+
+[Enum.Genre.Tutorial]
+struct = "EnumItem"
+
+[Enum.Genre.War]
+struct = "EnumItem"
+
+[Enum.Genre.WildWest]
+struct = "EnumItem"
+[Enum.GraphicsMode.Automatic]
+struct = "EnumItem"
+
+[Enum.GraphicsMode.Direct3D11]
+struct = "EnumItem"
+
+[Enum.GraphicsMode.Direct3D9]
+struct = "EnumItem"
+
+[Enum.GraphicsMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.GraphicsMode.Metal]
+struct = "EnumItem"
+
+[Enum.GraphicsMode.NoGraphics]
+struct = "EnumItem"
+
+[Enum.GraphicsMode.OpenGL]
+struct = "EnumItem"
+
+[Enum.GraphicsMode.Vulkan]
+struct = "EnumItem"
+[Enum.HandlesStyle.GetEnumItems]
+args = []
+method = true
+
+[Enum.HandlesStyle.Movement]
+struct = "EnumItem"
+
+[Enum.HandlesStyle.Resize]
+struct = "EnumItem"
+[Enum.HorizontalAlignment.Center]
+struct = "EnumItem"
+
+[Enum.HorizontalAlignment.GetEnumItems]
+args = []
+method = true
+
+[Enum.HorizontalAlignment.Left]
+struct = "EnumItem"
+
+[Enum.HorizontalAlignment.Right]
+struct = "EnumItem"
+[Enum.HoverAnimateSpeed.Fast]
+struct = "EnumItem"
+
+[Enum.HoverAnimateSpeed.GetEnumItems]
+args = []
+method = true
+
+[Enum.HoverAnimateSpeed.Medium]
+struct = "EnumItem"
+
+[Enum.HoverAnimateSpeed.Slow]
+struct = "EnumItem"
+
+[Enum.HoverAnimateSpeed.VeryFast]
+struct = "EnumItem"
+
+[Enum.HoverAnimateSpeed.VerySlow]
+struct = "EnumItem"
+[Enum.HttpCachePolicy.DataOnly]
+struct = "EnumItem"
+
+[Enum.HttpCachePolicy.Default]
+struct = "EnumItem"
+
+[Enum.HttpCachePolicy.Full]
+struct = "EnumItem"
+
+[Enum.HttpCachePolicy.GetEnumItems]
+args = []
+method = true
+
+[Enum.HttpCachePolicy.InternalRedirectRefresh]
+struct = "EnumItem"
+
+[Enum.HttpCachePolicy.None]
+struct = "EnumItem"
+[Enum.HttpContentType.ApplicationJson]
+struct = "EnumItem"
+
+[Enum.HttpContentType.ApplicationUrlEncoded]
+struct = "EnumItem"
+
+[Enum.HttpContentType.ApplicationXml]
+struct = "EnumItem"
+
+[Enum.HttpContentType.GetEnumItems]
+args = []
+method = true
+
+[Enum.HttpContentType.TextPlain]
+struct = "EnumItem"
+
+[Enum.HttpContentType.TextXml]
+struct = "EnumItem"
+[Enum.HttpError.Aborted]
+struct = "EnumItem"
+
+[Enum.HttpError.ConnectFail]
+struct = "EnumItem"
+
+[Enum.HttpError.DnsResolve]
+struct = "EnumItem"
+
+[Enum.HttpError.GetEnumItems]
+args = []
+method = true
+
+[Enum.HttpError.InvalidRedirect]
+struct = "EnumItem"
+
+[Enum.HttpError.InvalidUrl]
+struct = "EnumItem"
+
+[Enum.HttpError.NetFail]
+struct = "EnumItem"
+
+[Enum.HttpError.OK]
+struct = "EnumItem"
+
+[Enum.HttpError.OutOfMemory]
+struct = "EnumItem"
+
+[Enum.HttpError.SslConnectFail]
+struct = "EnumItem"
+
+[Enum.HttpError.TimedOut]
+struct = "EnumItem"
+
+[Enum.HttpError.TooManyRedirects]
+struct = "EnumItem"
+
+[Enum.HttpError.Unknown]
+struct = "EnumItem"
+[Enum.HttpRequestType.Analytics]
+struct = "EnumItem"
+
+[Enum.HttpRequestType.Avatar]
+struct = "EnumItem"
+
+[Enum.HttpRequestType.Chat]
+struct = "EnumItem"
+
+[Enum.HttpRequestType.Default]
+struct = "EnumItem"
+
+[Enum.HttpRequestType.GetEnumItems]
+args = []
+method = true
+
+[Enum.HttpRequestType.Localization]
+struct = "EnumItem"
+
+[Enum.HttpRequestType.MarketplaceService]
+struct = "EnumItem"
+
+[Enum.HttpRequestType.Players]
+struct = "EnumItem"
+[Enum.HumanoidCollisionType.GetEnumItems]
+args = []
+method = true
+
+[Enum.HumanoidCollisionType.InnerBox]
+struct = "EnumItem"
+
+[Enum.HumanoidCollisionType.OuterBox]
+struct = "EnumItem"
+[Enum.HumanoidDisplayDistanceType.GetEnumItems]
+args = []
+method = true
+
+[Enum.HumanoidDisplayDistanceType.None]
+struct = "EnumItem"
+
+[Enum.HumanoidDisplayDistanceType.Subject]
+struct = "EnumItem"
+
+[Enum.HumanoidDisplayDistanceType.Viewer]
+struct = "EnumItem"
+[Enum.HumanoidHealthDisplayType.AlwaysOff]
+struct = "EnumItem"
+
+[Enum.HumanoidHealthDisplayType.AlwaysOn]
+struct = "EnumItem"
+
+[Enum.HumanoidHealthDisplayType.DisplayWhenDamaged]
+struct = "EnumItem"
+
+[Enum.HumanoidHealthDisplayType.GetEnumItems]
+args = []
+method = true
+[Enum.HumanoidRigType.GetEnumItems]
+args = []
+method = true
+
+[Enum.HumanoidRigType.R15]
+struct = "EnumItem"
+
+[Enum.HumanoidRigType.R6]
+struct = "EnumItem"
+[Enum.HumanoidStateType.Climbing]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Dead]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.FallingDown]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Flying]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Freefall]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.GetEnumItems]
+args = []
+method = true
+
+[Enum.HumanoidStateType.GettingUp]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Jumping]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Landed]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.None]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Physics]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.PlatformStanding]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Ragdoll]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Running]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.RunningNoPhysics]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Seated]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.StrafingNoPhysics]
+struct = "EnumItem"
+
+[Enum.HumanoidStateType.Swimming]
+struct = "EnumItem"
+[Enum.InOut.Center]
+struct = "EnumItem"
+
+[Enum.InOut.Edge]
+struct = "EnumItem"
+
+[Enum.InOut.GetEnumItems]
+args = []
+method = true
+
+[Enum.InOut.Inset]
+struct = "EnumItem"
+[Enum.InfoType.Asset]
+struct = "EnumItem"
+
+[Enum.InfoType.Bundle]
+struct = "EnumItem"
+
+[Enum.InfoType.GamePass]
+struct = "EnumItem"
+
+[Enum.InfoType.GetEnumItems]
+args = []
+method = true
+
+[Enum.InfoType.Product]
+struct = "EnumItem"
+
+[Enum.InfoType.Subscription]
+struct = "EnumItem"
+[Enum.InitialDockState.Bottom]
+struct = "EnumItem"
+
+[Enum.InitialDockState.Float]
+struct = "EnumItem"
+
+[Enum.InitialDockState.GetEnumItems]
+args = []
+method = true
+
+[Enum.InitialDockState.Left]
+struct = "EnumItem"
+
+[Enum.InitialDockState.Right]
+struct = "EnumItem"
+
+[Enum.InitialDockState.Top]
+struct = "EnumItem"
+[Enum.InlineAlignment.Bottom]
+struct = "EnumItem"
+
+[Enum.InlineAlignment.Center]
+struct = "EnumItem"
+
+[Enum.InlineAlignment.GetEnumItems]
+args = []
+method = true
+
+[Enum.InlineAlignment.Top]
+struct = "EnumItem"
+[Enum.InputType.Constant]
+struct = "EnumItem"
+
+[Enum.InputType.GetEnumItems]
+args = []
+method = true
+
+[Enum.InputType.NoInput]
+struct = "EnumItem"
+
+[Enum.InputType.Sin]
+struct = "EnumItem"
+[Enum.JointCreationMode.All]
+struct = "EnumItem"
+
+[Enum.JointCreationMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.JointCreationMode.None]
+struct = "EnumItem"
+
+[Enum.JointCreationMode.Surface]
+struct = "EnumItem"
+[Enum.KeyCode.A]
+struct = "EnumItem"
+
+[Enum.KeyCode.Ampersand]
+struct = "EnumItem"
+
+[Enum.KeyCode.Asterisk]
+struct = "EnumItem"
+
+[Enum.KeyCode.At]
+struct = "EnumItem"
+
+[Enum.KeyCode.B]
+struct = "EnumItem"
+
+[Enum.KeyCode.BackSlash]
+struct = "EnumItem"
+
+[Enum.KeyCode.Backquote]
+struct = "EnumItem"
+
+[Enum.KeyCode.Backspace]
+struct = "EnumItem"
+
+[Enum.KeyCode.Break]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonA]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonB]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonL1]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonL2]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonL3]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonR1]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonR2]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonR3]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonSelect]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonStart]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonX]
+struct = "EnumItem"
+
+[Enum.KeyCode.ButtonY]
+struct = "EnumItem"
+
+[Enum.KeyCode.C]
+struct = "EnumItem"
+
+[Enum.KeyCode.CapsLock]
+struct = "EnumItem"
+
+[Enum.KeyCode.Caret]
+struct = "EnumItem"
+
+[Enum.KeyCode.Clear]
+struct = "EnumItem"
+
+[Enum.KeyCode.Colon]
+struct = "EnumItem"
+
+[Enum.KeyCode.Comma]
+struct = "EnumItem"
+
+[Enum.KeyCode.Compose]
+struct = "EnumItem"
+
+[Enum.KeyCode.D]
+struct = "EnumItem"
+
+[Enum.KeyCode.DPadDown]
+struct = "EnumItem"
+
+[Enum.KeyCode.DPadLeft]
+struct = "EnumItem"
+
+[Enum.KeyCode.DPadRight]
+struct = "EnumItem"
+
+[Enum.KeyCode.DPadUp]
+struct = "EnumItem"
+
+[Enum.KeyCode.Delete]
+struct = "EnumItem"
+
+[Enum.KeyCode.Dollar]
+struct = "EnumItem"
+
+[Enum.KeyCode.Down]
+struct = "EnumItem"
+
+[Enum.KeyCode.E]
+struct = "EnumItem"
+
+[Enum.KeyCode.Eight]
+struct = "EnumItem"
+
+[Enum.KeyCode.End]
+struct = "EnumItem"
+
+[Enum.KeyCode.Equals]
+struct = "EnumItem"
+
+[Enum.KeyCode.Escape]
+struct = "EnumItem"
+
+[Enum.KeyCode.Euro]
+struct = "EnumItem"
+
+[Enum.KeyCode.F]
+struct = "EnumItem"
+
+[Enum.KeyCode.F1]
+struct = "EnumItem"
+
+[Enum.KeyCode.F10]
+struct = "EnumItem"
+
+[Enum.KeyCode.F11]
+struct = "EnumItem"
+
+[Enum.KeyCode.F12]
+struct = "EnumItem"
+
+[Enum.KeyCode.F13]
+struct = "EnumItem"
+
+[Enum.KeyCode.F14]
+struct = "EnumItem"
+
+[Enum.KeyCode.F15]
+struct = "EnumItem"
+
+[Enum.KeyCode.F2]
+struct = "EnumItem"
+
+[Enum.KeyCode.F3]
+struct = "EnumItem"
+
+[Enum.KeyCode.F4]
+struct = "EnumItem"
+
+[Enum.KeyCode.F5]
+struct = "EnumItem"
+
+[Enum.KeyCode.F6]
+struct = "EnumItem"
+
+[Enum.KeyCode.F7]
+struct = "EnumItem"
+
+[Enum.KeyCode.F8]
+struct = "EnumItem"
+
+[Enum.KeyCode.F9]
+struct = "EnumItem"
+
+[Enum.KeyCode.Five]
+struct = "EnumItem"
+
+[Enum.KeyCode.Four]
+struct = "EnumItem"
+
+[Enum.KeyCode.G]
+struct = "EnumItem"
+
+[Enum.KeyCode.GetEnumItems]
+args = []
+method = true
+
+[Enum.KeyCode.GreaterThan]
+struct = "EnumItem"
+
+[Enum.KeyCode.H]
+struct = "EnumItem"
+
+[Enum.KeyCode.Hash]
+struct = "EnumItem"
+
+[Enum.KeyCode.Help]
+struct = "EnumItem"
+
+[Enum.KeyCode.Home]
+struct = "EnumItem"
+
+[Enum.KeyCode.I]
+struct = "EnumItem"
+
+[Enum.KeyCode.Insert]
+struct = "EnumItem"
+
+[Enum.KeyCode.J]
+struct = "EnumItem"
+
+[Enum.KeyCode.K]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadDivide]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadEight]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadEnter]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadEquals]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadFive]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadFour]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadMinus]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadMultiply]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadNine]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadOne]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadPeriod]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadPlus]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadSeven]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadSix]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadThree]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadTwo]
+struct = "EnumItem"
+
+[Enum.KeyCode.KeypadZero]
+struct = "EnumItem"
+
+[Enum.KeyCode.L]
+struct = "EnumItem"
+
+[Enum.KeyCode.Left]
+struct = "EnumItem"
+
+[Enum.KeyCode.LeftAlt]
+struct = "EnumItem"
+
+[Enum.KeyCode.LeftBracket]
+struct = "EnumItem"
+
+[Enum.KeyCode.LeftControl]
+struct = "EnumItem"
+
+[Enum.KeyCode.LeftCurly]
+struct = "EnumItem"
+
+[Enum.KeyCode.LeftMeta]
+struct = "EnumItem"
+
+[Enum.KeyCode.LeftParenthesis]
+struct = "EnumItem"
+
+[Enum.KeyCode.LeftShift]
+struct = "EnumItem"
+
+[Enum.KeyCode.LeftSuper]
+struct = "EnumItem"
+
+[Enum.KeyCode.LessThan]
+struct = "EnumItem"
+
+[Enum.KeyCode.M]
+struct = "EnumItem"
+
+[Enum.KeyCode.Menu]
+struct = "EnumItem"
+
+[Enum.KeyCode.Minus]
+struct = "EnumItem"
+
+[Enum.KeyCode.Mode]
+struct = "EnumItem"
+
+[Enum.KeyCode.N]
+struct = "EnumItem"
+
+[Enum.KeyCode.Nine]
+struct = "EnumItem"
+
+[Enum.KeyCode.NumLock]
+struct = "EnumItem"
+
+[Enum.KeyCode.O]
+struct = "EnumItem"
+
+[Enum.KeyCode.One]
+struct = "EnumItem"
+
+[Enum.KeyCode.P]
+struct = "EnumItem"
+
+[Enum.KeyCode.PageDown]
+struct = "EnumItem"
+
+[Enum.KeyCode.PageUp]
+struct = "EnumItem"
+
+[Enum.KeyCode.Pause]
+struct = "EnumItem"
+
+[Enum.KeyCode.Percent]
+struct = "EnumItem"
+
+[Enum.KeyCode.Period]
+struct = "EnumItem"
+
+[Enum.KeyCode.Pipe]
+struct = "EnumItem"
+
+[Enum.KeyCode.Plus]
+struct = "EnumItem"
+
+[Enum.KeyCode.Power]
+struct = "EnumItem"
+
+[Enum.KeyCode.Print]
+struct = "EnumItem"
+
+[Enum.KeyCode.Q]
+struct = "EnumItem"
+
+[Enum.KeyCode.Question]
+struct = "EnumItem"
+
+[Enum.KeyCode.Quote]
+struct = "EnumItem"
+
+[Enum.KeyCode.QuotedDouble]
+struct = "EnumItem"
+
+[Enum.KeyCode.R]
+struct = "EnumItem"
+
+[Enum.KeyCode.Return]
+struct = "EnumItem"
+
+[Enum.KeyCode.Right]
+struct = "EnumItem"
+
+[Enum.KeyCode.RightAlt]
+struct = "EnumItem"
+
+[Enum.KeyCode.RightBracket]
+struct = "EnumItem"
+
+[Enum.KeyCode.RightControl]
+struct = "EnumItem"
+
+[Enum.KeyCode.RightCurly]
+struct = "EnumItem"
+
+[Enum.KeyCode.RightMeta]
+struct = "EnumItem"
+
+[Enum.KeyCode.RightParenthesis]
+struct = "EnumItem"
+
+[Enum.KeyCode.RightShift]
+struct = "EnumItem"
+
+[Enum.KeyCode.RightSuper]
+struct = "EnumItem"
+
+[Enum.KeyCode.S]
+struct = "EnumItem"
+
+[Enum.KeyCode.ScrollLock]
+struct = "EnumItem"
+
+[Enum.KeyCode.Semicolon]
+struct = "EnumItem"
+
+[Enum.KeyCode.Seven]
+struct = "EnumItem"
+
+[Enum.KeyCode.Six]
+struct = "EnumItem"
+
+[Enum.KeyCode.Slash]
+struct = "EnumItem"
+
+[Enum.KeyCode.Space]
+struct = "EnumItem"
+
+[Enum.KeyCode.SysReq]
+struct = "EnumItem"
+
+[Enum.KeyCode.T]
+struct = "EnumItem"
+
+[Enum.KeyCode.Tab]
+struct = "EnumItem"
+
+[Enum.KeyCode.Three]
+struct = "EnumItem"
+
+[Enum.KeyCode.Thumbstick1]
+struct = "EnumItem"
+
+[Enum.KeyCode.Thumbstick2]
+struct = "EnumItem"
+
+[Enum.KeyCode.Tilde]
+struct = "EnumItem"
+
+[Enum.KeyCode.Two]
+struct = "EnumItem"
+
+[Enum.KeyCode.U]
+struct = "EnumItem"
+
+[Enum.KeyCode.Underscore]
+struct = "EnumItem"
+
+[Enum.KeyCode.Undo]
+struct = "EnumItem"
+
+[Enum.KeyCode.Unknown]
+struct = "EnumItem"
+
+[Enum.KeyCode.Up]
+struct = "EnumItem"
+
+[Enum.KeyCode.V]
+struct = "EnumItem"
+
+[Enum.KeyCode.W]
+struct = "EnumItem"
+
+[Enum.KeyCode.World0]
+struct = "EnumItem"
+
+[Enum.KeyCode.World1]
+struct = "EnumItem"
+
+[Enum.KeyCode.World10]
+struct = "EnumItem"
+
+[Enum.KeyCode.World11]
+struct = "EnumItem"
+
+[Enum.KeyCode.World12]
+struct = "EnumItem"
+
+[Enum.KeyCode.World13]
+struct = "EnumItem"
+
+[Enum.KeyCode.World14]
+struct = "EnumItem"
+
+[Enum.KeyCode.World15]
+struct = "EnumItem"
+
+[Enum.KeyCode.World16]
+struct = "EnumItem"
+
+[Enum.KeyCode.World17]
+struct = "EnumItem"
+
+[Enum.KeyCode.World18]
+struct = "EnumItem"
+
+[Enum.KeyCode.World19]
+struct = "EnumItem"
+
+[Enum.KeyCode.World2]
+struct = "EnumItem"
+
+[Enum.KeyCode.World20]
+struct = "EnumItem"
+
+[Enum.KeyCode.World21]
+struct = "EnumItem"
+
+[Enum.KeyCode.World22]
+struct = "EnumItem"
+
+[Enum.KeyCode.World23]
+struct = "EnumItem"
+
+[Enum.KeyCode.World24]
+struct = "EnumItem"
+
+[Enum.KeyCode.World25]
+struct = "EnumItem"
+
+[Enum.KeyCode.World26]
+struct = "EnumItem"
+
+[Enum.KeyCode.World27]
+struct = "EnumItem"
+
+[Enum.KeyCode.World28]
+struct = "EnumItem"
+
+[Enum.KeyCode.World29]
+struct = "EnumItem"
+
+[Enum.KeyCode.World3]
+struct = "EnumItem"
+
+[Enum.KeyCode.World30]
+struct = "EnumItem"
+
+[Enum.KeyCode.World31]
+struct = "EnumItem"
+
+[Enum.KeyCode.World32]
+struct = "EnumItem"
+
+[Enum.KeyCode.World33]
+struct = "EnumItem"
+
+[Enum.KeyCode.World34]
+struct = "EnumItem"
+
+[Enum.KeyCode.World35]
+struct = "EnumItem"
+
+[Enum.KeyCode.World36]
+struct = "EnumItem"
+
+[Enum.KeyCode.World37]
+struct = "EnumItem"
+
+[Enum.KeyCode.World38]
+struct = "EnumItem"
+
+[Enum.KeyCode.World39]
+struct = "EnumItem"
+
+[Enum.KeyCode.World4]
+struct = "EnumItem"
+
+[Enum.KeyCode.World40]
+struct = "EnumItem"
+
+[Enum.KeyCode.World41]
+struct = "EnumItem"
+
+[Enum.KeyCode.World42]
+struct = "EnumItem"
+
+[Enum.KeyCode.World43]
+struct = "EnumItem"
+
+[Enum.KeyCode.World44]
+struct = "EnumItem"
+
+[Enum.KeyCode.World45]
+struct = "EnumItem"
+
+[Enum.KeyCode.World46]
+struct = "EnumItem"
+
+[Enum.KeyCode.World47]
+struct = "EnumItem"
+
+[Enum.KeyCode.World48]
+struct = "EnumItem"
+
+[Enum.KeyCode.World49]
+struct = "EnumItem"
+
+[Enum.KeyCode.World5]
+struct = "EnumItem"
+
+[Enum.KeyCode.World50]
+struct = "EnumItem"
+
+[Enum.KeyCode.World51]
+struct = "EnumItem"
+
+[Enum.KeyCode.World52]
+struct = "EnumItem"
+
+[Enum.KeyCode.World53]
+struct = "EnumItem"
+
+[Enum.KeyCode.World54]
+struct = "EnumItem"
+
+[Enum.KeyCode.World55]
+struct = "EnumItem"
+
+[Enum.KeyCode.World56]
+struct = "EnumItem"
+
+[Enum.KeyCode.World57]
+struct = "EnumItem"
+
+[Enum.KeyCode.World58]
+struct = "EnumItem"
+
+[Enum.KeyCode.World59]
+struct = "EnumItem"
+
+[Enum.KeyCode.World6]
+struct = "EnumItem"
+
+[Enum.KeyCode.World60]
+struct = "EnumItem"
+
+[Enum.KeyCode.World61]
+struct = "EnumItem"
+
+[Enum.KeyCode.World62]
+struct = "EnumItem"
+
+[Enum.KeyCode.World63]
+struct = "EnumItem"
+
+[Enum.KeyCode.World64]
+struct = "EnumItem"
+
+[Enum.KeyCode.World65]
+struct = "EnumItem"
+
+[Enum.KeyCode.World66]
+struct = "EnumItem"
+
+[Enum.KeyCode.World67]
+struct = "EnumItem"
+
+[Enum.KeyCode.World68]
+struct = "EnumItem"
+
+[Enum.KeyCode.World69]
+struct = "EnumItem"
+
+[Enum.KeyCode.World7]
+struct = "EnumItem"
+
+[Enum.KeyCode.World70]
+struct = "EnumItem"
+
+[Enum.KeyCode.World71]
+struct = "EnumItem"
+
+[Enum.KeyCode.World72]
+struct = "EnumItem"
+
+[Enum.KeyCode.World73]
+struct = "EnumItem"
+
+[Enum.KeyCode.World74]
+struct = "EnumItem"
+
+[Enum.KeyCode.World75]
+struct = "EnumItem"
+
+[Enum.KeyCode.World76]
+struct = "EnumItem"
+
+[Enum.KeyCode.World77]
+struct = "EnumItem"
+
+[Enum.KeyCode.World78]
+struct = "EnumItem"
+
+[Enum.KeyCode.World79]
+struct = "EnumItem"
+
+[Enum.KeyCode.World8]
+struct = "EnumItem"
+
+[Enum.KeyCode.World80]
+struct = "EnumItem"
+
+[Enum.KeyCode.World81]
+struct = "EnumItem"
+
+[Enum.KeyCode.World82]
+struct = "EnumItem"
+
+[Enum.KeyCode.World83]
+struct = "EnumItem"
+
+[Enum.KeyCode.World84]
+struct = "EnumItem"
+
+[Enum.KeyCode.World85]
+struct = "EnumItem"
+
+[Enum.KeyCode.World86]
+struct = "EnumItem"
+
+[Enum.KeyCode.World87]
+struct = "EnumItem"
+
+[Enum.KeyCode.World88]
+struct = "EnumItem"
+
+[Enum.KeyCode.World89]
+struct = "EnumItem"
+
+[Enum.KeyCode.World9]
+struct = "EnumItem"
+
+[Enum.KeyCode.World90]
+struct = "EnumItem"
+
+[Enum.KeyCode.World91]
+struct = "EnumItem"
+
+[Enum.KeyCode.World92]
+struct = "EnumItem"
+
+[Enum.KeyCode.World93]
+struct = "EnumItem"
+
+[Enum.KeyCode.World94]
+struct = "EnumItem"
+
+[Enum.KeyCode.World95]
+struct = "EnumItem"
+
+[Enum.KeyCode.X]
+struct = "EnumItem"
+
+[Enum.KeyCode.Y]
+struct = "EnumItem"
+
+[Enum.KeyCode.Z]
+struct = "EnumItem"
+
+[Enum.KeyCode.Zero]
+struct = "EnumItem"
+[Enum.KeywordFilterType.Exclude]
+struct = "EnumItem"
+
+[Enum.KeywordFilterType.GetEnumItems]
+args = []
+method = true
+
+[Enum.KeywordFilterType.Include]
+struct = "EnumItem"
+[Enum.Language.Default]
+struct = "EnumItem"
+
+[Enum.Language.GetEnumItems]
+args = []
+method = true
+[Enum.LanguagePreference.English]
+struct = "EnumItem"
+
+[Enum.LanguagePreference.GetEnumItems]
+args = []
+method = true
+
+[Enum.LanguagePreference.SimplifiedChinese]
+struct = "EnumItem"
+
+[Enum.LanguagePreference.SystemDefault]
+struct = "EnumItem"
+[Enum.LeftRight.Center]
+struct = "EnumItem"
+
+[Enum.LeftRight.GetEnumItems]
+args = []
+method = true
+
+[Enum.LeftRight.Left]
+struct = "EnumItem"
+
+[Enum.LeftRight.Right]
+struct = "EnumItem"
+[Enum.LevelOfDetailSetting.GetEnumItems]
+args = []
+method = true
+
+[Enum.LevelOfDetailSetting.High]
+struct = "EnumItem"
+
+[Enum.LevelOfDetailSetting.Low]
+struct = "EnumItem"
+
+[Enum.LevelOfDetailSetting.Medium]
+struct = "EnumItem"
+[Enum.Limb.GetEnumItems]
+args = []
+method = true
+
+[Enum.Limb.Head]
+struct = "EnumItem"
+
+[Enum.Limb.LeftArm]
+struct = "EnumItem"
+
+[Enum.Limb.LeftLeg]
+struct = "EnumItem"
+
+[Enum.Limb.RightArm]
+struct = "EnumItem"
+
+[Enum.Limb.RightLeg]
+struct = "EnumItem"
+
+[Enum.Limb.Torso]
+struct = "EnumItem"
+
+[Enum.Limb.Unknown]
+struct = "EnumItem"
+[Enum.ListDisplayMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.ListDisplayMode.Horizontal]
+struct = "EnumItem"
+
+[Enum.ListDisplayMode.Vertical]
+struct = "EnumItem"
+[Enum.ListenerType.CFrame]
+struct = "EnumItem"
+
+[Enum.ListenerType.Camera]
+struct = "EnumItem"
+
+[Enum.ListenerType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ListenerType.ObjectCFrame]
+struct = "EnumItem"
+
+[Enum.ListenerType.ObjectPosition]
+struct = "EnumItem"
+[Enum.Material.Air]
+struct = "EnumItem"
+
+[Enum.Material.Asphalt]
+struct = "EnumItem"
+
+[Enum.Material.Basalt]
+struct = "EnumItem"
+
+[Enum.Material.Brick]
+struct = "EnumItem"
+
+[Enum.Material.Cobblestone]
+struct = "EnumItem"
+
+[Enum.Material.Concrete]
+struct = "EnumItem"
+
+[Enum.Material.CorrodedMetal]
+struct = "EnumItem"
+
+[Enum.Material.CrackedLava]
+struct = "EnumItem"
+
+[Enum.Material.DiamondPlate]
+struct = "EnumItem"
+
+[Enum.Material.Fabric]
+struct = "EnumItem"
+
+[Enum.Material.Foil]
+struct = "EnumItem"
+
+[Enum.Material.ForceField]
+struct = "EnumItem"
+
+[Enum.Material.GetEnumItems]
+args = []
+method = true
+
+[Enum.Material.Glacier]
+struct = "EnumItem"
+
+[Enum.Material.Glass]
+struct = "EnumItem"
+
+[Enum.Material.Granite]
+struct = "EnumItem"
+
+[Enum.Material.Grass]
+struct = "EnumItem"
+
+[Enum.Material.Ground]
+struct = "EnumItem"
+
+[Enum.Material.Ice]
+struct = "EnumItem"
+
+[Enum.Material.LeafyGrass]
+struct = "EnumItem"
+
+[Enum.Material.Limestone]
+struct = "EnumItem"
+
+[Enum.Material.Marble]
+struct = "EnumItem"
+
+[Enum.Material.Metal]
+struct = "EnumItem"
+
+[Enum.Material.Mud]
+struct = "EnumItem"
+
+[Enum.Material.Neon]
+struct = "EnumItem"
+
+[Enum.Material.Pavement]
+struct = "EnumItem"
+
+[Enum.Material.Pebble]
+struct = "EnumItem"
+
+[Enum.Material.Plastic]
+struct = "EnumItem"
+
+[Enum.Material.Rock]
+struct = "EnumItem"
+
+[Enum.Material.Salt]
+struct = "EnumItem"
+
+[Enum.Material.Sand]
+struct = "EnumItem"
+
+[Enum.Material.Sandstone]
+struct = "EnumItem"
+
+[Enum.Material.Slate]
+struct = "EnumItem"
+
+[Enum.Material.SmoothPlastic]
+struct = "EnumItem"
+
+[Enum.Material.Snow]
+struct = "EnumItem"
+
+[Enum.Material.Water]
+struct = "EnumItem"
+
+[Enum.Material.Wood]
+struct = "EnumItem"
+
+[Enum.Material.WoodPlanks]
+struct = "EnumItem"
+[Enum.MembershipType.BuildersClub]
+struct = "EnumItem"
+
+[Enum.MembershipType.GetEnumItems]
+args = []
+method = true
+
+[Enum.MembershipType.None]
+struct = "EnumItem"
+
+[Enum.MembershipType.OutrageousBuildersClub]
+struct = "EnumItem"
+
+[Enum.MembershipType.Premium]
+struct = "EnumItem"
+
+[Enum.MembershipType.TurboBuildersClub]
+struct = "EnumItem"
+[Enum.MeshType.Brick]
+struct = "EnumItem"
+
+[Enum.MeshType.CornerWedge]
+struct = "EnumItem"
+
+[Enum.MeshType.Cylinder]
+struct = "EnumItem"
+
+[Enum.MeshType.FileMesh]
+struct = "EnumItem"
+
+[Enum.MeshType.GetEnumItems]
+args = []
+method = true
+
+[Enum.MeshType.Head]
+struct = "EnumItem"
+
+[Enum.MeshType.ParallelRamp]
+struct = "EnumItem"
+
+[Enum.MeshType.Prism]
+struct = "EnumItem"
+
+[Enum.MeshType.Pyramid]
+struct = "EnumItem"
+
+[Enum.MeshType.RightAngleRamp]
+struct = "EnumItem"
+
+[Enum.MeshType.Sphere]
+struct = "EnumItem"
+
+[Enum.MeshType.Torso]
+struct = "EnumItem"
+
+[Enum.MeshType.Wedge]
+struct = "EnumItem"
+[Enum.MessageType.GetEnumItems]
+args = []
+method = true
+
+[Enum.MessageType.MessageError]
+struct = "EnumItem"
+
+[Enum.MessageType.MessageInfo]
+struct = "EnumItem"
+
+[Enum.MessageType.MessageOutput]
+struct = "EnumItem"
+
+[Enum.MessageType.MessageWarning]
+struct = "EnumItem"
+[Enum.ModifierKey.Alt]
+struct = "EnumItem"
+
+[Enum.ModifierKey.Ctrl]
+struct = "EnumItem"
+
+[Enum.ModifierKey.GetEnumItems]
+args = []
+method = true
+
+[Enum.ModifierKey.Meta]
+struct = "EnumItem"
+
+[Enum.ModifierKey.Shift]
+struct = "EnumItem"
+[Enum.MouseBehavior.Default]
+struct = "EnumItem"
+
+[Enum.MouseBehavior.GetEnumItems]
+args = []
+method = true
+
+[Enum.MouseBehavior.LockCenter]
+struct = "EnumItem"
+
+[Enum.MouseBehavior.LockCurrentPosition]
+struct = "EnumItem"
+[Enum.MoveState.AirFree]
+struct = "EnumItem"
+
+[Enum.MoveState.Coasting]
+struct = "EnumItem"
+
+[Enum.MoveState.GetEnumItems]
+args = []
+method = true
+
+[Enum.MoveState.Pushing]
+struct = "EnumItem"
+
+[Enum.MoveState.Stopped]
+struct = "EnumItem"
+
+[Enum.MoveState.Stopping]
+struct = "EnumItem"
+[Enum.NameOcclusion.EnemyOcclusion]
+struct = "EnumItem"
+
+[Enum.NameOcclusion.GetEnumItems]
+args = []
+method = true
+
+[Enum.NameOcclusion.NoOcclusion]
+struct = "EnumItem"
+
+[Enum.NameOcclusion.OccludeAll]
+struct = "EnumItem"
+[Enum.NetworkOwnership.Automatic]
+struct = "EnumItem"
+
+[Enum.NetworkOwnership.GetEnumItems]
+args = []
+method = true
+
+[Enum.NetworkOwnership.Manual]
+struct = "EnumItem"
+
+[Enum.NetworkOwnership.OnContact]
+struct = "EnumItem"
+[Enum.NormalId.Back]
+struct = "EnumItem"
+
+[Enum.NormalId.Bottom]
+struct = "EnumItem"
+
+[Enum.NormalId.Front]
+struct = "EnumItem"
+
+[Enum.NormalId.GetEnumItems]
+args = []
+method = true
+
+[Enum.NormalId.Left]
+struct = "EnumItem"
+
+[Enum.NormalId.Right]
+struct = "EnumItem"
+
+[Enum.NormalId.Top]
+struct = "EnumItem"
+[Enum.OutputLayoutMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.OutputLayoutMode.Horizontal]
+struct = "EnumItem"
+
+[Enum.OutputLayoutMode.Vertical]
+struct = "EnumItem"
+[Enum.OverrideMouseIconBehavior.ForceHide]
+struct = "EnumItem"
+
+[Enum.OverrideMouseIconBehavior.ForceShow]
+struct = "EnumItem"
+
+[Enum.OverrideMouseIconBehavior.GetEnumItems]
+args = []
+method = true
+
+[Enum.OverrideMouseIconBehavior.None]
+struct = "EnumItem"
+[Enum.PacketPriority.GetEnumItems]
+args = []
+method = true
+
+[Enum.PacketPriority.HIGH_PRIORITY]
+struct = "EnumItem"
+
+[Enum.PacketPriority.IMMEDIATE_PRIORITY]
+struct = "EnumItem"
+
+[Enum.PacketPriority.LOW_PRIORITY]
+struct = "EnumItem"
+
+[Enum.PacketPriority.MEDIUM_PRIORITY]
+struct = "EnumItem"
+[Enum.PartType.Ball]
+struct = "EnumItem"
+
+[Enum.PartType.Block]
+struct = "EnumItem"
+
+[Enum.PartType.Cylinder]
+struct = "EnumItem"
+
+[Enum.PartType.GetEnumItems]
+args = []
+method = true
+[Enum.PathStatus.ClosestNoPath]
+struct = "EnumItem"
+
+[Enum.PathStatus.ClosestOutOfRange]
+struct = "EnumItem"
+
+[Enum.PathStatus.FailFinishNotEmpty]
+struct = "EnumItem"
+
+[Enum.PathStatus.FailStartNotEmpty]
+struct = "EnumItem"
+
+[Enum.PathStatus.GetEnumItems]
+args = []
+method = true
+
+[Enum.PathStatus.NoPath]
+struct = "EnumItem"
+
+[Enum.PathStatus.Success]
+struct = "EnumItem"
+[Enum.PathWaypointAction.GetEnumItems]
+args = []
+method = true
+
+[Enum.PathWaypointAction.Jump]
+struct = "EnumItem"
+
+[Enum.PathWaypointAction.Walk]
+struct = "EnumItem"
+[Enum.PermissionLevelShown.Game]
+struct = "EnumItem"
+
+[Enum.PermissionLevelShown.GetEnumItems]
+args = []
+method = true
+
+[Enum.PermissionLevelShown.Roblox]
+struct = "EnumItem"
+
+[Enum.PermissionLevelShown.RobloxGame]
+struct = "EnumItem"
+
+[Enum.PermissionLevelShown.RobloxScript]
+struct = "EnumItem"
+
+[Enum.PermissionLevelShown.Studio]
+struct = "EnumItem"
+[Enum.Platform.Android]
+struct = "EnumItem"
+
+[Enum.Platform.AndroidTV]
+struct = "EnumItem"
+
+[Enum.Platform.BeOS]
+struct = "EnumItem"
+
+[Enum.Platform.Chromecast]
+struct = "EnumItem"
+
+[Enum.Platform.DOS]
+struct = "EnumItem"
+
+[Enum.Platform.GetEnumItems]
+args = []
+method = true
+
+[Enum.Platform.IOS]
+struct = "EnumItem"
+
+[Enum.Platform.Linux]
+struct = "EnumItem"
+
+[Enum.Platform.NX]
+struct = "EnumItem"
+
+[Enum.Platform.None]
+struct = "EnumItem"
+
+[Enum.Platform.OSX]
+struct = "EnumItem"
+
+[Enum.Platform.Ouya]
+struct = "EnumItem"
+
+[Enum.Platform.PS3]
+struct = "EnumItem"
+
+[Enum.Platform.PS4]
+struct = "EnumItem"
+
+[Enum.Platform.SteamOS]
+struct = "EnumItem"
+
+[Enum.Platform.UWP]
+struct = "EnumItem"
+
+[Enum.Platform.WebOS]
+struct = "EnumItem"
+
+[Enum.Platform.WiiU]
+struct = "EnumItem"
+
+[Enum.Platform.Windows]
+struct = "EnumItem"
+
+[Enum.Platform.XBox360]
+struct = "EnumItem"
+
+[Enum.Platform.XBoxOne]
+struct = "EnumItem"
+[Enum.PlaybackState.Begin]
+struct = "EnumItem"
+
+[Enum.PlaybackState.Cancelled]
+struct = "EnumItem"
+
+[Enum.PlaybackState.Completed]
+struct = "EnumItem"
+
+[Enum.PlaybackState.Delayed]
+struct = "EnumItem"
+
+[Enum.PlaybackState.GetEnumItems]
+args = []
+method = true
+
+[Enum.PlaybackState.Paused]
+struct = "EnumItem"
+
+[Enum.PlaybackState.Playing]
+struct = "EnumItem"
+[Enum.PlayerActions.CharacterBackward]
+struct = "EnumItem"
+
+[Enum.PlayerActions.CharacterForward]
+struct = "EnumItem"
+
+[Enum.PlayerActions.CharacterJump]
+struct = "EnumItem"
+
+[Enum.PlayerActions.CharacterLeft]
+struct = "EnumItem"
+
+[Enum.PlayerActions.CharacterRight]
+struct = "EnumItem"
+
+[Enum.PlayerActions.GetEnumItems]
+args = []
+method = true
+[Enum.PlayerChatType.All]
+struct = "EnumItem"
+
+[Enum.PlayerChatType.GetEnumItems]
+args = []
+method = true
+
+[Enum.PlayerChatType.Team]
+struct = "EnumItem"
+
+[Enum.PlayerChatType.Whisper]
+struct = "EnumItem"
+[Enum.PoseEasingDirection.GetEnumItems]
+args = []
+method = true
+
+[Enum.PoseEasingDirection.In]
+struct = "EnumItem"
+
+[Enum.PoseEasingDirection.InOut]
+struct = "EnumItem"
+
+[Enum.PoseEasingDirection.Out]
+struct = "EnumItem"
+[Enum.PoseEasingStyle.Bounce]
+struct = "EnumItem"
+
+[Enum.PoseEasingStyle.Constant]
+struct = "EnumItem"
+
+[Enum.PoseEasingStyle.Cubic]
+struct = "EnumItem"
+
+[Enum.PoseEasingStyle.Elastic]
+struct = "EnumItem"
+
+[Enum.PoseEasingStyle.GetEnumItems]
+args = []
+method = true
+
+[Enum.PoseEasingStyle.Linear]
+struct = "EnumItem"
+[Enum.PrivilegeType.Admin]
+struct = "EnumItem"
+
+[Enum.PrivilegeType.Banned]
+struct = "EnumItem"
+
+[Enum.PrivilegeType.GetEnumItems]
+args = []
+method = true
+
+[Enum.PrivilegeType.Member]
+struct = "EnumItem"
+
+[Enum.PrivilegeType.Owner]
+struct = "EnumItem"
+
+[Enum.PrivilegeType.Visitor]
+struct = "EnumItem"
+[Enum.ProductPurchaseDecision.GetEnumItems]
+args = []
+method = true
+
+[Enum.ProductPurchaseDecision.NotProcessedYet]
+struct = "EnumItem"
+
+[Enum.ProductPurchaseDecision.PurchaseGranted]
+struct = "EnumItem"
+[Enum.QualityLevel.Automatic]
+struct = "EnumItem"
+
+[Enum.QualityLevel.GetEnumItems]
+args = []
+method = true
+
+[Enum.QualityLevel.Level01]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level02]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level03]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level04]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level05]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level06]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level07]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level08]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level09]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level10]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level11]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level12]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level13]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level14]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level15]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level16]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level17]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level18]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level19]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level20]
+struct = "EnumItem"
+
+[Enum.QualityLevel.Level21]
+struct = "EnumItem"
+[Enum.R15CollisionType.GetEnumItems]
+args = []
+method = true
+
+[Enum.R15CollisionType.InnerBox]
+struct = "EnumItem"
+
+[Enum.R15CollisionType.OuterBox]
+struct = "EnumItem"
+[Enum.RaycastFilterType.Blacklist]
+struct = "EnumItem"
+
+[Enum.RaycastFilterType.GetEnumItems]
+args = []
+method = true
+
+[Enum.RaycastFilterType.Whitelist]
+struct = "EnumItem"
+[Enum.RenderFidelity.Automatic]
+struct = "EnumItem"
+
+[Enum.RenderFidelity.GetEnumItems]
+args = []
+method = true
+
+[Enum.RenderFidelity.Precise]
+struct = "EnumItem"
+[Enum.RenderPriority.Camera]
+struct = "EnumItem"
+
+[Enum.RenderPriority.Character]
+struct = "EnumItem"
+
+[Enum.RenderPriority.First]
+struct = "EnumItem"
+
+[Enum.RenderPriority.GetEnumItems]
+args = []
+method = true
+
+[Enum.RenderPriority.Input]
+struct = "EnumItem"
+
+[Enum.RenderPriority.Last]
+struct = "EnumItem"
+[Enum.RenderingTestComparisonMethod.GetEnumItems]
+args = []
+method = true
+
+[Enum.RenderingTestComparisonMethod.diff]
+struct = "EnumItem"
+
+[Enum.RenderingTestComparisonMethod.psnr]
+struct = "EnumItem"
+[Enum.ReturnKeyType.Default]
+struct = "EnumItem"
+
+[Enum.ReturnKeyType.Done]
+struct = "EnumItem"
+
+[Enum.ReturnKeyType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ReturnKeyType.Go]
+struct = "EnumItem"
+
+[Enum.ReturnKeyType.Next]
+struct = "EnumItem"
+
+[Enum.ReturnKeyType.Search]
+struct = "EnumItem"
+
+[Enum.ReturnKeyType.Send]
+struct = "EnumItem"
+[Enum.ReverbType.Alley]
+struct = "EnumItem"
+
+[Enum.ReverbType.Arena]
+struct = "EnumItem"
+
+[Enum.ReverbType.Auditorium]
+struct = "EnumItem"
+
+[Enum.ReverbType.Bathroom]
+struct = "EnumItem"
+
+[Enum.ReverbType.CarpettedHallway]
+struct = "EnumItem"
+
+[Enum.ReverbType.Cave]
+struct = "EnumItem"
+
+[Enum.ReverbType.City]
+struct = "EnumItem"
+
+[Enum.ReverbType.ConcertHall]
+struct = "EnumItem"
+
+[Enum.ReverbType.Forest]
+struct = "EnumItem"
+
+[Enum.ReverbType.GenericReverb]
+struct = "EnumItem"
+
+[Enum.ReverbType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ReverbType.Hallway]
+struct = "EnumItem"
+
+[Enum.ReverbType.Hangar]
+struct = "EnumItem"
+
+[Enum.ReverbType.LivingRoom]
+struct = "EnumItem"
+
+[Enum.ReverbType.Mountains]
+struct = "EnumItem"
+
+[Enum.ReverbType.NoReverb]
+struct = "EnumItem"
+
+[Enum.ReverbType.PaddedCell]
+struct = "EnumItem"
+
+[Enum.ReverbType.ParkingLot]
+struct = "EnumItem"
+
+[Enum.ReverbType.Plain]
+struct = "EnumItem"
+
+[Enum.ReverbType.Quarry]
+struct = "EnumItem"
+
+[Enum.ReverbType.Room]
+struct = "EnumItem"
+
+[Enum.ReverbType.SewerPipe]
+struct = "EnumItem"
+
+[Enum.ReverbType.StoneCorridor]
+struct = "EnumItem"
+
+[Enum.ReverbType.StoneRoom]
+struct = "EnumItem"
+
+[Enum.ReverbType.UnderWater]
+struct = "EnumItem"
+[Enum.RibbonTool.ColorPicker]
+struct = "EnumItem"
+
+[Enum.RibbonTool.GetEnumItems]
+args = []
+method = true
+
+[Enum.RibbonTool.Group]
+struct = "EnumItem"
+
+[Enum.RibbonTool.MaterialPicker]
+struct = "EnumItem"
+
+[Enum.RibbonTool.Move]
+struct = "EnumItem"
+
+[Enum.RibbonTool.None]
+struct = "EnumItem"
+
+[Enum.RibbonTool.Rotate]
+struct = "EnumItem"
+
+[Enum.RibbonTool.Scale]
+struct = "EnumItem"
+
+[Enum.RibbonTool.Select]
+struct = "EnumItem"
+
+[Enum.RibbonTool.Transform]
+struct = "EnumItem"
+
+[Enum.RibbonTool.Ungroup]
+struct = "EnumItem"
+[Enum.RollOffMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.RollOffMode.Inverse]
+struct = "EnumItem"
+
+[Enum.RollOffMode.InverseTapered]
+struct = "EnumItem"
+
+[Enum.RollOffMode.Linear]
+struct = "EnumItem"
+
+[Enum.RollOffMode.LinearSquare]
+struct = "EnumItem"
+[Enum.RotationType.CameraRelative]
+struct = "EnumItem"
+
+[Enum.RotationType.GetEnumItems]
+args = []
+method = true
+
+[Enum.RotationType.MovementRelative]
+struct = "EnumItem"
+[Enum.RuntimeUndoBehavior.Aggregate]
+struct = "EnumItem"
+
+[Enum.RuntimeUndoBehavior.GetEnumItems]
+args = []
+method = true
+
+[Enum.RuntimeUndoBehavior.Hybrid]
+struct = "EnumItem"
+
+[Enum.RuntimeUndoBehavior.Snapshot]
+struct = "EnumItem"
+[Enum.SaveFilter.GetEnumItems]
+args = []
+method = true
+
+[Enum.SaveFilter.SaveAll]
+struct = "EnumItem"
+
+[Enum.SaveFilter.SaveGame]
+struct = "EnumItem"
+
+[Enum.SaveFilter.SaveWorld]
+struct = "EnumItem"
+[Enum.SavedQualitySetting.Automatic]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.GetEnumItems]
+args = []
+method = true
+
+[Enum.SavedQualitySetting.QualityLevel1]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel10]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel2]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel3]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel4]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel5]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel6]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel7]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel8]
+struct = "EnumItem"
+
+[Enum.SavedQualitySetting.QualityLevel9]
+struct = "EnumItem"
+[Enum.ScaleType.Crop]
+struct = "EnumItem"
+
+[Enum.ScaleType.Fit]
+struct = "EnumItem"
+
+[Enum.ScaleType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ScaleType.Slice]
+struct = "EnumItem"
+
+[Enum.ScaleType.Stretch]
+struct = "EnumItem"
+
+[Enum.ScaleType.Tile]
+struct = "EnumItem"
+[Enum.ScreenOrientation.GetEnumItems]
+args = []
+method = true
+
+[Enum.ScreenOrientation.LandscapeLeft]
+struct = "EnumItem"
+
+[Enum.ScreenOrientation.LandscapeRight]
+struct = "EnumItem"
+
+[Enum.ScreenOrientation.LandscapeSensor]
+struct = "EnumItem"
+
+[Enum.ScreenOrientation.Portrait]
+struct = "EnumItem"
+
+[Enum.ScreenOrientation.Sensor]
+struct = "EnumItem"
+[Enum.ScrollBarInset.Always]
+struct = "EnumItem"
+
+[Enum.ScrollBarInset.GetEnumItems]
+args = []
+method = true
+
+[Enum.ScrollBarInset.None]
+struct = "EnumItem"
+
+[Enum.ScrollBarInset.ScrollBar]
+struct = "EnumItem"
+[Enum.ScrollingDirection.GetEnumItems]
+args = []
+method = true
+
+[Enum.ScrollingDirection.X]
+struct = "EnumItem"
+
+[Enum.ScrollingDirection.XY]
+struct = "EnumItem"
+
+[Enum.ScrollingDirection.Y]
+struct = "EnumItem"
+[Enum.ServerAudioBehavior.Enabled]
+struct = "EnumItem"
+
+[Enum.ServerAudioBehavior.GetEnumItems]
+args = []
+method = true
+
+[Enum.ServerAudioBehavior.Muted]
+struct = "EnumItem"
+
+[Enum.ServerAudioBehavior.OnlineGame]
+struct = "EnumItem"
+[Enum.SizeConstraint.GetEnumItems]
+args = []
+method = true
+
+[Enum.SizeConstraint.RelativeXX]
+struct = "EnumItem"
+
+[Enum.SizeConstraint.RelativeXY]
+struct = "EnumItem"
+
+[Enum.SizeConstraint.RelativeYY]
+struct = "EnumItem"
+[Enum.SortOrder.Custom]
+struct = "EnumItem"
+
+[Enum.SortOrder.GetEnumItems]
+args = []
+method = true
+
+[Enum.SortOrder.LayoutOrder]
+struct = "EnumItem"
+
+[Enum.SortOrder.Name]
+struct = "EnumItem"
+[Enum.SoundType.Boing]
+struct = "EnumItem"
+
+[Enum.SoundType.Bomb]
+struct = "EnumItem"
+
+[Enum.SoundType.Break]
+struct = "EnumItem"
+
+[Enum.SoundType.Click]
+struct = "EnumItem"
+
+[Enum.SoundType.Clock]
+struct = "EnumItem"
+
+[Enum.SoundType.GetEnumItems]
+args = []
+method = true
+
+[Enum.SoundType.NoSound]
+struct = "EnumItem"
+
+[Enum.SoundType.Page]
+struct = "EnumItem"
+
+[Enum.SoundType.Ping]
+struct = "EnumItem"
+
+[Enum.SoundType.Slingshot]
+struct = "EnumItem"
+
+[Enum.SoundType.Snap]
+struct = "EnumItem"
+
+[Enum.SoundType.Splat]
+struct = "EnumItem"
+
+[Enum.SoundType.Step]
+struct = "EnumItem"
+
+[Enum.SoundType.StepOn]
+struct = "EnumItem"
+
+[Enum.SoundType.Swoosh]
+struct = "EnumItem"
+
+[Enum.SoundType.Victory]
+struct = "EnumItem"
+[Enum.SpecialKey.ChatHotkey]
+struct = "EnumItem"
+
+[Enum.SpecialKey.End]
+struct = "EnumItem"
+
+[Enum.SpecialKey.GetEnumItems]
+args = []
+method = true
+
+[Enum.SpecialKey.Home]
+struct = "EnumItem"
+
+[Enum.SpecialKey.Insert]
+struct = "EnumItem"
+
+[Enum.SpecialKey.PageDown]
+struct = "EnumItem"
+
+[Enum.SpecialKey.PageUp]
+struct = "EnumItem"
+[Enum.StartCorner.BottomLeft]
+struct = "EnumItem"
+
+[Enum.StartCorner.BottomRight]
+struct = "EnumItem"
+
+[Enum.StartCorner.GetEnumItems]
+args = []
+method = true
+
+[Enum.StartCorner.TopLeft]
+struct = "EnumItem"
+
+[Enum.StartCorner.TopRight]
+struct = "EnumItem"
+[Enum.Status.Confusion]
+struct = "EnumItem"
+
+[Enum.Status.GetEnumItems]
+args = []
+method = true
+
+[Enum.Status.Poison]
+struct = "EnumItem"
+[Enum.StreamingPauseMode.ClientPhysicsPause]
+struct = "EnumItem"
+
+[Enum.StreamingPauseMode.Default]
+struct = "EnumItem"
+
+[Enum.StreamingPauseMode.Disabled]
+struct = "EnumItem"
+
+[Enum.StreamingPauseMode.GetEnumItems]
+args = []
+method = true
+[Enum.StudioDataModelType.Edit]
+struct = "EnumItem"
+
+[Enum.StudioDataModelType.GetEnumItems]
+args = []
+method = true
+
+[Enum.StudioDataModelType.None]
+struct = "EnumItem"
+
+[Enum.StudioDataModelType.PlayClient]
+struct = "EnumItem"
+
+[Enum.StudioDataModelType.PlayServer]
+struct = "EnumItem"
+
+[Enum.StudioDataModelType.RobloxPlugin]
+struct = "EnumItem"
+
+[Enum.StudioDataModelType.UserPlugin]
+struct = "EnumItem"
+[Enum.StudioStyleGuideColor.Border]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.BrightText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Button]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ButtonBorder]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ButtonText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.CategoryItem]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.CheckedFieldBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.CheckedFieldBorder]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.CheckedFieldIndicator]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ColorPickerFrame]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.CurrentMarker]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Dark]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DebuggerCurrentLine]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DebuggerErrorLine]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DialogButton]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DialogButtonBorder]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DialogButtonText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DialogMainButton]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DialogMainButtonText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffFilePathBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffFilePathBorder]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffFilePathText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffLineNum]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffLineNumAdditionBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffLineNumDeletionBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffLineNumNoChangeBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffLineNumSeparatorBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffTextAddition]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffTextAdditionBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffTextDeletion]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffTextDeletionBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffTextHunkInfo]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffTextNoChange]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffTextNoChangeBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DiffTextSeparatorBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.DimmedText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Dropdown]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.EmulatorBar]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.EmulatorDropDown]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ErrorText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.GameSettingsTableItem]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.GameSettingsTooltip]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.GetEnumItems]
+args = []
+method = true
+
+[Enum.StudioStyleGuideColor.HeaderSection]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.InfoText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.InputFieldBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.InputFieldBorder]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Item]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Light]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.LinkText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.MainBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.MainButton]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.MainText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Mid]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Midlight]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Notification]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.RibbonButton]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.RibbonTab]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.RibbonTabTopBar]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptBuiltInFunction]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptComment]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptError]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptFindSelectionBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptKeyword]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptMatchingWordSelectionBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptNumber]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptOperator]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptPreprocessor]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptSelectionBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptSelectionText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptSideWidget]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptString]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScriptWarning]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScrollBar]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ScrollBarBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.SensitiveText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Separator]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Shadow]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.StatusBar]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.SubText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Tab]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.TabBar]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.TableItem]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Titlebar]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.TitlebarText]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.Tooltip]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.ViewPortBackground]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideColor.WarningText]
+struct = "EnumItem"
+[Enum.StudioStyleGuideModifier.Default]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideModifier.Disabled]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideModifier.GetEnumItems]
+args = []
+method = true
+
+[Enum.StudioStyleGuideModifier.Hover]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideModifier.Pressed]
+struct = "EnumItem"
+
+[Enum.StudioStyleGuideModifier.Selected]
+struct = "EnumItem"
+[Enum.Style.AlternatingSupports]
+struct = "EnumItem"
+
+[Enum.Style.BridgeStyleSupports]
+struct = "EnumItem"
+
+[Enum.Style.GetEnumItems]
+args = []
+method = true
+
+[Enum.Style.NoSupports]
+struct = "EnumItem"
+[Enum.SurfaceConstraint.GetEnumItems]
+args = []
+method = true
+
+[Enum.SurfaceConstraint.Hinge]
+struct = "EnumItem"
+
+[Enum.SurfaceConstraint.Motor]
+struct = "EnumItem"
+
+[Enum.SurfaceConstraint.None]
+struct = "EnumItem"
+
+[Enum.SurfaceConstraint.SteppingMotor]
+struct = "EnumItem"
+[Enum.SurfaceGuiSizingMode.FixedSize]
+struct = "EnumItem"
+
+[Enum.SurfaceGuiSizingMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.SurfaceGuiSizingMode.PixelsPerStud]
+struct = "EnumItem"
+[Enum.SurfaceType.GetEnumItems]
+args = []
+method = true
+
+[Enum.SurfaceType.Glue]
+struct = "EnumItem"
+
+[Enum.SurfaceType.Hinge]
+struct = "EnumItem"
+
+[Enum.SurfaceType.Inlet]
+struct = "EnumItem"
+
+[Enum.SurfaceType.Motor]
+struct = "EnumItem"
+
+[Enum.SurfaceType.Smooth]
+struct = "EnumItem"
+
+[Enum.SurfaceType.SmoothNoOutlines]
+struct = "EnumItem"
+
+[Enum.SurfaceType.SteppingMotor]
+struct = "EnumItem"
+
+[Enum.SurfaceType.Studs]
+struct = "EnumItem"
+
+[Enum.SurfaceType.Universal]
+struct = "EnumItem"
+
+[Enum.SurfaceType.Weld]
+struct = "EnumItem"
+[Enum.SwipeDirection.Down]
+struct = "EnumItem"
+
+[Enum.SwipeDirection.GetEnumItems]
+args = []
+method = true
+
+[Enum.SwipeDirection.Left]
+struct = "EnumItem"
+
+[Enum.SwipeDirection.None]
+struct = "EnumItem"
+
+[Enum.SwipeDirection.Right]
+struct = "EnumItem"
+
+[Enum.SwipeDirection.Up]
+struct = "EnumItem"
+[Enum.TableMajorAxis.ColumnMajor]
+struct = "EnumItem"
+
+[Enum.TableMajorAxis.GetEnumItems]
+args = []
+method = true
+
+[Enum.TableMajorAxis.RowMajor]
+struct = "EnumItem"
+[Enum.Technology.Compatibility]
+struct = "EnumItem"
+
+[Enum.Technology.GetEnumItems]
+args = []
+method = true
+
+[Enum.Technology.Legacy]
+struct = "EnumItem"
+
+[Enum.Technology.ShadowMap]
+struct = "EnumItem"
+
+[Enum.Technology.Voxel]
+struct = "EnumItem"
+[Enum.TeleportResult.Failure]
+struct = "EnumItem"
+
+[Enum.TeleportResult.Flooded]
+struct = "EnumItem"
+
+[Enum.TeleportResult.GameEnded]
+struct = "EnumItem"
+
+[Enum.TeleportResult.GameFull]
+struct = "EnumItem"
+
+[Enum.TeleportResult.GameNotFound]
+struct = "EnumItem"
+
+[Enum.TeleportResult.GetEnumItems]
+args = []
+method = true
+
+[Enum.TeleportResult.IsTeleporting]
+struct = "EnumItem"
+
+[Enum.TeleportResult.Success]
+struct = "EnumItem"
+
+[Enum.TeleportResult.Unauthorized]
+struct = "EnumItem"
+[Enum.TeleportState.Failed]
+struct = "EnumItem"
+
+[Enum.TeleportState.GetEnumItems]
+args = []
+method = true
+
+[Enum.TeleportState.InProgress]
+struct = "EnumItem"
+
+[Enum.TeleportState.RequestedFromServer]
+struct = "EnumItem"
+
+[Enum.TeleportState.Started]
+struct = "EnumItem"
+
+[Enum.TeleportState.WaitingForServer]
+struct = "EnumItem"
+[Enum.TeleportType.GetEnumItems]
+args = []
+method = true
+
+[Enum.TeleportType.ToInstance]
+struct = "EnumItem"
+
+[Enum.TeleportType.ToPlace]
+struct = "EnumItem"
+
+[Enum.TeleportType.ToReservedServer]
+struct = "EnumItem"
+[Enum.TextFilterContext.GetEnumItems]
+args = []
+method = true
+
+[Enum.TextFilterContext.PrivateChat]
+struct = "EnumItem"
+
+[Enum.TextFilterContext.PublicChat]
+struct = "EnumItem"
+[Enum.TextInputType.Default]
+struct = "EnumItem"
+
+[Enum.TextInputType.Email]
+struct = "EnumItem"
+
+[Enum.TextInputType.GetEnumItems]
+args = []
+method = true
+
+[Enum.TextInputType.NoSuggestions]
+struct = "EnumItem"
+
+[Enum.TextInputType.Number]
+struct = "EnumItem"
+
+[Enum.TextInputType.Password]
+struct = "EnumItem"
+
+[Enum.TextInputType.Phone]
+struct = "EnumItem"
+[Enum.TextTruncate.AtEnd]
+struct = "EnumItem"
+
+[Enum.TextTruncate.GetEnumItems]
+args = []
+method = true
+
+[Enum.TextTruncate.None]
+struct = "EnumItem"
+[Enum.TextXAlignment.Center]
+struct = "EnumItem"
+
+[Enum.TextXAlignment.GetEnumItems]
+args = []
+method = true
+
+[Enum.TextXAlignment.Left]
+struct = "EnumItem"
+
+[Enum.TextXAlignment.Right]
+struct = "EnumItem"
+[Enum.TextYAlignment.Bottom]
+struct = "EnumItem"
+
+[Enum.TextYAlignment.Center]
+struct = "EnumItem"
+
+[Enum.TextYAlignment.GetEnumItems]
+args = []
+method = true
+
+[Enum.TextYAlignment.Top]
+struct = "EnumItem"
+[Enum.TextureMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.TextureMode.Static]
+struct = "EnumItem"
+
+[Enum.TextureMode.Stretch]
+struct = "EnumItem"
+
+[Enum.TextureMode.Wrap]
+struct = "EnumItem"
+[Enum.TextureQueryType.GetEnumItems]
+args = []
+method = true
+
+[Enum.TextureQueryType.Humanoid]
+struct = "EnumItem"
+
+[Enum.TextureQueryType.HumanoidOrphaned]
+struct = "EnumItem"
+
+[Enum.TextureQueryType.NonHumanoid]
+struct = "EnumItem"
+
+[Enum.TextureQueryType.NonHumanoidOrphaned]
+struct = "EnumItem"
+[Enum.ThreadPoolConfig.Auto]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.GetEnumItems]
+args = []
+method = true
+
+[Enum.ThreadPoolConfig.PerCore1]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.PerCore2]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.PerCore3]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.PerCore4]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.Threads1]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.Threads16]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.Threads2]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.Threads3]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.Threads4]
+struct = "EnumItem"
+
+[Enum.ThreadPoolConfig.Threads8]
+struct = "EnumItem"
+[Enum.ThrottlingPriority.Default]
+struct = "EnumItem"
+
+[Enum.ThrottlingPriority.ElevatedOnServer]
+struct = "EnumItem"
+
+[Enum.ThrottlingPriority.Extreme]
+struct = "EnumItem"
+
+[Enum.ThrottlingPriority.GetEnumItems]
+args = []
+method = true
+[Enum.ThumbnailSize.GetEnumItems]
+args = []
+method = true
+
+[Enum.ThumbnailSize.Size100x100]
+struct = "EnumItem"
+
+[Enum.ThumbnailSize.Size150x150]
+struct = "EnumItem"
+
+[Enum.ThumbnailSize.Size180x180]
+struct = "EnumItem"
+
+[Enum.ThumbnailSize.Size352x352]
+struct = "EnumItem"
+
+[Enum.ThumbnailSize.Size420x420]
+struct = "EnumItem"
+
+[Enum.ThumbnailSize.Size48x48]
+struct = "EnumItem"
+
+[Enum.ThumbnailSize.Size60x60]
+struct = "EnumItem"
+[Enum.ThumbnailType.AvatarBust]
+struct = "EnumItem"
+
+[Enum.ThumbnailType.AvatarThumbnail]
+struct = "EnumItem"
+
+[Enum.ThumbnailType.GetEnumItems]
+args = []
+method = true
+
+[Enum.ThumbnailType.HeadShot]
+struct = "EnumItem"
+[Enum.TickCountSampleMethod.Benchmark]
+struct = "EnumItem"
+
+[Enum.TickCountSampleMethod.Fast]
+struct = "EnumItem"
+
+[Enum.TickCountSampleMethod.GetEnumItems]
+args = []
+method = true
+
+[Enum.TickCountSampleMethod.Precise]
+struct = "EnumItem"
+[Enum.TopBottom.Bottom]
+struct = "EnumItem"
+
+[Enum.TopBottom.Center]
+struct = "EnumItem"
+
+[Enum.TopBottom.GetEnumItems]
+args = []
+method = true
+
+[Enum.TopBottom.Top]
+struct = "EnumItem"
+[Enum.TouchCameraMovementMode.Classic]
+struct = "EnumItem"
+
+[Enum.TouchCameraMovementMode.Default]
+struct = "EnumItem"
+
+[Enum.TouchCameraMovementMode.Follow]
+struct = "EnumItem"
+
+[Enum.TouchCameraMovementMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.TouchCameraMovementMode.Orbital]
+struct = "EnumItem"
+[Enum.TouchMovementMode.ClickToMove]
+struct = "EnumItem"
+
+[Enum.TouchMovementMode.DPad]
+struct = "EnumItem"
+
+[Enum.TouchMovementMode.Default]
+struct = "EnumItem"
+
+[Enum.TouchMovementMode.DynamicThumbstick]
+struct = "EnumItem"
+
+[Enum.TouchMovementMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.TouchMovementMode.Thumbpad]
+struct = "EnumItem"
+
+[Enum.TouchMovementMode.Thumbstick]
+struct = "EnumItem"
+[Enum.TweenStatus.Canceled]
+struct = "EnumItem"
+
+[Enum.TweenStatus.Completed]
+struct = "EnumItem"
+
+[Enum.TweenStatus.GetEnumItems]
+args = []
+method = true
+[Enum.UITheme.Dark]
+struct = "EnumItem"
+
+[Enum.UITheme.GetEnumItems]
+args = []
+method = true
+
+[Enum.UITheme.Light]
+struct = "EnumItem"
+[Enum.UiMessageType.GetEnumItems]
+args = []
+method = true
+
+[Enum.UiMessageType.UiMessageError]
+struct = "EnumItem"
+
+[Enum.UiMessageType.UiMessageInfo]
+struct = "EnumItem"
+[Enum.UploadSetting.Always]
+struct = "EnumItem"
+
+[Enum.UploadSetting.Ask]
+struct = "EnumItem"
+
+[Enum.UploadSetting.GetEnumItems]
+args = []
+method = true
+
+[Enum.UploadSetting.Never]
+struct = "EnumItem"
+[Enum.UserCFrame.GetEnumItems]
+args = []
+method = true
+
+[Enum.UserCFrame.Head]
+struct = "EnumItem"
+
+[Enum.UserCFrame.LeftHand]
+struct = "EnumItem"
+
+[Enum.UserCFrame.RightHand]
+struct = "EnumItem"
+[Enum.UserInputState.Begin]
+struct = "EnumItem"
+
+[Enum.UserInputState.Cancel]
+struct = "EnumItem"
+
+[Enum.UserInputState.Change]
+struct = "EnumItem"
+
+[Enum.UserInputState.End]
+struct = "EnumItem"
+
+[Enum.UserInputState.GetEnumItems]
+args = []
+method = true
+
+[Enum.UserInputState.None]
+struct = "EnumItem"
+[Enum.UserInputType.Accelerometer]
+struct = "EnumItem"
+
+[Enum.UserInputType.Focus]
+struct = "EnumItem"
+
+[Enum.UserInputType.Gamepad1]
+struct = "EnumItem"
+
+[Enum.UserInputType.Gamepad2]
+struct = "EnumItem"
+
+[Enum.UserInputType.Gamepad3]
+struct = "EnumItem"
+
+[Enum.UserInputType.Gamepad4]
+struct = "EnumItem"
+
+[Enum.UserInputType.Gamepad5]
+struct = "EnumItem"
+
+[Enum.UserInputType.Gamepad6]
+struct = "EnumItem"
+
+[Enum.UserInputType.Gamepad7]
+struct = "EnumItem"
+
+[Enum.UserInputType.Gamepad8]
+struct = "EnumItem"
+
+[Enum.UserInputType.GetEnumItems]
+args = []
+method = true
+
+[Enum.UserInputType.Gyro]
+struct = "EnumItem"
+
+[Enum.UserInputType.InputMethod]
+struct = "EnumItem"
+
+[Enum.UserInputType.Keyboard]
+struct = "EnumItem"
+
+[Enum.UserInputType.MouseButton1]
+struct = "EnumItem"
+
+[Enum.UserInputType.MouseButton2]
+struct = "EnumItem"
+
+[Enum.UserInputType.MouseButton3]
+struct = "EnumItem"
+
+[Enum.UserInputType.MouseMovement]
+struct = "EnumItem"
+
+[Enum.UserInputType.MouseWheel]
+struct = "EnumItem"
+
+[Enum.UserInputType.None]
+struct = "EnumItem"
+
+[Enum.UserInputType.TextInput]
+struct = "EnumItem"
+
+[Enum.UserInputType.Touch]
+struct = "EnumItem"
+[Enum.VRTouchpad.GetEnumItems]
+args = []
+method = true
+
+[Enum.VRTouchpad.Left]
+struct = "EnumItem"
+
+[Enum.VRTouchpad.Right]
+struct = "EnumItem"
+[Enum.VRTouchpadMode.ABXY]
+struct = "EnumItem"
+
+[Enum.VRTouchpadMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.VRTouchpadMode.Touch]
+struct = "EnumItem"
+
+[Enum.VRTouchpadMode.VirtualThumbstick]
+struct = "EnumItem"
+[Enum.VerticalAlignment.Bottom]
+struct = "EnumItem"
+
+[Enum.VerticalAlignment.Center]
+struct = "EnumItem"
+
+[Enum.VerticalAlignment.GetEnumItems]
+args = []
+method = true
+
+[Enum.VerticalAlignment.Top]
+struct = "EnumItem"
+[Enum.VerticalScrollBarPosition.GetEnumItems]
+args = []
+method = true
+
+[Enum.VerticalScrollBarPosition.Left]
+struct = "EnumItem"
+
+[Enum.VerticalScrollBarPosition.Right]
+struct = "EnumItem"
+[Enum.VibrationMotor.GetEnumItems]
+args = []
+method = true
+
+[Enum.VibrationMotor.Large]
+struct = "EnumItem"
+
+[Enum.VibrationMotor.LeftHand]
+struct = "EnumItem"
+
+[Enum.VibrationMotor.LeftTrigger]
+struct = "EnumItem"
+
+[Enum.VibrationMotor.RightHand]
+struct = "EnumItem"
+
+[Enum.VibrationMotor.RightTrigger]
+struct = "EnumItem"
+
+[Enum.VibrationMotor.Small]
+struct = "EnumItem"
+[Enum.VideoQualitySettings.GetEnumItems]
+args = []
+method = true
+
+[Enum.VideoQualitySettings.HighResolution]
+struct = "EnumItem"
+
+[Enum.VideoQualitySettings.LowResolution]
+struct = "EnumItem"
+
+[Enum.VideoQualitySettings.MediumResolution]
+struct = "EnumItem"
+[Enum.VirtualInputMode.GetEnumItems]
+args = []
+method = true
+
+[Enum.VirtualInputMode.None]
+struct = "EnumItem"
+
+[Enum.VirtualInputMode.Playing]
+struct = "EnumItem"
+
+[Enum.VirtualInputMode.Recording]
+struct = "EnumItem"
+[Enum.WaterDirection.GetEnumItems]
+args = []
+method = true
+
+[Enum.WaterDirection.NegX]
+struct = "EnumItem"
+
+[Enum.WaterDirection.NegY]
+struct = "EnumItem"
+
+[Enum.WaterDirection.NegZ]
+struct = "EnumItem"
+
+[Enum.WaterDirection.X]
+struct = "EnumItem"
+
+[Enum.WaterDirection.Y]
+struct = "EnumItem"
+
+[Enum.WaterDirection.Z]
+struct = "EnumItem"
+[Enum.WaterForce.GetEnumItems]
+args = []
+method = true
+
+[Enum.WaterForce.Max]
+struct = "EnumItem"
+
+[Enum.WaterForce.Medium]
+struct = "EnumItem"
+
+[Enum.WaterForce.None]
+struct = "EnumItem"
+
+[Enum.WaterForce.Small]
+struct = "EnumItem"
+
+[Enum.WaterForce.Strong]
+struct = "EnumItem"
+[Enum.ZIndexBehavior.GetEnumItems]
+args = []
+method = true
+
+[Enum.ZIndexBehavior.Global]
+struct = "EnumItem"
+
+[Enum.ZIndexBehavior.Sibling]
+struct = "EnumItem"
+[[Instance.new.args]]
+type = ["Accoutrement", "Accessory", "Hat", "AdvancedDragger", "Animation", "AnimationController", "Animator", "Attachment", "Backpack", "HopperBin", "Tool", "Flag", "Beam", "BindableEvent", "BindableFunction", "BodyAngularVelocity", "BodyForce", "BodyGyro", "BodyPosition", "BodyThrust", "BodyVelocity", "RocketPropulsion", "Camera", "BodyColors", "CharacterMesh", "Pants", "Shirt", "ShirtGraphic", "Skin", "ClickDetector", "Configuration", "AlignOrientation", "AlignPosition", "AngularVelocity", "BallSocketConstraint", "HingeConstraint", "LineForce", "RodConstraint", "RopeConstraint", "CylindricalConstraint", "PrismaticConstraint", "SpringConstraint", "Torque", "VectorForce", "HumanoidController", "SkateboardController", "VehicleController", "CustomEvent", "CustomEventReceiver", "BlockMesh", "CylinderMesh", "FileMesh", "SpecialMesh", "DebuggerWatch", "Dialog", "DialogChoice", "Dragger", "Explosion", "Decal", "Texture", "Hole", "MotorFeature", "Fire", "FlyweightService", "CSGDictionaryService", "NonReplicatedCSGDictionaryService", "Folder", "ForceField", "FunctionalTest", "Frame", "ImageButton", "TextButton", "ImageLabel", "TextLabel", "ScrollingFrame", "TextBox", "VideoFrame", "ViewportFrame", "BillboardGui", "ScreenGui", "GuiMain", "SurfaceGui", "FloorWire", "SelectionBox", "BoxHandleAdornment", "ConeHandleAdornment", "CylinderHandleAdornment", "ImageHandleAdornment", "LineHandleAdornment", "SphereHandleAdornment", "ParabolaAdornment", "SelectionSphere", "ArcHandles", "Handles", "SurfaceSelection", "SelectionPartLasso", "SelectionPointLasso", "Humanoid", "HumanoidDescription", "RotateP", "RotateV", "Glue", "ManualGlue", "ManualWeld", "Motor", "Motor6D", "Rotate", "Snap", "VelocityMotor", "Weld", "Keyframe", "KeyframeMarker", "KeyframeSequence", "PointLight", "SpotLight", "SurfaceLight", "LocalizationTable", "Script", "LocalScript", "ModuleScript", "Message", "Hint", "NoCollisionConstraint", "CornerWedgePart", "Part", "FlagStand", "Seat", "SkateboardPlatform", "SpawnLocation", "WedgePart", "MeshPart", "PartOperation", "NegateOperation", "UnionOperation", "TrussPart", "VehicleSeat", "Model", "WorldModel", "PartOperationAsset", "ParticleEmitter", "Player", "PluginAction", "Pose", "BloomEffect", "BlurEffect", "ColorCorrectionEffect", "SunRaysEffect", "ReflectionMetadata", "ReflectionMetadataCallbacks", "ReflectionMetadataClasses", "ReflectionMetadataEnums", "ReflectionMetadataEvents", "ReflectionMetadataFunctions", "ReflectionMetadataClass", "ReflectionMetadataEnum", "ReflectionMetadataEnumItem", "ReflectionMetadataMember", "ReflectionMetadataProperties", "ReflectionMetadataYieldFunctions", "RemoteEvent", "RemoteFunction", "RenderingTest", "Sky", "Smoke", "Sound", "ChorusSoundEffect", "CompressorSoundEffect", "DistortionSoundEffect", "EchoSoundEffect", "EqualizerSoundEffect", "FlangeSoundEffect", "PitchShiftSoundEffect", "ReverbSoundEffect", "TremoloSoundEffect", "SoundGroup", "Sparkles", "StandalonePluginScripts", "StarterGear", "SurfaceAppearance", "Team", "TerrainRegion", "TestService", "Trail", "Tween", "UIAspectRatioConstraint", "UISizeConstraint", "UITextSizeConstraint", "UIGradient", "UIGridLayout", "UIInlineLayout", "UIListLayout", "UIPageLayout", "UITableLayout", "UIPadding", "UIScale", "BinaryStringValue", "BoolValue", "BrickColorValue", "CFrameValue", "Color3Value", "DoubleConstrainedValue", "IntConstrainedValue", "IntValue", "NumberValue", "ObjectValue", "RayValue", "StringValue", "Vector3Value", "VirtualInputManager", "WeldConstraint"]
+[[NumberRange.new.args]]
+type = "number"
+
+[[NumberRange.new.args]]
+required = false
+type = "number"
+[[NumberSequence.new.args]]
+type = "any"
+
+[[NumberSequence.new.args]]
+required = false
+type = "number"
+[[NumberSequenceKeypoint.new.args]]
+type = "number"
+
+[[NumberSequenceKeypoint.new.args]]
+type = "number"
+
+[[NumberSequenceKeypoint.new.args]]
+required = false
+type = "number"
+[[PhysicalProperties.new.args]]
+type = "any"
+
+[[PhysicalProperties.new.args]]
+required = false
+type = "number"
+
+[[PhysicalProperties.new.args]]
+required = false
+type = "number"
+
+[[PhysicalProperties.new.args]]
+required = false
+type = "number"
+
+[[PhysicalProperties.new.args]]
+required = false
+type = "number"
+[[Random.new.args]]
+required = false
+type = "number"
+[[Ray.new.args]]
+[Ray.new.args.type]
+display = "Vector3"
+
+[[Ray.new.args]]
+[Ray.new.args.type]
+display = "Vector3"
+[[Rect.new.args]]
+type = "any"
+
+[[Rect.new.args]]
+type = "any"
+
+[[Rect.new.args]]
+required = false
+type = "any"
+
+[[Rect.new.args]]
+required = false
+type = "any"
+[[Region3.new.args]]
+[Region3.new.args.type]
+display = "Vector3"
+
+[[Region3.new.args]]
+[Region3.new.args.type]
+display = "Vector3"
+[[Region3int16.new.args]]
+[Region3int16.new.args.type]
+display = "Vector3"
+
+[[Region3int16.new.args]]
+[Region3int16.new.args.type]
+display = "Vector3"
+[[TweenInfo.new.args]]
+required = false
+type = "number"
+
+[[TweenInfo.new.args]]
+required = false
+
+[TweenInfo.new.args.type]
+display = "EasingStyle"
+
+[[TweenInfo.new.args]]
+required = false
+
+[TweenInfo.new.args.type]
+display = "EasingDirection"
+
+[[TweenInfo.new.args]]
+required = false
+type = "number"
+
+[[TweenInfo.new.args]]
+required = false
+type = "bool"
+
+[[TweenInfo.new.args]]
+required = false
+type = "number"
+[[UDim.new.args]]
+type = "number"
+
+[[UDim.new.args]]
+type = "number"
+[[UDim2.fromOffset.args]]
+type = "number"
+
+[[UDim2.fromOffset.args]]
+type = "number"
+[[UDim2.fromScale.args]]
+type = "number"
+
+[[UDim2.fromScale.args]]
+type = "number"
+[[UDim2.new.args]]
+required = false
+type = "any"
+
+[[UDim2.new.args]]
+required = false
+type = "any"
+
+[[UDim2.new.args]]
+required = false
+type = "any"
+
+[[UDim2.new.args]]
+required = false
+type = "any"
+
+[UserSettings]
+args = []
+[[Vector2.new.args]]
+required = false
+type = "number"
+
+[[Vector2.new.args]]
+required = false
+type = "number"
+[[Vector2int16.new.args]]
+required = false
+type = "number"
+
+[[Vector2int16.new.args]]
+required = false
+type = "number"
+[[Vector3.FromAxis.args]]
+[Vector3.FromAxis.args.type]
+display = "Axis"
+[[Vector3.FromNormalId.args]]
+[Vector3.FromNormalId.args.type]
+display = "NormalId"
+[[Vector3.new.args]]
+required = false
+type = "number"
+
+[[Vector3.new.args]]
+required = false
+type = "number"
+
+[[Vector3.new.args]]
+required = false
+type = "number"
+[[Vector3int16.new.args]]
+required = false
+type = "number"
+
+[[Vector3int16.new.args]]
+required = false
+type = "number"
+
+[[Vector3int16.new.args]]
+required = false
+type = "number"
+[[bit32.arshift.args]]
+type = "number"
+
+[[bit32.arshift.args]]
+type = "number"
+[[bit32.band.args]]
+type = "number"
+[[bit32.bnot.args]]
+type = "number"
+[[bit32.bor.args]]
+type = "..."
+[[bit32.btest.args]]
+type = "..."
+[[bit32.bxor.args]]
+type = "..."
+[[bit32.extract.args]]
+type = "number"
+
+[[bit32.extract.args]]
+type = "number"
+
+[[bit32.extract.args]]
+required = false
+type = "number"
+[[bit32.lrotate.args]]
+type = "number"
+
+[[bit32.lrotate.args]]
+type = "number"
+[[bit32.lshift.args]]
+type = "number"
+
+[[bit32.lshift.args]]
+type = "number"
+[[bit32.replace.args]]
+type = "number"
+
+[[bit32.replace.args]]
+type = "number"
+
+[[bit32.replace.args]]
+required = false
+type = "number"
+[[bit32.rrotate.args]]
+type = "number"
+
+[[bit32.rrotate.args]]
+type = "number"
+[[bit32.rshift.args]]
+type = "number"
+
+[[bit32.rshift.args]]
+type = "number"
+[[collectgarbage.args]]
+type = ["count"]
+[coroutine.isyieldable]
+args = []
+[debug.debug]
+removed = true
+
+[debug.getfenv]
+removed = true
+
+[debug.gethook]
+removed = true
+
+[debug.getinfo]
+removed = true
+
+[debug.getmetatable]
+removed = true
+
+[debug.getregistry]
+removed = true
+
+[debug.getupvalue]
+removed = true
+[[debug.profilebegin.args]]
+type = "string"
+
+[debug.profileend]
+args = []
+
+[debug.setfenv]
+removed = true
+
+[debug.sethook]
+removed = true
+
+[debug.setlocal]
+removed = true
+
+[debug.setmetatable]
+removed = true
+
+[debug.setupvalue]
+removed = true
+[[delay.args]]
+type = "number"
+
+[[delay.args]]
+type = "function"
+
+[dofile]
+removed = true
+
+[game]
+struct = "DataModel"
+
+[io]
+removed = true
+
+[load]
+removed = true
+
+[loadfile]
+removed = true
+[[math.clamp.args]]
+type = "number"
+
+[[math.clamp.args]]
+type = "number"
+
+[[math.clamp.args]]
+type = "number"
+[[math.log.args]]
+type = "number"
+
+[[math.log.args]]
+required = false
+type = "number"
+[[math.noise.args]]
+type = "number"
+
+[[math.noise.args]]
+required = false
+type = "number"
+
+[[math.noise.args]]
+required = false
+type = "number"
+[[math.sign.args]]
+type = "number"
+
+[module]
+removed = true
+[os.clock]
+removed = true
+
+[os.execute]
+removed = true
+
+[os.exit]
+removed = true
+
+[os.getenv]
+removed = true
+
+[os.remove]
+removed = true
+
+[os.rename]
+removed = true
+
+[os.setlocale]
+removed = true
+
+[os.tmpname]
+removed = true
+
+[plugin]
+struct = "Plugin"
+
+[script]
+struct = "Script"
+
+[settings]
+args = []
+
+[shared]
+property = true
+writable = "new-fields"
+[[spawn.args]]
+type = "function"
+[[string.split.args]]
+type = "string"
+
+[[string.split.args]]
+required = false
+type = "string"
+[[table.create.args]]
+type = "number"
+
+[[table.create.args]]
+required = false
+type = "any"
+[[table.find.args]]
+type = "table"
+
+[[table.find.args]]
+type = "any"
+
+[[table.find.args]]
+required = false
+type = "number"
+[[table.move.args]]
+type = "table"
+
+[[table.move.args]]
+type = "number"
+
+[[table.move.args]]
+type = "number"
+
+[[table.move.args]]
+type = "number"
+
+[[table.move.args]]
+required = false
+type = "table"
+[[table.pack.args]]
+type = "..."
+[[table.unpack.args]]
+type = "table"
+
+[[table.unpack.args]]
+required = false
+type = "number"
+
+[[table.unpack.args]]
+required = false
+type = "number"
+
+[tick]
+args = []
+
+[time]
+args = []
+[[typeof.args]]
+type = "any"
+[[utf8.char.args]]
+required = "utf8.char should be used with an argument despite it not throwing"
+type = "number"
+
+[[utf8.char.args]]
+required = false
+type = "..."
+
+[utf8.charpattern]
+property = true
+[[utf8.codepoint.args]]
+type = "string"
+
+[[utf8.codepoint.args]]
+required = false
+type = "number"
+
+[[utf8.codepoint.args]]
+required = false
+type = "number"
+[[utf8.codes.args]]
+type = "string"
+[[utf8.graphemes.args]]
+type = "string"
+
+[[utf8.graphemes.args]]
+required = false
+type = "number"
+
+[[utf8.graphemes.args]]
+required = false
+type = "number"
+[[utf8.len.args]]
+type = "string"
+
+[[utf8.len.args]]
+required = false
+type = "number"
+
+[[utf8.len.args]]
+required = false
+type = "number"
+[[utf8.nfcnormalize.args]]
+type = "string"
+[[utf8.nfdnormalize.args]]
+type = "string"
+[[utf8.offset.args]]
+type = "string"
+
+[[utf8.offset.args]]
+required = false
+type = "number"
+
+[[utf8.offset.args]]
+required = false
+type = "number"
+[[wait.args]]
+required = false
+type = "number"
+[[warn.args]]
+type = "string"
+
+[[warn.args]]
+required = false
+type = "..."
+
+[workspace]
+struct = "Workspace"
diff --git a/scripts/open-in-windows b/scripts/open-in-windows
new file mode 100755
index 0000000..30563ce
--- /dev/null
+++ b/scripts/open-in-windows
@@ -0,0 +1,2 @@
+#!/usr/bin/env bash
+powershell.exe /c "start $(wslpath -w $1)"
diff --git a/scripts/upload_model.py b/scripts/upload_model.py
new file mode 100644
index 0000000..14e97d3
--- /dev/null
+++ b/scripts/upload_model.py
@@ -0,0 +1,37 @@
+from argparse import ArgumentParser
+import requests
+
+parser = ArgumentParser()
+parser.add_argument("-a", "--assetid", dest="assetid", required=True)
+parser.add_argument("-f", "--file", dest="filepath", required=True)
+parser.add_argument("-r", "--roblosecurity",
+ dest="roblosecurity", required=True)
+
+args = parser.parse_args()
+
+url = "https://data.roblox.com/Data/Upload.ashx?assetid=" + args.assetid
+cookies = {'.ROBLOSECURITY': args.roblosecurity}
+headers = {
+ 'Content-Type': 'application/xml',
+ 'User-Agent': 'roblox',
+ 'x-csrf-token': ''}
+
+with open(args.filepath, 'rb') as file_reader:
+ payload = file_reader.read()
+
+ response = requests.post(
+ url=url,
+ data=payload,
+ cookies=cookies,
+ headers=headers)
+
+ if response.status_code == 403:
+ headers['x-csrf-token'] = response.headers['x-csrf-token']
+ response = requests.post(
+ url=url,
+ data=payload,
+ cookies=cookies,
+ headers=headers)
+
+ if response.status_code != 200:
+ raise Exception("Request did not succeed")
diff --git a/selene.toml b/selene.toml
new file mode 100644
index 0000000..2b7bbf6
--- /dev/null
+++ b/selene.toml
@@ -0,0 +1,4 @@
+std = "roblox-testez"
+
+[config.unused_variable]
+allow_unused_self = true
diff --git a/spec.server.lua b/spec.server.lua
new file mode 100644
index 0000000..d126a81
--- /dev/null
+++ b/spec.server.lua
@@ -0,0 +1,13 @@
+local ReplicatedStorage = game:GetService("ReplicatedStorage")
+
+local TestEZ = require(ReplicatedStorage.rbxts_include.node_modules.testez.src)
+
+local testRoots = {
+ ReplicatedStorage.out,
+}
+local results = TestEZ.TestBootstrap:run(testRoots, TestEZ.Reporters.TextReporter)
+
+-- Did something go wrong?
+if #results.errors > 0 or results.failureCount > 0 then
+ error("Tests failed")
+end
diff --git a/src/classes/LockableValueHolder.ts b/src/classes/LockableValueHolder.ts
new file mode 100644
index 0000000..9195b8b
--- /dev/null
+++ b/src/classes/LockableValueHolder.ts
@@ -0,0 +1,102 @@
+import { Bin } from "@rbxts/bin";
+import { assertNotDestroyed, warnAlreadyDestroyed } from "@rbxts/destroyed-instance-logging";
+import { IReadOnlySignal } from "@rbxts/signals-tooling";
+import { BinFactory } from "factories/BinFactory";
+import { ValueHolderFactory } from "factories/ValueHolderFactory";
+import { ILockableValueHolder } from "interfaces/ILockableValueHolder";
+import { IValueHolder } from "interfaces/IValueHolder";
+
+/**
+ * Standard implementation of ILockableValueHolder
+ */
+export class LockableValueHolder implements ILockableValueHolder {
+ public readonly valueChanged: IReadOnlySignal<(newValue: T, oldValue: T) => void>;
+
+ private bin: Bin;
+ private currentLockKey: object | undefined;
+ private readonly internalValueHolder: IValueHolder;
+ private isDestroyed = false;
+
+ private constructor(binFactory: BinFactory, initialValue: T, valueHolderFactory: ValueHolderFactory) {
+ this.bin = binFactory.createInstance();
+ this.internalValueHolder = this.bin.add(valueHolderFactory.createInstance(initialValue));
+ this.valueChanged = this.internalValueHolder.valueChanged;
+ }
+
+ public static create(this: void, initialValue: T): ILockableValueHolder {
+ return new LockableValueHolder(new BinFactory(), initialValue, new ValueHolderFactory());
+ }
+
+ public destroy() {
+ if (this.isDestroyed) {
+ warnAlreadyDestroyed(this);
+ return;
+ }
+
+ this.isDestroyed = true;
+ }
+
+ public getValue() {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ return this.internalValueHolder.getValue();
+ }
+
+ public isLocked(): boolean {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ return this.currentLockKey !== undefined;
+ }
+
+ public mustTakeLock(): object {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ if (this.currentLockKey !== undefined) {
+ throw `Lock is already taken`;
+ }
+
+ this.currentLockKey = {};
+ return this.currentLockKey;
+ }
+
+ public releaseLock(lockKey: object): void {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ if (lockKey !== this.currentLockKey) {
+ throw `Attempt to unlock without matching key`;
+ }
+
+ this.currentLockKey = undefined;
+ }
+
+ public setValue(newValue: T, lockKey?: object) {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ if (this.currentLockKey !== undefined && lockKey !== this.currentLockKey) {
+ throw `Attempt to write to a locked value holder`;
+ }
+
+ this.internalValueHolder.setValue(newValue);
+ }
+
+ public tryTakeLock(): object | undefined {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ if (this.currentLockKey !== undefined) {
+ return undefined;
+ }
+
+ this.currentLockKey = {};
+ return this.currentLockKey;
+ }
+
+ public updateValue(updateCallback: (currentValue: T) => T, lockKey?: object) {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ if (this.currentLockKey !== undefined && lockKey !== this.currentLockKey) {
+ throw `Attempt to write to a locked value holder`;
+ }
+
+ this.internalValueHolder.updateValue(updateCallback);
+ }
+}
diff --git a/src/classes/ValueHolder.ts b/src/classes/ValueHolder.ts
new file mode 100644
index 0000000..a644a6b
--- /dev/null
+++ b/src/classes/ValueHolder.ts
@@ -0,0 +1,64 @@
+import { IValueHolder } from "interfaces/IValueHolder";
+import { Bin } from "@rbxts/bin";
+import { ISignal } from "@rbxts/signals-tooling";
+import { BinFactory } from "factories/BinFactory";
+import { SignalFactory } from "factories/SignalFactory";
+import { assertNotDestroyed, warnAlreadyDestroyed } from "@rbxts/destroyed-instance-logging";
+
+/**
+ * Standard implementation of IValueHolder
+ */
+export class ValueHolder implements IValueHolder {
+ public readonly valueChanged: ISignal<(newValue: T, oldValue: T) => void>;
+
+ private readonly bin: Bin;
+ private currentValue: T;
+ private isDestroyed = false;
+
+ private constructor(binFactory: BinFactory, initialValue: T, signalFactory: SignalFactory) {
+ this.bin = binFactory.createInstance();
+ this.currentValue = initialValue;
+
+ this.valueChanged = this.bin.add(signalFactory.createInstance());
+ }
+
+ public static create(this: void, initialValue: T): IValueHolder {
+ return new ValueHolder(new BinFactory(), initialValue, new SignalFactory());
+ }
+
+ public destroy() {
+ if (this.isDestroyed) {
+ warnAlreadyDestroyed(this);
+ return;
+ }
+
+ this.bin.destroy();
+ this.isDestroyed = true;
+ }
+
+ public getValue() {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ return this.currentValue;
+ }
+
+ public setValue(newValue: T) {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ if (newValue === this.currentValue) {
+ return;
+ }
+
+ const oldValue = this.currentValue;
+ this.currentValue = newValue;
+
+ this.valueChanged.fire(newValue, oldValue);
+ }
+
+ public updateValue(updateCallback: (currentValue: T) => T) {
+ assertNotDestroyed(this.isDestroyed, this);
+
+ const newValue = updateCallback(this.currentValue);
+ this.setValue(newValue);
+ }
+}
diff --git a/src/factories/BinFactory.ts b/src/factories/BinFactory.ts
new file mode 100644
index 0000000..91f5a5d
--- /dev/null
+++ b/src/factories/BinFactory.ts
@@ -0,0 +1,8 @@
+import { Bin } from "@rbxts/bin";
+
+/** @internal */
+export class BinFactory {
+ public createInstance() {
+ return new Bin();
+ }
+}
diff --git a/src/factories/SignalFactory.ts b/src/factories/SignalFactory.ts
new file mode 100644
index 0000000..a897716
--- /dev/null
+++ b/src/factories/SignalFactory.ts
@@ -0,0 +1,8 @@
+import { AnyArgs, ISignal, Signal } from "@rbxts/signals-tooling";
+
+/** @internal */
+export class SignalFactory {
+ public createInstance void>(): ISignal {
+ return new Signal();
+ }
+}
diff --git a/src/factories/ValueHolderFactory.ts b/src/factories/ValueHolderFactory.ts
new file mode 100644
index 0000000..e2512ee
--- /dev/null
+++ b/src/factories/ValueHolderFactory.ts
@@ -0,0 +1,8 @@
+import { ValueHolder } from "classes/ValueHolder";
+
+/** @internal */
+export class ValueHolderFactory {
+ public createInstance(initialValue: T) {
+ return ValueHolder.create(initialValue);
+ }
+}
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000..7979dcd
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,6 @@
+export * from "classes/LockableValueHolder";
+export * from "classes/ValueHolder";
+
+export * from "interfaces/ILockableValueHolder";
+export * from "interfaces/IReadonlyValueHolder";
+export * from "interfaces/IValueHolder";
diff --git a/src/interfaces/ILockableValueHolder.d.ts b/src/interfaces/ILockableValueHolder.d.ts
new file mode 100644
index 0000000..9d58178
--- /dev/null
+++ b/src/interfaces/ILockableValueHolder.d.ts
@@ -0,0 +1,51 @@
+import { IReadonlyValueHolder } from "./IReadonlyValueHolder";
+
+/**
+ * Defines a lockable value holder
+ */
+export interface ILockableValueHolder extends IReadonlyValueHolder {
+ /**
+ * Destroys the instance.
+ * Any further calls to methods on the instance will throw errors.
+ */
+ destroy(): void;
+
+ /**
+ * Checks whether the value holder is locked
+ */
+ isLocked(): boolean;
+
+ /**
+ * Tries to take the lock and returns a lock key object if successful, otherwise throws
+ * @returns The lock key object
+ * @throws Throws if taking the lock is unsuccessful
+ */
+ mustTakeLock(): object;
+
+ /**
+ * Releases the lock
+ * @param lockKey The lock key
+ */
+ releaseLock(lockKey: object): void;
+
+ /**
+ * Changes the value and fires valueChanged if the new value is not equal to the current value
+ * @param newValue The new value
+ * @param lockKey The lock key, if any
+ */
+ setValue(newValue: T, lockKey?: object): void;
+
+ /**
+ * Tries to take the lock and returns a lock key object if successful, otherwise returns undefined
+ * @returns The lock key object if successful, otherwise undefined
+ */
+ tryTakeLock(): object | undefined;
+
+ /**
+ * Calls the provided function and changes the value if the returned value is not equal to the current value
+ * If the value is changed, then valueChanged is fired
+ * @param updateCallback A function that takes a current value and returns a new value
+ * @param lockKey The lock key, if any
+ */
+ updateValue(updateCallback: (currentValue: T) => T, lockKey?: object): void;
+}
diff --git a/src/interfaces/IReadonlyValueHolder.d.ts b/src/interfaces/IReadonlyValueHolder.d.ts
new file mode 100644
index 0000000..09a5cef
--- /dev/null
+++ b/src/interfaces/IReadonlyValueHolder.d.ts
@@ -0,0 +1,17 @@
+import { IDestroyable } from "@rbxts/dumpster";
+import { IReadOnlySignal } from "@rbxts/signals-tooling";
+
+/**
+ * Defines a readonly value manager for a value of type T
+ */
+export interface IReadonlyValueHolder extends IDestroyable {
+ /**
+ * Fired when the value is changed
+ */
+ readonly valueChanged: IReadOnlySignal<(newValue: T, oldValue: T) => void>;
+
+ /**
+ * Gets the current value
+ */
+ getValue(): T;
+}
diff --git a/src/interfaces/IValueHolder.d.ts b/src/interfaces/IValueHolder.d.ts
new file mode 100644
index 0000000..a6b3e75
--- /dev/null
+++ b/src/interfaces/IValueHolder.d.ts
@@ -0,0 +1,25 @@
+import { IReadonlyValueHolder } from "./IReadonlyValueHolder";
+
+/**
+ * Defines a writable value holder for a value of type T
+ */
+export interface IValueHolder extends IReadonlyValueHolder {
+ /**
+ * Destroys the instance.
+ * Any further calls to methods on the instance will throw errors.
+ */
+ destroy(): void;
+
+ /**
+ * Changes the value and fires valueChanged if the new value is not equal to the current value
+ * @param newValue The new value
+ */
+ setValue(newValue: T): void;
+
+ /**
+ * Calls the provided function and changes the value if the returned value is not equal to the current value
+ * If the value is changed, then valueChanged is fired
+ * @param updateCallback A function that takes a current value and returns a new value
+ */
+ updateValue(updateCallback: (currentValue: T) => T): void;
+}
diff --git a/standalone-model.project.json b/standalone-model.project.json
new file mode 100644
index 0000000..b0b45ba
--- /dev/null
+++ b/standalone-model.project.json
@@ -0,0 +1,16 @@
+{
+ "name": "value-holders",
+ "globIgnorePaths": [
+ "**/package.json",
+ "**/tsconfig.json"
+ ],
+ "tree": {
+ "$path": "out",
+ "include": {
+ "$path": "include",
+ "node_modules": {
+ "$path": "node_modules/@rbxts"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..e5975fe
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ // required
+ "allowSyntheticDefaultImports": true,
+ "downlevelIteration": true,
+ "jsx": "react",
+ "jsxFactory": "Roact.createElement",
+ "jsxFragmentFactory": "Roact.Fragment",
+ "module": "commonjs",
+ "moduleResolution": "Node",
+ "noLib": true,
+ "resolveJsonModule": true,
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "target": "ESNext",
+ "typeRoots": ["node_modules/@rbxts"],
+
+ // configurable
+ "rootDir": "src",
+ "outDir": "out",
+ "baseUrl": "src",
+ "incremental": true,
+ "tsBuildInfoFile": "out/tsconfig.tsbuildinfo",
+ "declaration": true
+ }
+}
diff --git a/typedoc.json b/typedoc.json
new file mode 100644
index 0000000..3e436bc
--- /dev/null
+++ b/typedoc.json
@@ -0,0 +1,9 @@
+{
+ "entryPoints": [
+ "./src/index.ts"
+ ],
+ "excludePrivate": true,
+ "excludeInternal": true,
+ "plugin": "typedoc-plugin-markdown",
+ "readme": "none"
+}
\ No newline at end of file
diff --git a/wally.lock b/wally.lock
new file mode 100644
index 0000000..2d18dd4
--- /dev/null
+++ b/wally.lock
@@ -0,0 +1,8 @@
+# This file is automatically @generated by Wally.
+# It is not intended for manual editing.
+registry = "test"
+
+[[package]]
+name = "bytebit/value-holders"
+version = "0.0.1"
+dependencies = []
diff --git a/wally.toml b/wally.toml
new file mode 100644
index 0000000..1bf4230
--- /dev/null
+++ b/wally.toml
@@ -0,0 +1,9 @@
+[package]
+name = "bytebit/value-holders"
+description = "A module for passing any values around by sharing a pointer, as well as allowing consumers to subscribe to changes and allowing authors to hold locks on changing the value."
+version = "0.0.1"
+license = "MIT"
+registry = "https://github.com/UpliftGames/wally-index"
+realm = "shared"
+
+[dependencies]